视频直播关键技术:流畅、拥塞和延时追赶
這兩年互聯(lián)網(wǎng)領(lǐng)域的一個(gè)熱門關(guān)鍵詞就是視頻直播,從剛開始的游戲直播和秀場(chǎng)娛樂開始,現(xiàn)在各個(gè)行業(yè)里都植入了直播元素。網(wǎng)易云信多年以來,一直深耕于音視頻領(lǐng)域,這篇文章將和大家聊一聊視頻直播的幾個(gè)關(guān)鍵技術(shù)。
相關(guān)閱讀推薦
《如何快速實(shí)現(xiàn)移動(dòng)端短視頻功能?》
《視頻私有云實(shí)戰(zhàn):基于Docker構(gòu)建點(diǎn)播私有云平臺(tái)》
清晰度
4K、1080p、720p,這些概念被各大電視機(jī)廠商炒作了這么多年,已經(jīng)地球人都懂了。4K在互聯(lián)網(wǎng)視頻直播里現(xiàn)在還不普及,主要是對(duì)網(wǎng)絡(luò)數(shù)據(jù)傳輸要求太高了。1080p在一些對(duì)清晰度要求較高的場(chǎng)景如游戲直播里已經(jīng)慢慢普及,要求的數(shù)據(jù)傳輸速率大約在4Mbps左右。720p是現(xiàn)在直播的主流清晰度,速率大約在1Mbps左右。在一些要求不太高的領(lǐng)域,還會(huì)有540p或者360p出現(xiàn)。
流暢度
如果在直播時(shí)出現(xiàn)卡頓、轉(zhuǎn)圈,就意味著不流暢。主播和觀眾的連接通道好比一根水管,流量是有限的,因此如果清晰度提升意味著觀眾收看直播的流暢度有可能會(huì)下降。
延時(shí)
視頻直播都是講求互動(dòng)性的,如果跟秀場(chǎng)妹妹聊天,講了半天都沒反應(yīng)就略坑爹了。但是延時(shí)也不全是壞處,適當(dāng)?shù)难舆t意味著在觀眾端能夠有一定的視頻流數(shù)據(jù)緩存,當(dāng)出現(xiàn)網(wǎng)絡(luò)不穩(wěn)定時(shí)能夠抵御小范圍波動(dòng)而使得觀眾無感知。
首屏?xí)r間
當(dāng)觀眾進(jìn)入直播間算起,到出現(xiàn)第一個(gè)主播畫面的時(shí)間叫做首屏?xí)r間。為了保證直播流暢,會(huì)緩存一段數(shù)據(jù)之后再開始播放,但這個(gè)也不是絕對(duì)的,后文會(huì)詳細(xì)描述。
所以,最后來總結(jié)一下這幾個(gè)指標(biāo)間的關(guān)系。
接下來我們會(huì)詳細(xì)描述一下整個(gè)視頻直播過程,視頻流數(shù)據(jù)是如何在主播發(fā)送端、CDN、觀眾播放端之間流轉(zhuǎn)的,而在技術(shù)上我們又可以做哪些事情來保證用戶收看體驗(yàn)。
1.首屏秒開
先從觀眾進(jìn)入直播間那一刻說起,這相當(dāng)于整個(gè)直播生命周期的開始。當(dāng)進(jìn)入直播間后,播放器會(huì)向CDN請(qǐng)求數(shù)據(jù)。此時(shí),假設(shè)主播已經(jīng)發(fā)送視頻流數(shù)據(jù)到了第100幀,由于數(shù)據(jù)傳輸?shù)囊恍┭訒r(shí),CDN端最新收到的數(shù)據(jù)可能在第90幀。當(dāng)CDN接收到拉取視頻流請(qǐng)求時(shí),他會(huì)做一件非常有意思的事情,即往前回溯一段數(shù)據(jù),在圖中顯示的是回溯2秒鐘,那就到了視頻流的第五幀。CDN會(huì)把第五幀開始往后的數(shù)據(jù),通過RTMP或其他直播協(xié)議源源不斷的發(fā)送到播放器。那為什么要往回2秒鐘呢,這可能算是目前視頻直播技術(shù)中一個(gè)比較有特點(diǎn)的技術(shù)優(yōu)化,能用于很好地平衡流暢度和首屏秒開時(shí)間。具體運(yùn)作機(jī)制我們接下來再看。
2.流暢播放
接下去發(fā)生的事情,很好地可以說明回退2秒的作用。因?yàn)镃DN是從第5幀開始發(fā)送數(shù)據(jù),之后的數(shù)據(jù)全部緩存在CDN服務(wù)器中,因此可以源源不斷地把數(shù)據(jù)發(fā)送到客戶端,圖中顯示了從第5幀到50幀之間的數(shù)據(jù),全部緩存在播放器內(nèi)存中。這部分?jǐn)?shù)據(jù)可以用于有效的抵抗網(wǎng)絡(luò)波動(dòng)造成的影響。當(dāng)然,這樣做的一個(gè)缺點(diǎn)是播放器相比于主播,延遲時(shí)間增加了2秒。所以說,視頻直播所做的事情,就是在延時(shí)和流暢度之間找到一個(gè)很好的平衡點(diǎn)。
3.網(wǎng)絡(luò)擁塞
網(wǎng)絡(luò)擁塞是互聯(lián)網(wǎng)上最常見的一個(gè)情景,接下去討論當(dāng)發(fā)生網(wǎng)絡(luò)擁塞時(shí)發(fā)生的情景。假設(shè)當(dāng)觀眾播放到第150幀時(shí),用戶下行網(wǎng)絡(luò)出現(xiàn)問題,如果播放器沒有新的數(shù)據(jù)到來,必然會(huì)畫面卡住并開始轉(zhuǎn)菊花。而此時(shí),主播端并不會(huì)感知到這個(gè)事情,主播還在正常推送視頻流數(shù)據(jù)。在經(jīng)過了大概4秒左右的卡頓后,觀眾端的網(wǎng)絡(luò)恢復(fù),數(shù)據(jù)又會(huì)源源不斷從CDN流向播放器。在圖中看到網(wǎng)絡(luò)流暢時(shí),播放器的緩存中已經(jīng)存放了第280幀數(shù)據(jù),此時(shí)當(dāng)前畫面是150幀。這會(huì)產(chǎn)生一個(gè)什么問題?因?yàn)椴シ牌鞑シ艛?shù)據(jù)是按照每一幀的時(shí)間戳勻速播放,因此如果不做任何優(yōu)化就意味著每經(jīng)過一次卡頓,直播的延遲就會(huì)增加一段時(shí)間,而增加的時(shí)間和被卡住的時(shí)間是一致的。
4.延時(shí)追趕
經(jīng)過剛剛的描述,大家一定已經(jīng)明白了延時(shí)累加是一個(gè)必須解決的問題。因此,播放器還需要做的事情就是延時(shí)追趕。播放器必須要實(shí)時(shí)偵測(cè)緩存中數(shù)據(jù)的情況,一旦大于某一閾值就啟動(dòng)延時(shí)追趕。追趕的方式,可以是直接扔掉多余數(shù)據(jù)也可以采用快進(jìn)方式。快進(jìn)模式相對(duì)來說用戶體驗(yàn)會(huì)好一些,不會(huì)產(chǎn)生明顯跳躍,處理時(shí)要注意聲音不要因?yàn)榭爝M(jìn)而產(chǎn)生尖刺。最后再提一下,延時(shí)追趕不能太激進(jìn),還是應(yīng)該在緩存中留一段數(shù)據(jù),用于緩解以后可能再次發(fā)生的網(wǎng)絡(luò)擁塞。
前文描述了首屏啟動(dòng)、流暢播放、網(wǎng)絡(luò)擁塞、延時(shí)追趕的基本概念和每個(gè)階段內(nèi)部所發(fā)生的事情,整個(gè)直播就在流暢、擁塞和延時(shí)追趕三個(gè)階段中來回往復(fù)。看完本文,有興趣讀者可以嘗試?yán)瞄_源軟件自己去寫個(gè)直播APP,可以拿來練手娛樂,如果要上線還有各種其他奇葩的坑。
另外,想要獲取更多產(chǎn)品干貨、技術(shù)干貨,記得關(guān)注網(wǎng)易云信博客。
網(wǎng)易云信(NeteaseYunXin)是集網(wǎng)易18年IM以及音視頻技術(shù)打造的PaaS服務(wù)產(chǎn)品,來自網(wǎng)易核心技術(shù)架構(gòu)的通信與視頻云服務(wù),穩(wěn)定易用且功能全面,致力于提供全球領(lǐng)先的技術(shù)能力和場(chǎng)景化解決方案。開發(fā)者通過集成客戶端SDK和云端OPEN API,即可快速實(shí)現(xiàn)包含IM、音視頻通話、直播、點(diǎn)播、互動(dòng)白板、短信等功能。
總結(jié)
以上是生活随笔為你收集整理的视频直播关键技术:流畅、拥塞和延时追赶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次Socket.IO长链服务的性能压
- 下一篇: 视频直播技术之iOS端推流