視訊直播關鍵技術:流暢、擁塞和延時追趕
這兩年網際網路領域的一個熱門關鍵詞就是視訊直播,從剛開始的遊戲直播和秀場娛樂開始,現在各個行業裡都植入了直播元素。網易雲信多年以來,一直深耕於音視訊領域,這篇文章將和大家聊一聊視訊直播的幾個關鍵技術。
相關閱讀推薦
清晰度
4K、1080p、720p,這些概念被各大電視機廠商炒作了這麼多年,已經地球人都懂了。4K在網際網路視訊直播裡現在還不普及,主要是對網路資料傳輸要求太高了。1080p在一些對清晰度要求較高的場景如遊戲直播裡已經慢慢普及,要求的資料傳輸速率大約在4Mbps左右。720p是現在直播的主流清晰度,速率大約在1Mbps左右。在一些要求不太高的領域,還會有540p或者360p出現。
流暢度
如果在直播時出現卡頓、轉圈,就意味著不流暢。主播和觀眾的連線通道好比一根水管,流量是有限的,因此如果清晰度提升意味著觀眾收看直播的流暢度有可能會下降。
延時
視訊直播都是講求互動性的,如果跟秀場妹妹聊天,講了半天都沒反應就略坑爹了。但是延時也不全是壞處,適當的延遲意味著在觀眾端能夠有一定的視訊流資料快取,當出現網路不穩定時能夠抵禦小範圍波動而使得觀眾無感知。
首屏時間
當觀眾進入直播間算起,到出現第一個主播畫面的時間叫做首屏時間。為了保證直播流暢,會快取一段資料之後再開始播放,但這個也不是絕對的,後文會詳細描述。
所以,最後來總結一下這幾個指標間的關係。
接下來我們會詳細描述一下整個視訊直播過程,視訊流資料是如何在主播發送端、CDN、觀眾播放端之間流轉的,而在技術上我們又可以做哪些事情來保證使用者收看體驗。
1.首屏秒開
先從觀眾進入直播間那一刻說起,這相當於整個直播生命週期的開始。當進入直播間後,播放器會向CDN請求資料。此時,假設主播已經發送視訊流資料到了第100幀,由於資料傳輸的一些延時,CDN端最新收到的資料可能在第90幀。當CDN接收到拉取視訊流請求時,他會做一件非常有意思的事情,即往前回溯一段資料,在圖中顯示的是回溯2秒鐘,那就到了視訊流的第五幀。CDN會把第五幀開始往後的資料,通過RTMP或其他直播協議源源不斷的傳送到播放器。那為什麼要往回2秒鐘呢,這可能算是目前視訊直播技術中一個比較有特點的技術優化,能用於很好地平衡流暢度和首屏秒開時間。具體運作機制我們接下來再看。
2.流暢播放
接下去發生的事情,很好地可以說明回退2秒的作用。因為CDN是從第5幀開始傳送資料,之後的資料全部快取在CDN伺服器中,因此可以源源不斷地把資料傳送到客戶端,圖中顯示了從第5幀到50幀之間的資料,全部快取在播放器記憶體中。這部分資料可以用於有效的抵抗網路波動造成的影響。當然,這樣做的一個缺點是播放器相比於主播,延遲時間增加了2秒。所以說,視訊直播所做的事情,就是在延時和流暢度之間找到一個很好的平衡點。
3.網路擁塞
網路擁塞是網際網路上最常見的一個情景,接下去討論當發生網路擁塞時發生的情景。假設當觀眾播放到第150幀時,使用者下行網路出現問題,如果播放器沒有新的資料到來,必然會畫面卡住並開始轉菊花。而此時,主播端並不會感知到這個事情,主播還在正常推送視訊流資料。在經過了大概4秒左右的卡頓後,觀眾端的網路恢復,資料又會源源不斷從CDN流向播放器。在圖中看到網路流暢時,播放器的快取中已經存放了第280幀資料,此時當前畫面是150幀。這會產生一個什麼問題?因為播放器播放資料是按照每一幀的時間戳勻速播放,因此如果不做任何優化就意味著每經過一次卡頓,直播的延遲就會增加一段時間,而增加的時間和被卡住的時間是一致的。
4.延時追趕
經過剛剛的描述,大家一定已經明白了延時累加是一個必須解決的問題。因此,播放器還需要做的事情就是延時追趕。播放器必須要實時偵測快取中資料的情況,一旦大於某一閾值就啟動延時追趕。追趕的方式,可以是直接扔掉多餘資料也可以採用快進方式。快進模式相對來說使用者體驗會好一些,不會產生明顯跳躍,處理時要注意聲音不要因為快進而產生尖刺。最後再提一下,延時追趕不能太激進,還是應該在快取中留一段資料,用於緩解以後可能再次發生的網路擁塞。
前文描述了首屏啟動、流暢播放、網路擁塞、延時追趕的基本概念和每個階段內部所發生的事情,整個直播就在流暢、擁塞和延時追趕三個階段中來回往復。看完本文,有興趣讀者可以嘗試利用開源軟體自己去寫個直播APP,可以拿來練手娛樂,如果要上線還有各種其他奇葩的坑。
另外,想要獲取更多產品乾貨、技術乾貨,記得關注。
網易雲信(NeteaseYunXin)是集網易18年IM以及音視訊技術打造的PaaS服務產品,來自網易核心技術架構的通訊與視訊雲服務,穩定易用且功能全面,致力於提供全球領先的技術能力和場景化解決方案。開發者通過整合客戶端SDK和雲端OPEN API,即可快速實現包含IM、音視訊通話、直播、點播、互動白板、簡訊等功能。