2017-02-22 273 views
0

我试图在Windows上使用ffmpeg 3.2.2从500万像素USB摄像头捕获和传输视频。下面是我使用的命令行:ffmpeg视频流播放延迟?

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,认为这会导致I帧每2秒插入一次(@ 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秒背部。对于什么是值得的,一旦流开始播放,它似乎运行良好(除了几秒钟之后所有东西都“落后”的事实)。

我是新来的视频流,所以我可能会错过这里明显的东西,但任何人都可以告诉我什么可能会导致这种延迟或建议我可能会进一步排除故障的问题?谢谢!

回答

2

尝试设置这个值:

analyzeduration整数(输入)

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

probesize整数(输入)以字节为单位

集探测大小,即数据的大小来分析得到 流的信息。如果分散到流中的值较高,则可以检测更多 信息,但会增加延迟。必须是一个不小于32的整数。它是默认值为5000000的 。

FFmpeg docs