ffmpeg视频流播放延迟?

时间:2017-02-22 19:35:28

标签: ffmpeg video-streaming latency wowza

我试图在Windows上使用ffmpeg 3.2.2从500万像素USB摄像头捕获和流式传输视频。这是我使用的命令行:

ffmpeg -f dshow -video_size 320x240 -framerate 30 -i video="HD USB Camera" -vcodec libx264 -preset ultrafast -tune zerolatency -g 60 -f mpegts udp://192.168.1.100:10000

我的流的目的地(同一子网上的Ubuntu框)正在运行ffplay:

ffplay -i udp://127.0.0.1:10000

这样可行,但视频流似乎延迟了8到10秒。我的理解是,目的地在收到I帧之前无法开始显示流,因此我尝试指定GOP值为60,认为这会导致每2秒插入一帧I帧(@ 30 FPS)。

进行转码的Windows机器运行i7-3840QM @ 2.80GHz并具有32 GB RAM。 FFmpeg似乎使用非常少的CPU(如2%),所以它看起来并不像它的CPU绑定。就像测试一样,我尝试摄取MP4文件而没有进行任何转码(ffmpeg -re -i localFile.mp4 -c copy -f mpegts udp://192.168.1.100:10000)但是在Ubuntu系统上显示流之前还需要几秒钟。

在相关的说明中,我还评估了Wowza Streaming Engine服务器的试用版本,当我将我的ffmpeg流引导到Wowza时,在Wowza测试播放器开始播放之前我得到了相同的8-10秒延迟回来了。对于它的价值,一旦流开始播放,它似乎运行正常(除了事实是所有事情都是"落后"几秒钟)。

我是视频流的新手,所以我可能会遗漏一些明显的东西,但有人可以告诉我可能导致此延迟的原因或建议我如何进一步解决问题吗?谢谢!

1 个答案:

答案 0 :(得分:2)

尝试设置此值:

  

analyzeuration integer(输入)

     

指定分析多少微秒来探测输入。一个   更高的值将能够检测更准确的信息,但会   增加延迟。它默认为5,000,000微秒= 5秒。

     

探测整数(输入)

     

设置探测大小(以字节为单位),即要分析的数据大小   流信息。较高的值可以检测更多   信息,如果它分散到流中,但会增加   潜伏。必须是一个不小于32的整数。它是5000000 by   默认值。

FFmpeg docs