视频直播技术:最大限度保障流畅性和清晰度
直播和互動(dòng)直播在2017年引起了人們的極大關(guān)注,應(yīng)運(yùn)而生的各種直播類APP多如牛毛。隨著互動(dòng)直播的逐漸興起,交互成為直播APP的強(qiáng)需求。然而,實(shí)際網(wǎng)絡(luò)中的丟包、延遲、抖動(dòng)等問題仍然嚴(yán)重影響了直播的效果。
針對(duì)上述問題,本文介紹了網(wǎng)易云信直播的網(wǎng)絡(luò)QoS技術(shù),旨在幫助讀者了解在極差網(wǎng)絡(luò)環(huán)境下如何最大限度的保障直播的流暢性和清晰度。
?
相關(guān)閱讀推薦
《視頻直播關(guān)鍵技術(shù):流暢、擁塞和延時(shí)追趕》
《短視頻技術(shù)詳解:Android端的短視頻開發(fā)技術(shù)》
《視頻直播技術(shù)之iOS端推流》
?
流暢性和清晰度定義
觀眾在觀看直播或者與主播進(jìn)行互動(dòng)直播的過程中,對(duì)音視頻流暢性和清晰度的感受可以通過視頻幀率、視頻PSNR(或SSIM)分值、音頻MOS分值等客觀參數(shù)指標(biāo)來表征。越高的視頻幀率帶來的視頻流暢性越高,越高的視頻PSNR(或SSIM)分值帶來的視頻清晰度越高,越高的音頻MOS分值帶來的音頻流暢性和清晰度越高。
那么,如何通過提高網(wǎng)絡(luò)QoS技術(shù)改善網(wǎng)絡(luò)質(zhì)量,從而提高上述的客觀指標(biāo)呢?下面我們就單向直播和互動(dòng)直播分別進(jìn)行介紹。
?
?
單向直播的流暢性和清晰度
這里的單向直播特指通過RTMP/TCP協(xié)議將音視頻流推送到CDN,然后觀眾拉流觀看的一種直播方式。
眾所周知,TCP是一個(gè)面向連接的傳輸層協(xié)議,協(xié)議本身保證了傳輸?shù)目煽啃浴Mㄟ^調(diào)用開源框架librtmp,開發(fā)者可以非常容易的實(shí)現(xiàn)RTMP推流服務(wù)。然而,在網(wǎng)絡(luò)出現(xiàn)丟包和抖動(dòng)的時(shí)候,TCP的擁塞控制策略會(huì)限制推流端的發(fā)送碼率,使得觀眾端出現(xiàn)突發(fā)的拉流卡頓,影響音視頻的流暢性。
通常情況下,應(yīng)對(duì)網(wǎng)絡(luò)丟包的策略有前向錯(cuò)誤隱藏(FEC)、音頻RED冗余、重傳等,應(yīng)對(duì)網(wǎng)絡(luò)帶寬受限有音視頻的自適應(yīng)碼率調(diào)節(jié)策略。考慮到TCP協(xié)議的特殊性,我們無法設(shè)計(jì)靈活的重傳和自適應(yīng)碼率調(diào)節(jié)策略,數(shù)據(jù)發(fā)送的多少和頻率完全由TCP協(xié)議本身控制。這種情況下,我們可以做的是及時(shí)有效的檢測(cè)網(wǎng)絡(luò)可用帶寬,并調(diào)節(jié)音視頻編碼器的輸出碼率,做到碼率自適應(yīng)。
具體的實(shí)現(xiàn)方法是,通過平臺(tái)(ios、Android或者Windows)相關(guān)的TCP socket接口獲取網(wǎng)絡(luò)信息,感知網(wǎng)絡(luò)擁塞,估算得到可用帶寬,及時(shí)調(diào)節(jié)音視頻編碼器的設(shè)置碼率,防止音視頻卡頓發(fā)生,保證流暢性。
?
?
互動(dòng)直播的流暢性和清晰度
這里的互動(dòng)直播特指連麥者通過RTP/UDP協(xié)議將音視頻流推送到中轉(zhuǎn)服務(wù)器,進(jìn)行混流后再通過RTMP/TCP協(xié)議推送到CDN,然后觀眾拉流觀看的直播方式。
UDP不同于TCP,協(xié)議本身不關(guān)心數(shù)據(jù)是否及時(shí)可靠到達(dá)對(duì)端,只是完成“發(fā)送”的操作。由此,我們可以采用種類繁多的技術(shù)手段保證UDP協(xié)議數(shù)據(jù)的可靠達(dá)到。例如:前向錯(cuò)誤隱藏(FEC)、音頻RED冗余、重傳等策略。根據(jù)網(wǎng)絡(luò)狀況和媒體數(shù)據(jù)的不同,我們采取相應(yīng)的策略。
按照如下的技術(shù)分別介紹:
帶寬估計(jì)的作用是準(zhǔn)確的獲得當(dāng)前的可用網(wǎng)絡(luò)帶寬,進(jìn)而指導(dǎo)音視頻編碼器的帶寬分配,使得實(shí)際發(fā)送碼率不超過可用帶寬,從而不會(huì)引起延時(shí)增加和丟包。常用的帶寬估計(jì)方法包括根據(jù)丟包或者延遲變化估計(jì)帶寬,Google的WebRTC中就包含了完整的帶寬估計(jì)方法,值得大家學(xué)習(xí)借鑒。
當(dāng)接收端收到的音視頻數(shù)據(jù)已經(jīng)發(fā)生了丟失,我們?cè)撊绾位謴?fù)數(shù)據(jù)呢?從音視頻解碼的角度看,可以通過視頻(音頻)前一幀或者多幀數(shù)據(jù)恢復(fù)丟失的數(shù)據(jù)。然而,常用的視頻錯(cuò)誤隱藏方法往往會(huì)對(duì)恢復(fù)的圖像造成馬賽克現(xiàn)象,錯(cuò)誤隱藏的效果不佳。所以大多數(shù)情況不采用這類錯(cuò)誤隱藏技術(shù),而是解碼之前會(huì)判斷一幀數(shù)據(jù)是否完整,完整的數(shù)據(jù)才會(huì)被送入解碼器,不完整的數(shù)據(jù)直接丟棄。音頻領(lǐng)域的錯(cuò)誤隱藏是另一種情況,音頻的錯(cuò)誤隱藏技術(shù)要普遍優(yōu)于視頻的錯(cuò)誤隱藏,流行的音頻壓縮標(biāo)準(zhǔn)Opus、iLBC、iSAC/SILK等,都含有自己的PLC(Packet Loss Concealment)模塊,解碼器在檢測(cè)到丟幀的時(shí)候會(huì)自動(dòng)進(jìn)行錯(cuò)誤隱藏,實(shí)際效果還可以接受。
前向糾錯(cuò)技術(shù)相當(dāng)于在發(fā)送端多發(fā)一部分?jǐn)?shù)據(jù),這部分?jǐn)?shù)據(jù)可能是原始數(shù)據(jù)的復(fù)本,也可能是多份原始數(shù)據(jù)相互計(jì)算的結(jié)果。如果原始數(shù)據(jù)在傳輸過程中發(fā)生了丟失,那么這部分冗余數(shù)據(jù)就可以發(fā)揮作用,幫助恢復(fù)丟失的原始數(shù)據(jù)。當(dāng)然了,這種策略犧牲的是有限的網(wǎng)絡(luò)帶寬。
視頻數(shù)據(jù)區(qū)別于音頻數(shù)據(jù)的一個(gè)特點(diǎn)是,視頻的數(shù)據(jù)包較大,一般情況會(huì)接近MTU大小,同時(shí)觀眾對(duì)視頻數(shù)據(jù)的端到端延遲不如音頻數(shù)據(jù)敏感。因此可以采用數(shù)目較大的FEC分組進(jìn)行前向糾錯(cuò)。而音頻數(shù)據(jù)包較小,數(shù)據(jù)包頭在整個(gè)數(shù)據(jù)包中的占比相對(duì)視頻要高出很多,所以進(jìn)行RED冗余能夠使多個(gè)音頻包復(fù)用同一個(gè)包頭,提高數(shù)據(jù)利用率。另一方面,如果音頻數(shù)據(jù)采用FEC進(jìn)行前向糾錯(cuò),勢(shì)必會(huì)增加延遲,影響通話體驗(yàn)。
因此,視頻數(shù)據(jù)較適宜采用FEC技術(shù)進(jìn)行前向糾錯(cuò),音頻數(shù)據(jù)較適宜采用RED技術(shù)進(jìn)行冗余操作。
除了前向糾錯(cuò)技術(shù),在網(wǎng)絡(luò)RTT較小的時(shí)候,我們也可以向發(fā)送端請(qǐng)求網(wǎng)絡(luò)中丟失的數(shù)據(jù)包,這就是重傳技術(shù)。這個(gè)技術(shù)適用于網(wǎng)絡(luò)RTT較小的情況,相比于FEC和RED,重傳可以大幅提高帶寬利用率,做到“丟哪個(gè)包要哪個(gè)包”,有針對(duì)性的重傳丟失的數(shù)據(jù)包。
考慮到觀眾對(duì)音頻數(shù)據(jù)的敏感性,除非網(wǎng)絡(luò)RTT很小,否則音頻一般不采用重傳技術(shù)。視頻較多采用重傳技術(shù)進(jìn)行錯(cuò)誤恢復(fù),根據(jù)重傳請(qǐng)求數(shù)據(jù)的不同又分為I幀請(qǐng)求和數(shù)據(jù)包請(qǐng)求。
I幀請(qǐng)求是當(dāng)接收端無法繼續(xù)解碼,而且發(fā)送端的GOP長度又很長的時(shí)候,需要及時(shí)請(qǐng)求發(fā)送端發(fā)送I幀,使得接收端根據(jù)這個(gè)I幀可以盡快恢復(fù)顯示。數(shù)據(jù)包請(qǐng)求則是根據(jù)丟失的數(shù)據(jù)包,向發(fā)送端有針對(duì)性的請(qǐng)求,這種情況下發(fā)送端需要緩存已經(jīng)發(fā)出去的數(shù)據(jù)包,以備后續(xù)接收端的請(qǐng)求。
?
以上簡單介紹了直播中提高流暢性和清晰度的幾種方法和策略。實(shí)際使用中還需要考慮多種技術(shù)的有機(jī)結(jié)合,以及服務(wù)器端與客戶端的相互配合,并結(jié)合用戶使用場(chǎng)景和客戶端設(shè)備性能等因素綜合考慮。
另外,想要獲取更多產(chǎn)品干貨、技術(shù)干貨,記得關(guān)注網(wǎng)易云信博客。
?
總結(jié)
以上是生活随笔為你收集整理的视频直播技术:最大限度保障流畅性和清晰度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小议WebRTC拥塞控制算法:GCC介绍
- 下一篇: 互联网1分钟 |1113