我们有一款将视频编码为H264的Android应用.在所有以前尝试过的Android设备上,这会编码到我需要的Baseline配置文件.
在联想Yoga 10上,编解码器是OMX.MTK.VIDEO.ENCODER.AVC.这将视频编码为High Profile,这给接收设备带来了问题.
我正在使用MediaCodec.似乎没有办法设置要使用的配置文件.
我不确定这个编解码器是否真的尊重请求的值,但它可能值得一试.
有关设置过程的示例,请参阅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常量表示).
不确定这有什么帮助,但它至少值得一试.