MediaCodec输出码率,法令至10%时更新码率

问题描述:

我想比较的Android MediaCodec的“比特率模式”之间的区别,我的测试工作流程是:MediaCodec输出码率,法令至10%时更新码率

  1. 使用MediaExtractor从提取H.264视频帧一个mp4文件(来自视频的100秒剪辑),它的尺寸为1280 * 720;
  2. 使用MediaCodec解码器来解码这些视频帧;
  3. 将解码后的帧渲染到MediaCodec编码器的输入表面,输出尺寸为360 * 640;
  4. 收集编码器输出帧大小,计算每秒的输出比特率;

在测试过程中,我将更改编码器的输出比特率,看看它在不同的“比特率模式”,CQ,VBR和CBR中如何变化。

我的问题是,在VBR和CBR模式下,一旦我改变编码器输出比特率,例如从500 kbps到600 kbps或400 kbps,收集的输出比特率降低到只有50kbps,并且再也不会起来!

我创建了一个python脚本绘制的结果,CBR的结果如下:

360*640

红线算出各自的第二输出码率,蓝点是比特率的更新动作,500 - > 1100 - > 400 - > 1000。我们可以看到,在我第一次更新比特率时,它只降低到大约50 kbps。

有什么想法发生了什么?

更多信息:

当我改变编码器的输出尺寸为1280 * 720,情节象下面这样:

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,我希望它表现得更好。

+0

我是多么愚蠢!它加入'* 1000'后效果很好,非常感谢! – Piasy