我想比较一下Android MediaCodec的“比特率模式”之间的区别,我的测试工作流程是:
在测试过程中,我将更改编码器的输出比特率,并查看它在不同的“比特率模式”、CQ、VBR和CBR中的变化情况。
我的问题是,在VBR和CBR模式下,一旦我改变编码器输出比特率,例如从500 kbps到600 kbps或400 kbps,收集的输出比特率就会下降到只有50 kbps,再也不起来了!
我创建了一个python脚本来绘制结果,CBR的结果如下所示:

红线是计算每秒输出比特率的,蓝点是比特率更新动作,500 -> 1100 -> 400 -> 1000。我们可以看到,在我第一次更新比特率时,它只减少到大约50 kbps。
知道发生了什么吗?
更多信息:
当我将编码器的输出大小更改为1280*720时,图如下所示:

下面是我的测试项目的源代码:https://github.com/Piasy/MediaCodecRcTest
请帮帮我,谢谢!
发布于 2017-08-07 19:13:26
您的问题似乎是在单元kbps中有变量mCurrentBr,而API期望它在单元bps中。您可以在init正确地处理这个问题:
encodeFormat.setInteger(MediaFormat.KEY_BIT_RATE, mConfig.initBr() * 1000);
mCurrentBr = mConfig.initBr();但是在更新比特率时却没有这样做:
mParams.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, mCurrentBr);如果在第二个位置添加一个* 1000,我希望它表现得更好。
https://stackoverflow.com/questions/45548675
复制相似问题