在 MediaCode 中启用 B 帧编码

sud*_*sti 2 android android-mediacodec

全部,

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

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

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

MediaCoder 支持 B 帧吗?如果是,则锄头配置 B 帧。

Laj*_*nar 6

这取决于设备。Android O 和​​ P 短暂地为 AVC High profile 编码自动启用了 B 帧,但许多应用程序开始崩溃,因为它们没有预料到帧乱序,因此它在启动后不久就被禁用了。此外,MediaMuxer 在某些带有 B 帧的压力流上也会失败(例如,如果 B 帧从未来超过 1 秒的帧引用回来)。这在 Android Q 中已得到修复,但反向引用仍限制为 30 分钟。

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