Pau*_*son 5 encoding android h.264 mediacodec
我们有一款将视频编码为H264的Android应用.在所有以前尝试过的Android设备上,这会编码到我需要的Baseline配置文件.
在联想Yoga 10上,编解码器是OMX.MTK.VIDEO.ENCODER.AVC.这将视频编码为High Profile,这给接收设备带来了问题.
我正在使用MediaCodec.似乎没有办法设置要使用的配置文件.
有没有办法做到这一点?编解码器声称支持Baseline配置文件,但无法使用它.是否有针对此的编解码器特定参数?
您可以尝试将密钥添加profile到您的 MediaFormat,其值为1( OMX_VIDEO_AVCProfileBaseline)。如果您这样做,您可能还需要添加level具有与您的分辨率匹配的级别值的密钥(具有来自 OMX AVC 级别常量的值)。
我不确定这个编解码器是否真的满足请求的值,但它可能值得一试。
有关设置过程的示例,请参阅https://android.googlesource.com/platform/frameworks/av/+/6ade04174/media/libstagefright/ACodec.cppsetupAVCEncoderParameters中的函数。它在输入参数中查找键(从您提供的 MediaFormat 复制),但如果存在,您还需要提供一个参数,使用什么级别取决于您的分辨率。请参阅https://android.googlesource.com/platform/frameworks/native/+/cde4b13a/include/media/openmax/OMX_Video.h了解可用于参数的常量值。profilelevel
但在检查配置文件和级别参数后,无论设置什么,它似乎也会将配置文件覆盖到基线。因此,要么这些行已从您的设备中删除,要么编码器h264type.eProfile完全忽略该字段。
如果有人拥有更接近设备实际使用的源代码树,那么检查它会更好。
作为如何为您的分辨率选择合适级别的示例,请x264_validate_levels查看http://git.videolan.org/?p=x264.git;a=blob;f=encoder/set.c;h= 1a40b71284(但传递给 MediaFormat 的级别需要使用OMX_VIDEO_AVCLEVELTYPE常量来表示)。
不确定这是否有帮助,但至少值得一试。