MediaCodec输出码率,法令至10%时更新码率
问题描述:
我想比较的Android MediaCodec的“比特率模式”之间的区别,我的测试工作流程是:MediaCodec输出码率,法令至10%时更新码率
- 使用MediaExtractor从提取H.264视频帧一个mp4文件(来自视频的100秒剪辑),它的尺寸为1280 * 720;
- 使用MediaCodec解码器来解码这些视频帧;
- 将解码后的帧渲染到MediaCodec编码器的输入表面,输出尺寸为360 * 640;
- 收集编码器输出帧大小,计算每秒的输出比特率;
在测试过程中,我将更改编码器的输出比特率,看看它在不同的“比特率模式”,CQ,VBR和CBR中如何变化。
我的问题是,在VBR和CBR模式下,一旦我改变编码器输出比特率,例如从500 kbps到600 kbps或400 kbps,收集的输出比特率降低到只有50kbps,并且再也不会起来!
我创建了一个python脚本绘制的结果,CBR的结果如下:
红线算出各自的第二输出码率,蓝点是比特率的更新动作,500 - > 1100 - > 400 - > 1000。我们可以看到,在我第一次更新比特率时,它只降低到大约50 kbps。
有什么想法发生了什么?
更多信息:
当我改变编码器的输出尺寸为1280 * 720,情节象下面这样:
这里是我的测试项目的源代码:https://github.com/Piasy/MediaCodecRcTest
请帮助我,谢谢!
答
你的问题似乎是,你有单位kbps的变量mCurrentBr
,而API期望它在单位bps。您在初始化正确处理这个问题:
encodeFormat.setInteger(MediaFormat.KEY_BIT_RATE, mConfig.initBr() * 1000);
mCurrentBr = mConfig.initBr();
,但未能更新比特率时,做同样的:
mParams.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, mCurrentBr);
如果在第二的位置添加一个* 1000
,我希望它表现得更好。
我是多么愚蠢!它加入'* 1000'后效果很好,非常感谢! – Piasy