使用 MediaCodec 和 MTK Codec 编码时选择 H264 Profile

2023-11-24

我们有一个 Android 应用程序,可以将视频编码为 H264。在所有以前尝试过的 Android 设备上,这都会编码为 Baseline 配置文件,这正是我所需要的。

在 Lenovo Yoga 10 上,编解码器为 OMX.MTK.VIDEO.ENCODER.AVC。这会将视频编码为 High Profile,这会给接收设备带来问题。

我正在使用 MediaCodec。似乎没有办法设置要使用的配置文件。

有什么办法可以做到这一点吗?该编解码器确实声称支持基线配置文件,但没有给出使用它的方法。是否有专门针对此的编解码器参数?


您可以尝试的是添加密钥profile到您的 MediaFormat,值为1 (OMX_VIDEO_AVCProfileBaseline)。如果您这样做,您可能还需要添加密钥level级别值也与您的分辨率相匹配(来自 OMX AVC 级别常量的值)。

我不确定这个编解码器是否真的满足请求的值,但它可能值得一试。

See the setupAVCEncoderParameters函数于https://android.googlesource.com/platform/frameworks/av/+/6ade04174/media/libstagefright/ACodec.cpp有关设置过程的示例。它寻找profile键入输入参数(从您提供的 MediaFormat 复制),但如果存在,您还需要提供level参数,以及使用什么级别取决于您的分辨率。看https://android.googlesource.com/platform/frameworks/native/+/cde4b13a/include/media/openmax/OMX_Video.h对于常量值,您可以使用参数。

但在检查配置文件和级别参数后,无论设置什么,它似乎也会将配置文件覆盖到基线。因此,要么这些行已从您的设备中删除,要么编码器忽略h264type.eProfile共领域。

如果有人拥有更接近设备实际使用的源代码树,那么检查它会更好。

作为如何为您的分辨率选择合适级别的示例,请查看x264_validate_levels in http://git.videolan.org/?p=x264.git;a=blob;f=encoder/set.c;h=1a40b71284(但是传递给 MediaFormat 的级别需要使用OMX_VIDEO_AVCLEVELTYPE常数)。

不确定这是否有帮助,但至少值得一试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MediaCodec 和 MTK Codec 编码时选择 H264 Profile 的相关文章

随机推荐

  • 如何在 Bash 中转义单引号字符串中的单引号?

    我想在 Bash 中显示一个字符串 如下所示 I m a student 当然你可以这样做 echo I m a student 但是如何在字符串周围使用单引号来实现这一点呢 echo I m a student 不起作用 但以下有效 ec
  • DoCmd.DeleteObject acTable 与 DoCmd.DeleteObject acTable 之间有什么区别?掉落表

    Details 我有一个 MS Access 数据库过程 可以在数据库中本地创建表 但是 我想确保我创建的表经过测试 如果测试失败 我需要删除 删除已创建的其他表 我猜基本上是一个回滚过程 问题 我遇到了两种删除表的方法 但无法弄清楚其中一
  • android中从包名获取应用程序名称

    我正在尝试开发一个android应用程序 它可以列出所有具有缓存的应用程序 我成功地获取了有关缓存的信息 但现在我想在屏幕上显示那些具有缓存的应用程序 我有包名称 但是问题是如何从包名称中获取应用程序名称 假设包名称是com android
  • 如何将字典中的值添加到电子表格?

    我有一个模板电子表格文档 其中有两列 服务器名称和 IP 地址 如何填充电子表格 以便每个字典键位于 服务器 列中自己的单元格中 而相应的值位于 IP 列中它旁边的单元格中 我正在使用 EPPlus 库 但找不到有关该主题的任何内容 以下是
  • Django:如何使用子查询注释 M2M 或 OneToMany 字段?

    I have Order物体和OrderOperation代表订单操作 创建 修改 取消 的对象 从概念上讲 一个订单有一对多的订单操作 每次对订单进行操作时 都会在该操作中计算总计 这意味着当我需要查找订单的属性时 我只需使用子查询获取最
  • 如何查明“调试模式”是否已启用

    Java 程序如何知道它是否在调试模式下运行 应用程序在常规 全速 模式下的行为应与 调试模式 下 当连接调试器时 在调试模式下运行时 略有不同 应用程序通过 TCP 与另一台计算机 另一个进程或自身内部进行通信 我的同事希望我们使用Soc
  • 如何使用 Composer 安装 Zend Framework 2 Tool

    我不知道如何在使用 Composer 引导时运行 zf php Zend Framework 2 Tool 首先 我根据文档引导 Composer 和 zftool mkdir tmp cd tmp curl s https getcomp
  • docker-compose 在启动使用 create-react-app 创建的 React 应用程序后立即停止

    我正在尝试使用以下命令创建一个反应应用程序create react app所描述的工具here 我想用docker compose在 docker 容器内运行 React 应用程序 我已采取以下步骤 在我的机器上我创建了一个目录调用app并
  • 全局引用命名空间?

    有没有办法在整个解决方案中全局引用命名空间 因此 不要在每个代码文件中都包含这些行 using System using MyNamespace 只需声明一次 每个代码文件都会使用它们 顺便说一句 我正在使用 Visual Studio 不
  • 如何编译 Hive UDF

    我正在尝试编译这个 UDF package com dataminelab hive udf import org apache hadoop hive ql exec UDF import org apache hadoop io Tex
  • 在Python中接收16位整数

    我正在通过串行端口从硬件读取 16 位整数 使用Python 我怎样才能得到正确的LSB和MSB 并使Python明白它是我正在摆弄的16位有符号整数 而不仅仅是两个字节的数据 尝试使用struct module import struct
  • 如何将角度材料步进器步数更改为任何图标或文本?

    角度材料步进器对我来说有以下问题 我无法从文档中找到这些问题 如何显示任何字符串或 html 而不是步进索引 数字 怎么才能显示mat工具提示当鼠标悬停在任何垫子步骤上时 我正在使用最新版本材质 角 IO 不幸的是 现在不可能使用材料中的本
  • 云上的 Node.js TCP 套接字服务器 [Heroku/AppFog]

    可以在 Node js 上运行面向 TCP 套接字的应用程序Cloud 更具体地说Heroku or AppFog 它不会是一个 Web 应用程序 而是一个用于客户端程序访问的服务器 基本思想是利用Cloud 扩展和易于使用的平台 我知道这
  • jQuery 中文档就绪的不同方式?

    这些是同一件事吗 即表示文档准备就绪的方式 function and function jQuery 或者两者之间是否有区别 如果有那么我什么时候应该使用哪个 第一个是快捷方式 ready 第二个是无效的 因为您试图调用一个不可调用的对象
  • 使用 JavaScript 清除 HTML 页面

    有没有办法使用 JavaScript 函数删除页面上现有内容的部分内容 像这样 i i
  • Chrome 和 Firefox 中的 Javascript 提升

    在 Chrome 和 Firefox 中运行它会给出不同的答案 function if true function f alert yes else function f alert no f 在 Chrome 中 结果是 否 在 Fire
  • 形成和排序正整数数组的最快策略

    在 Java 中 什么更快 创建 填充然后排序一个整数数组 如下所示 int a int 1000 for int i 0 i lt a length i not sure about the syntax a i Maths rand 1
  • 如何使用 CAKeyframeAnimation 对 CoreGraphics 形状绘制进行动画处理

    我正在尝试在 UIView 子类中对 UIBezierPath 在我的示例中是三角形 的绘制进行动画处理 然而 整个子视图是动画的 而不是形状 我在动画中缺少什么吗 void drawRect CGRect rect CAShapeLaye
  • ASP.NET MVC 3:将应用程序移至虚拟目录中。我必须改变什么?

    我一直在开发 MVC 3 应用程序 我使用的是 VS 2010 的内置 Web 服务器 今天 由于各种原因 我被要求将其移动到虚拟目录中并在 IIS 7 下运行 仍然在我的开发 PC 上 现在它的 URL 是localhost MyVirt
  • 使用 MediaCodec 和 MTK Codec 编码时选择 H264 Profile

    我们有一个 Android 应用程序 可以将视频编码为 H264 在所有以前尝试过的 Android 设备上 这都会编码为 Baseline 配置文件 这正是我所需要的 在 Lenovo Yoga 10 上 编解码器为 OMX MTK VI