在MediaCode中启用B帧编码

时间:2018-09-14 07:18:18

标签: android mediacodec

全部

我正在使用MediaCodec类来生成视频/ AVC视频流。流编码很好,但是我想使用B帧进行更好的压缩。虽然我已将配置文件设置为AVCProfileHigh编码器不会生成B帧。视频流只有I和P帧。

下面是媒体配置文件配置。

mFormat.setInteger(MediaFormat.KEY_PROFILE,MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);

MediaCoder是否支持B帧? 如果是,则需要配置B帧。

2 个答案:

答案 0 :(得分:1)

不能保证所有设备都支持它,但是某些设备可以。

但是,至少在Android的早期版本中,如果尝试设置配置文件参数,则必须同时设置level参数,否则将不会使用它。有关更多详细信息,请参见https://stackoverflow.com/a/26293422/3115956。设置level参数的事情是您需要选择一个足够高的级别以支持所选的分辨率和帧速率。

答案 1 :(得分:0)

这取决于设备。 Android O和P短暂地自动启用了B帧以进行AVC高配置文件编码,但是许多应用由于它们不希望出现乱序而开始崩溃,因此在启动后不久就被禁用。同样,MediaMuxer在某些带有B帧的压力流上也失败了(例如,如果将来B帧在1秒钟内从帧中返回)。该问题在Android Q中已得到修复,尽管反向引用仍限于30分钟。

从技术上讲,应用程序可以选择使用MediaFormat.KEY_OUTPUT_REORDER_DEPTH格式键(在设置高轮廓之后)获取B帧,但是设备不需要此格式的支持,并且不与AOSP挂钩。