2017-02-22 276 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