使用ffmpeg,我使用以下命令从udp流(hd264以25 fps)获取帧:
ffmpeg -loglevel debug -i udp://231.20.20.146:2005 -fflags nobuffer -r 1 -preset ultrafast -vf scale = 432:243 -f image2pipe -vcodec ppm pipe:1
在管道的另一端,我正在运行一个非常简单的二进制文件,它输出接收帧的时间。
然而,即使我指定fps 1,帧也会有一些延迟进入管道,延迟时间为100-200ms。
导致这种延迟的原因是什么?它是帧的解码和ppm图像的编码?以及如何强制ffmpeg至少在彼此之间的正确距离发送图像,以便每帧在前一帧之后的1000毫秒到达?
PS。前6帧被缓冲并几乎立即进入管道。以下是记录的ms值的示例:
5350 5368 5385 5493 5599 5676 5785 6221 7243 8235 9218 10219 11227 12268 13268 14242 15288 16219 17297 18222 19284 20272
答案 0 :(得分:0)
最接近解决方案是在视频过滤器中使用fps:
ffmpeg -analyzeduration 100000 -i udp://231.20.20.146:2005 -r 8 -fflags nobuffer -preset ultrafast -vf "scale=432:243, fps=8, realtime" -f image2pipe -vcodec ppm pipe:1
仍然会有一些关闭1-3毫秒的事件,但这可能是由于cpu缩放或将流转换为ppm ..