[关闭]
@ltlovezh 2019-08-28T06:00:51.000000Z 字数 656 阅读 283

Media

未分类


编码器

bitrate mode

CBR(Constant bitrate mode)

恒定码率:表示编码器会尽量把输出码率控制为设定值,即我们前面提到的“不为所动”

VBR(Variable bitrate mode)

可变码率:表示编码器会根据图像内容的复杂度(实际上是帧间变化量的大小)来动态调整输出码率,图像复杂则码率高,图像简单则码率低。

CQ(Constant quality mode)

恒定质量:表示完全不控制码率,尽最大可能保证图像质量。

MediaCodec

控制关键帧数量

MediaCodec提供了KEY_I_FRAME_INTERVAL控制关键帧频率,表示多少秒一个I帧。实际测试下来发现,必须通过OpenGLMediaCodec.createInputSurface创建的Surface输入帧,才能达到控制关键帧数量的目的。

此外,MediaCodec还提供了强制I帧的参数MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME,甚至可以编码出一个全部是关键帧的视频。

  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  2. val params = Bundle()
  3. params.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0)
  4. videoEncoder.setParameters(params)
  5. }

参考文章

  1. 安卓视频硬编码实现分析
  2. MediaCodec设置关键帧间隔失效
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注