我是否必须降低零延迟流的GOP大小?

时间:2017-06-10 03:27:18

标签: ffmpeg

我正在以非常慢的速度(每秒1帧)将帧传输到FFmpeg中,我希望以非常低的延迟将它们流出来。

不仅有来源(例如herehere)没有提到我需要将GOP大小(keyint)设置为较小的值,但是是偶数来源(例如herehere)明确表示我必须将GOP大小设置为较小的值。

然而,到目前为止,我发现减少真正长启动延迟的唯一方法是将GOP大小实际减少到1。

无论如何,这是我当前的命令行:

ffmpeg -f image2pipe
       -probesize 32
       -i -
       -c:v libx264
       -preset veryfast
       -crf 23
       -vsync 2
       -movflags "frag_keyframe+empty_moov"
       -profile baseline
       -x264-params "intra-refresh=1"
       -tune zerolatency
       -f mp4
       -

(我也尝试将:bframes=0:force-ctr:no-mbtree:sync-lookahead=0:sliced-threads:rc-lookahead=0添加到-x264-params-tune zerolatency应该做什么),因为其中一些值没有出现在调试输出中,但正如预期的那样没有效果。)

正如你在这里看到的,我们已经有182帧(= 3分钟挂钟)进入流中,但它仍然没有发出任何东西(大小从一开始就是1kB)。

frame=  182 fps=1.0 q=20.0 size=       1kB time=00:00:07.24 bitrate=   0.8kbits/s speed=0.0402x

This实际上谈到了第一张照片的时间,但这似乎并不是什么大问题。 ;)这对我来说,也许我必须让第一个GOP 1帧长,然后我可以切换到更长的GOP? FFmpeg能做到吗?

1 个答案:

答案 0 :(得分:0)

添加-force_key_frames expr:eq(n,1)会在第2帧强制使用KF。

由于您的费率是1 fps,我建议使用lt(n,5)的expr。此外,默认keyint为250,min-keyint为40。因此,如果您想离开并重新加入流,可能需要很长时间才能重新启动。考虑减少keyint。