【问题标题】:Enable B frame encoding in MediaCode在 MediaCode 中启用 B 帧编码
【发布时间】:2019-04-26 04:00:11
【问题描述】:

全部,

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

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

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

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

【问题讨论】:

    标签: android android-mediacodec


    【解决方案1】:

    这取决于设备。 Android O 和​​ P 为 AVC 高配置文件编码自动启用了 B 帧,但许多应用程序开始崩溃,因为他们没想到会出现乱序帧,所以它在启动后不久就被禁用了。 MediaMuxer 在某些带有 B 帧的压力流上也失败了(例如,如果 B 帧在未来 1 秒内从一个帧返回)。这在 Android Q 中已修复,但反向引用仍限制为 30 分钟。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 2018-10-25
        • 2017-03-17
        相关资源
        最近更新 更多