视频直播关键技术:流畅、拥塞和延时追赶
這兩年互聯網領域的一個熱門關鍵詞就是視頻直播,從剛開始的游戲直播和秀場娛樂開始,現在各個行業里都植入了直播元素。網易云信多年以來,一直深耕于音視頻領域,這篇文章將和大家聊一聊視頻直播的幾個關鍵技術。
相關閱讀推薦
《如何快速實現移動端短視頻功能?》
《視頻私有云實戰:基于Docker構建點播私有云平臺》
清晰度
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.延時追趕
經過剛剛的描述,大家一定已經明白了延時累加是一個必須解決的問題。因此,播放器還需要做的事情就是延時追趕。播放器必須要實時偵測緩存中數據的情況,一旦大于某一閾值就啟動延時追趕。追趕的方式,可以是直接扔掉多余數據也可以采用快進方式??爝M模式相對來說用戶體驗會好一些,不會產生明顯跳躍,處理時要注意聲音不要因為快進而產生尖刺。最后再提一下,延時追趕不能太激進,還是應該在緩存中留一段數據,用于緩解以后可能再次發生的網絡擁塞。
前文描述了首屏啟動、流暢播放、網絡擁塞、延時追趕的基本概念和每個階段內部所發生的事情,整個直播就在流暢、擁塞和延時追趕三個階段中來回往復。看完本文,有興趣讀者可以嘗試利用開源軟件自己去寫個直播APP,可以拿來練手娛樂,如果要上線還有各種其他奇葩的坑。
另外,想要獲取更多產品干貨、技術干貨,記得關注網易云信博客。
網易云信(NeteaseYunXin)是集網易18年IM以及音視頻技術打造的PaaS服務產品,來自網易核心技術架構的通信與視頻云服務,穩定易用且功能全面,致力于提供全球領先的技術能力和場景化解決方案。開發者通過集成客戶端SDK和云端OPEN API,即可快速實現包含IM、音視頻通話、直播、點播、互動白板、短信等功能。
總結
以上是生活随笔為你收集整理的视频直播关键技术:流畅、拥塞和延时追赶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次Socket.IO长链服务的性能压
- 下一篇: 视频直播:Windows中各类画面源的截