2017-02-13 44 views
2

我试图用实时低延迟与Android6.0的MediaCodec将h264编码到流中。 大约有6帧从编码器,其我想知道如何降低如何减少MediaCodec H264编码器等待时间

码是从screenrecord.cpp

部分代码是等待时间:

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

编码器通过丝网的表面在小320x480 60馈送fps,并通过dequeueOutputBuffer()输出流数据。 大约有6帧数据不能通过dequeueOutputBuffer()立即返回给编码器。换句话说,当第N帧被输入时,第(N-6)帧的编码器输出数据被输入。

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

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

当表面图形内容突然变为静态时,没有更多的帧送入编码器。奇怪的是,最新的6帧数据无法以“普通速度”输出,它们在大约10秒内缓慢输出。

问题2如何在突然没有数据输入到编码器时减少最新帧输出的延迟?

回答

1

缓冲由视频编码器决定。我不认为你可以做些什么,除了选择不这样的视频编码器。

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

相关问题