在MediaCode中启用B帧编码

问题描述 投票:0回答:2

所有,

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

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

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

MediaCoder是否支持B帧?如果是,那么如何配置B帧。

android mediacodec
2个回答
1
投票

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

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


0
投票

这取决于设备。 Android O和P为AVC High profile编码自动短暂启用了B帧,但许多应用程序开始崩溃,因为他们没有预期无序帧,所以它在发布后不久就被禁用了。此外,MediaMuxer在一些具有B帧的应力流上失败(例如,如果B帧在未来超过1秒从一帧引用)。这在Android Q中已修复,但后引用仍限制为30分钟。

从技术上讲,应用程序可以选择使用MediaFormat.KEY_OUTPUT_REORDER_DEPTH格式密钥获取B帧(在设置高配置文件后),但设备不需要支持此功能,并且未在AOSP中连接。

© www.soinside.com 2019 - 2024. All rights reserved.