WebRTC 視頻通信中的錯(cuò)誤恢復(fù)機(jī)制

道路交通與網(wǎng)絡(luò)交通有很相似之處。就像道路上的車輛一樣,網(wǎng)絡(luò)分包也可能轉(zhuǎn)錯(cuò)了彎,或者因?yàn)槎氯麑?dǎo)致延遲。但是,網(wǎng)絡(luò)分包經(jīng)常會(huì)發(fā)生丟失,而道路上的車輛很少會(huì)出現(xiàn)這張狀況。在這篇文章中,我們將討論媒體流是如何被壓縮、通過網(wǎng)絡(luò)進(jìn)行傳輸以及各種錯(cuò)誤恢復(fù)機(jī)制。


視頻傳輸、編碼與解碼

在開始討論視頻壓縮和錯(cuò)誤恢復(fù)機(jī)制前,我們先快速回顧一下視頻和音頻是如何從發(fā)送者的攝像頭和麥克風(fēng)傳送到接收者的屏幕和音頻輸出的。

原始碼流在發(fā)送端捕獲,使用選擇好的編碼方式對(duì)幀進(jìn)行編碼后,以包的形式通過網(wǎng)絡(luò)發(fā)送。數(shù)據(jù)包在接收端被拼裝成幀。然后解碼器將這些幀解碼為原始碼流,并進(jìn)行播放。

如果部分?jǐn)?shù)據(jù)包在傳輸過程中丟失,接收端的解碼器會(huì)請(qǐng)求發(fā)送端重傳,同時(shí)等待這些包的到來。這對(duì)于低延遲的網(wǎng)絡(luò)很有效,接收端的去抖動(dòng)緩沖小,足以保持交互性。當(dāng)延遲較大時(shí),重傳的包可能需要比較久的時(shí)間才能到達(dá),這時(shí)就需要依賴更加復(fù)雜的錯(cuò)誤恢復(fù)機(jī)制,如:向前糾錯(cuò),全內(nèi)請(qǐng)求等等。

視頻壓縮方法

為了視頻盡可能的保持高效,視頻數(shù)據(jù)通過不同的編碼進(jìn)行壓縮。以幀為單位進(jìn)行壓縮,按照壓縮中的不同作用可分類為:內(nèi)幀(Intra-frames,I幀),預(yù)測(cè)幀(Predictive-frames,P幀),和雙向預(yù)測(cè)幀(Bipredictive-frames,B幀)。B幀利用過去的和將來的包進(jìn)行編碼,在實(shí)時(shí)交互的視頻中不會(huì)使用。

一個(gè)I幀包含一個(gè)完整的圖片(經(jīng)過空間壓縮),像傳統(tǒng)的靜態(tài)圖片文件。因此,I幀是獨(dú)立的幀,解碼時(shí)不依賴其他的幀。

P幀則是依賴性的幀,僅包含與之前一幀相比在圖像上有所變化的部分(即,時(shí)序壓縮)。所以,與I幀相比,P幀的壓縮率更高,至于高多少,得取決于幀之間的變化量。因此,這減少了視頻流傳輸?shù)谋忍財(cái)?shù)。舉個(gè)例子,下面的剪輯來自于一場(chǎng)下坡賽車比賽。視頻中的絕大部分保持不變,除了移動(dòng)部分,即汽車和觀眾,需要被編碼為P幀的視頻不變。

I幀以作為P幀的新參考點(diǎn)而被生成。通常在圖像變化很大的時(shí)候創(chuàng)建一個(gè)I幀,如:平移、場(chǎng)景切換、大量動(dòng)作、突然消失等場(chǎng)景發(fā)生時(shí)。

錯(cuò)誤恢復(fù)機(jī)制

IETF已經(jīng)定義了可用于幫助解決丟失媒體數(shù)據(jù)的錯(cuò)誤恢復(fù)機(jī)制。接下來,我們依次過一遍在rtcweb-RTP-usage中定義的各種機(jī)制:否定確認(rèn)(NACK)、全內(nèi)要求(FIR)、照片丟失提示(PLI)、切片丟失提示(SLI)。

接收端在丟失單個(gè)包或者突發(fā)性丟包時(shí)向發(fā)起端發(fā)出信號(hào)。發(fā)起端收到這些信號(hào)時(shí),做出適當(dāng)?shù)姆磻?yīng)。對(duì)這類請(qǐng)求的一個(gè)典型響應(yīng)是:

1.發(fā)起端重新發(fā)送一個(gè)RTP包:

·在丟失單個(gè)包的情況下,發(fā)送端重新發(fā)送所請(qǐng)求的包。

·在發(fā)生突發(fā)性丟包,或者有新的參與方加入時(shí),接收端此時(shí)不能繼續(xù)解碼,這時(shí)發(fā)送方會(huì)選擇發(fā)送一個(gè)I幀。發(fā)送一個(gè)I幀會(huì)產(chǎn)生大量的包,因此通常作為最后一招使用。

2.通過發(fā)送其中包含了源RTP分組集合的前向修復(fù)(FEC)包進(jìn)行修復(fù)。

下圖顯示了部分運(yùn)用于實(shí)時(shí)交互視頻流的錯(cuò)誤恢復(fù)方案:

其適用于各種丟包數(shù)量和鏈路延遲的錯(cuò)誤恢復(fù)機(jī)制。

否定確認(rèn)(NACK)

NACK在一多媒體數(shù)據(jù)流的分組丟失(這是一個(gè)通用的機(jī)制可以適用于音頻和視頻流)時(shí)由接收端產(chǎn)生。發(fā)送者以重發(fā)所請(qǐng)求的(如果仍然在其發(fā)送緩存中的)包的方式響應(yīng)NACK ,并基于觀察到的往返時(shí)間確認(rèn)該數(shù)據(jù)包能在解碼時(shí)及時(shí)到達(dá)接收端。

全內(nèi)請(qǐng)求(FIR

視頻在WebRTC的會(huì)話中總是以一個(gè)I幀開始,然后發(fā)送P幀。但是,當(dāng)有新的參與者中途加入會(huì)議會(huì)話時(shí),很有可能接收到一系列P幀,但因缺少相應(yīng)的I幀,它并不能解碼。這種情況下,該接收端會(huì)發(fā)送一個(gè)FIR以請(qǐng)求一個(gè)I幀。

因此,在大的會(huì)議平臺(tái)中,例如與會(huì)方達(dá)到100人時(shí),在很短的時(shí)間間隔內(nèi)加入或重新加入會(huì)議,每個(gè)參與者都會(huì)請(qǐng)求I幀以開始解碼,取決于重新加入的頻率,可能會(huì)導(dǎo)致發(fā)送方創(chuàng)建大量的I幀。

圖片丟失提示(PLI

圖片丟失提示消息表明突發(fā)性的丟包影響到了一個(gè)或多個(gè)幀中的多個(gè)包。發(fā)送方可以通過重傳這些包或者生成一個(gè)新的I幀以作出回應(yīng)。但一般來說,PLI同時(shí)表現(xiàn)得像一個(gè)NACK和一個(gè)FIR,因此,通過使用PLI,接收端為發(fā)送端如何對(duì)該請(qǐng)求作出響應(yīng)提供了更大的靈活度。

切片丟失提示(SLI

切片丟失提示消息表明該包丟失影響到單個(gè)幀的部分(即,多個(gè)macroblock)。因此,當(dāng)發(fā)送端接收到SLI消息時(shí),它可以通過重新編碼的方式糾正切片,停止部分幀解碼錯(cuò)誤的傳播。

儀表盤上的新圖

為了幫助我們的客戶看到他們的應(yīng)用程序如何發(fā)送和接收實(shí)時(shí)視頻,我們?cè)黾恿藞D表顯示如下:

1.發(fā)送端從所有media track接收NACK的頻率;

2.發(fā)送端從視頻track接收到FIR/PLI/SLI請(qǐng)求的頻率。

部分指標(biāo)目前只在所報(bào)告的斷點(diǎn)在Chrome瀏覽器中的情況下適用。

在callstats.io儀表盤中顯示的關(guān)于一場(chǎng)WebRTC會(huì)議中NACK數(shù)目的圖標(biāo)

更多WebRTC優(yōu)秀資源可登陸編風(fēng)網(wǎng)http://befo.io/

微信公眾號(hào):WebRTC中文網(wǎng),微信ID:webrtcorgcn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 目錄 【如何快速的開發(fā)一個(gè)完整的iOS直播app】(原理篇) 【如何快速的開發(fā)一個(gè)完整的iOS直播app】(播放篇...
    袁崢閱讀 169,334評(píng)論 129 1,916
  • 前言 大半年沒寫博客了,但我一直關(guān)注著互聯(lián)網(wǎng)的動(dòng)向,最近會(huì)研究很多東西,并分享,今年移動(dòng)直播行業(yè)的興起,誕生了一大...
    flyinskybiu閱讀 6,780評(píng)論 1 25
  • 曾經(jīng),對(duì)于那些正在承受傷痛與艱難的人們,我只愿沉默 或者抱以同情的狀態(tài)靜靜看著, 因?yàn)橛X得自己那時(shí)也是獨(dú)自吞下所有...
    FOCUS鏡歌閱讀 416評(píng)論 0 0
  • 遷移起因: 基于Hadoop的離線處理平臺(tái)上線一段時(shí)間,發(fā)現(xiàn)hiveserver2非常不穩(wěn)定,平時(shí)分析人員都...
    胡小糊涂閱讀 6,392評(píng)論 0 2

友情鏈接更多精彩內(nèi)容