2017-04-23 396 views
0

我使用hls流式傳輸通過ffmpeg。
在數據流開始延遲存在幾秒鐘。
當我想從一個4k的視頻流中存在非常延遲的時候。
我能做什麼?減少HLS流式傳輸的延遲FFMPEG

+0

您是否在談論減少編碼播放直播流的延遲,或者您是否只是在回放視頻之前詢問緩衝過程,而這隻會通過4k視頻等高比特率視頻延長? – Brad

+0

@Brad我正在談論的是如何減少編碼的實時流播放延遲。但請你幫我解決你問我的兩個問題。 我使用下面的代碼進行流式傳輸。你有什麼建議讓我的需要更好嗎? 'FFMPEG -re -i input.mp4 -s CGA -f HLS -hls_list_size 0 -g 48 -vcodec libx264 -c:一個AAC 200P/out.m3u8 \t \t -s NHD -f HLS -hls_list_size 0 -g 48 -vcodec libx264 -c:aac 360p/out.m3u8' – parsa

回答

1

4K視頻

...

在流延時的開始存在幾秒鐘

是的,當然它。緩衝足夠的數據以回放非常高的比特率需要時間。不僅如此,您的HLS播放器在解碼甚至開始之前通常需要幾個片段。正如@iangetz所說,你可以減少段的長度,但現在由於所有額外的HTTP請求,你將會有更多的開銷。

減少延遲對於HLS流

不要使用HLS。 HLS或任何其他分段流協議(如DASH)都針對低延遲進行了優化。它針對HTTP CDN的重複使用進行了優化,可以在網絡發生變化時進行回放(例如從WiFi到LTE時)以及客戶可選(通常是動態)質量。

分段協議的本質要求將相對較大的緩衝區分塊,然後單獨上傳到服務器/ CDN。這非常有用,但如果您需要低延遲,則不是一個好的折衷。

如果等待時間對您有影響,您需要完全不同的技術。看看WebRTC。利用這項技術,實時視頻流,編解碼器針對質量延遲進行了優化,可靠性降低,有利於延遲。它還需要對分銷基礎設施進行重大投資。

我無法想象這樣一種情況,那些關心4k視頻的人認爲降低質量將值得權衡低延遲。你不能擁有你想要的一切......你必須選擇對你來說真正重要的事情,並從那裏進行優化。如果你想要低延遲,你將不得不降低質量,花費大量的金錢和時間在基礎設施上來支持這項工作。如果您想要高質量和可靠的數據流,則可以在使用DASH(或HLS)對現有基於HTTP的CDN進行分發時保持良好的編碼參數。

+0

謝謝,還有一個問題,我對這個鏈接一無所知[https://trac.ffmpeg.org/wiki/HWAccelIntro](https:/ /trac.ffmpeg.org/wiki/HWAccelIntro) 但我想知道的是,任何幫助我有低延遲與hls直播流? – parsa

+0

@ parsa編號硬件加速只是允許您將編碼工作卸載到GPU,而不是在CPU上運行。 – Brad

2

這可能是播放器在開始播放前用足夠的內容填充緩衝區。

您可以使用'hls_time'減少視頻片段大小,這樣每個片段的下載速度就會更快,但這會對您的服務器產生更多的HTTP請求。此外,您可以使用'hls_init_time'減少第一個分段,並按原樣保留其他分段。

http://ffmpeg.org/ffmpeg-all.html#hls-1

hls_init_time秒爲單位設置在 秒初始目標段長度。默認值爲0.在第一個m3u8列表上經過這段時間後,將在下一個關鍵幀 上切割段。在初始 播放列表填充後,ffmpeg將在等於 的時間段中剪切段hls_time

hls_time seconds設置目標段長度,以秒爲單位。默認 值爲2.在此時間 已過去之後,將在下一個關鍵幀上切割段。

另一種方法是在開始播放之前減少播放器所需的緩衝量。我不確定你使用的是什麼球員,但大多數人都有這個選項。