android – 使用MediaCodec和MTK Codec进行编码时选择H264配置文件

前端之家收集整理的这篇文章主要介绍了android – 使用MediaCodec和MTK Codec进行编码时选择H264配置文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们有一款将视频编码为H264的Android应用.在所有以前尝试过的Android设备上,这会编码到我需要的Baseline配置文件.

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

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

有没有办法做到这一点?编解码器声称支持Baseline配置文件,但无法使用它.是否有针对此的编解码器特定参数?

最佳答案
您可以尝试将密钥配置文件添加到MediaFormat,值为1(OMX_VIDEO_AVCProfileBaseline).如果这样做,您可能还需要添加一个与您的分辨率匹配的级别值的键级别(使用OMX AVC级别常量中的值).

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

有关设置过程的示例,请参阅https://android.googlesource.com/platform/frameworks/av/+/6ade04174/media/libstagefright/ACodec.cpp中的setupAVCEncoderParameters函数.它在输入参数中查找配置文件键(从您提供的MediaFormat中复制),但如果存在,您还需要提供一个级别参数,以及使用的级别取决于您的分辨率.有关可用于参数的常量值,请参见https://android.googlesource.com/platform/frameworks/native/+/cde4b13a/include/media/openmax/OMX_Video.h.

但是在检查了配置文件和级别参数之后,无论设置什么,它似乎都会将配置文件覆盖到基线.因此,这些行已从您的设备中删除,或者编码器完全忽略h264type.eProfile字段.

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

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

不确定这有什么帮助,但它至少值得一试.

原文链接:https://www.f2er.com/android/431151.html

猜你在找的Android相关文章