我正在尝试使用Android6.0的MediaCodec将h264实时低延迟地编码为流。编码器大约有6帧延迟,我想知道如何减少
代码来自screenrecord.cpp
零件代码为:
while (true) {
encoder->dequeueOutputBuffer(&bufIndex);
}
编码器由屏幕表面以320x480 60 fps的速率进行馈送,并通过dequeueOutputBuffer()输出流数据。dequeueOutputBuffer()不会立即返回数据到编码器的大约6帧。换句话说,当馈送第N帧时,编码器输出第(N-6)帧的数据。
问题1-如何减少编码器中缓冲的帧?在第N帧馈入编码器后,是否可以输出第N帧?
PS:问题1与这个问题相同(尚无好的解决方案)。
当表面图形内容突然变为静态时,不再有帧馈送到编码器。奇怪的是,最新的6帧数据无法以其“正常速度”输出,它们会在约10秒内缓慢输出。
问题2-突然没有数据输入编码器时,如何减少最新帧输出的延迟?
缓冲由视频编码器确定。除了选择不以这种方式运行的视频编码器外,我认为您没有太多可做的事情。
如果您不希望输出暂停,最简单的解决方法是不暂停输入。继续输入相同的帧。编码器应识别出什么都没有改变,并且几乎不会产生输出。screenrecord无法以这种方式工作-它只是在获取帧时提交帧-因此您必须添加超时以重新提交帧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句