首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当更新比特率时,MediaCodec输出比特率法令为10%

当更新比特率时,MediaCodec输出比特率法令为10%
EN

Stack Overflow用户
提问于 2017-08-07 13:54:41
回答 1查看 1K关注 0票数 1

我想比较一下Android MediaCodec的“比特率模式”之间的区别,我的测试工作流程是:

  1. 使用MediaExtractor从mp4文件中提取H.264视频帧(从视频中提取100秒),其大小为1280*720;
  2. 使用MediaCodec解码器对视频帧进行解码;
  3. 将解码后的帧渲染到MediaCodec编码器的输入面,输出尺寸为360*640;
  4. 采集编码器输出帧大小,计算每秒输出比特率;

在测试过程中,我将更改编码器的输出比特率,并查看它在不同的“比特率模式”、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

请帮帮我,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 19:13:26

您的问题似乎是在单元kbps中有变量mCurrentBr,而API期望它在单元bps中。您可以在init正确地处理这个问题:

代码语言:javascript
复制
encodeFormat.setInteger(MediaFormat.KEY_BIT_RATE, mConfig.initBr() * 1000);
mCurrentBr = mConfig.initBr();

但是在更新比特率时却没有这样做:

代码语言:javascript
复制
mParams.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, mCurrentBr);

如果在第二个位置添加一个* 1000,我希望它表现得更好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45548675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档