我们有一个 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(使用前将#替换为@)