为MediaCodec设置的有效比特率是多少

Dav*_*vid 5 java encoding android mediacodec

我正在使用MediaCodec来自相机的视频编码:

MediaFormat format = MediaFormat.createVideoFormat("video/avc", width, height);
        format.setInteger(MediaFormat.KEY_BIT_RATE, 250000);
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
        format.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
        format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
        _mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Run Code Online (Sandbox Code Playgroud)

我发现根据我给出的分辨率,有一些最小有效比特率要设置.如果我在该数量下设置比特率,则完全被忽略.如果我将比特率设置为高于此不可见阈值,则按预期工作.我想要做的是查询我可以KEY_BIT_RATE为任何给定分辨率设置的最小比特率.当我设置一个没有任何影响的比特率时,不会抛出任何错误或任何错误.

Mar*_*lon 3

最低比特率是谷歌对供应商需要支持的分辨率要求的一部分: https: //source.android.com/compatibility/android-cdd.pdf。看5.2

对于其他分辨率,行为未定义。文档中未列出的解决方案还可能会引入其他意外问题,因为它们未包含在 Google 认证测试 (CTS) 中,并且无法保证设备供应商能够使其正常工作

Android 中没有 API 可以检查最小支持的比特率以获得准确的分辨率

  • 这似乎并不能真正回答问题。CDD 表示设备必须支持最低比特率编码,但这并不意味着设备不允许支持低于最低要求的比特率。存在最低要求,因此可以保证满足一定的质量水平。 (3认同)