如何减少MediaCodec H264编码器延迟

时间:2017-02-13 03:49:48

标签: android h.264 mediacodec encoder

我正在尝试使用Android6.0的MediaCodec将h264编码为实时低延迟流。 编码器有大约6帧的延迟,我想知道如何减少

代码来自screenrecord.cpp

部分代码是:

while (true) {
     encoder->dequeueOutputBuffer(&bufIndex);
}

编码器由屏幕的Surface以320x480 60 fps提供,并通过dequeueOutputBuffer()输出流数据。 编码器大约有6帧,其数据不会由dequeueOutputBuffer()立即返回。 换句话说,当第N帧被馈送时,编码器输出第(N-6)帧的数据。

问题1 - 如何减少编码器中缓冲的帧?在第N帧被送入编码器后,是否可以输出第N帧?

PS:问题1与this question相同。(还没有好的解决方案)。

当表面图形内容突然变为静态时,不再向编码器提供帧。奇怪的是,最新的6帧数据无法以“通常的速度”输出,它们会在大约10秒内缓慢输出。

问题2 - 当突然没有数据馈送到编码器时,如何减少最新帧输出的延迟?

1 个答案:

答案 0 :(得分:1)

缓冲由视频编码器确定。除了选择不这样做的视频编码器之外,我认为你无法做到这一点。

如果您不希望输出暂停,最简单的解决方法是不暂停输入。继续输入相同的帧。编码器应该识别出没有任何变化并产生很少的输出。 screenrecord不会以这种方式工作 - 它只是在获取帧时提交帧 - 所以你必须添加一个重新提交帧的超时。