詳解低延時高音質:丟包、抖動與 last mile 優化那些事兒


本篇是「詳解低延時高音質系列」的第三篇技術分享。我們這次要將視角放大,從整個音頻引擎鏈路的角度,來講講在時變的網絡下,針對不同的應用場景,如何權衡音質和互動的實時性。


當我們在討論實時互動場景下的低延時、高音質的時候,我們其實要面對的是從端到端整個音頻引擎鏈路上的音質問題。我們在第一篇文章中,簡單的描繪過一條音頻傳輸的過程,如果在該基礎上再進一步細化,音頻引擎的整個鏈路包含以下各步驟:

1. 采集設備對聲學信號進行采樣,形成計算機可操作的離散音頻信號;

2. 由于音頻信號的短時相關性,將音頻信號進行分幀處理,經過 3A 解決方案處理聲學、環境噪音、回聲、自動增益等問題;

3. 編碼器對音頻信號進行實時壓縮,形成音頻碼流;

4. 根據 IP+UDP+RTP+Audio Payload 的格式組包后發送端將音頻數據包發向網絡,重組經過網絡到達接收端的數據包;

5. 經過抗抖緩存解碼器重建連續的音頻流播放設備將連續的音頻流播放出來。

在以上不同的音頻處理環節中,都會不可避免地對音頻信號產生一些損傷。我們將上述因采集、播放而對音頻信號引入的損傷稱為「設備損傷」,在環節 2 引入的損傷稱為「信號處理損傷」,在編碼與解碼過程中引入的稱為「編碼損傷」,環節 4 中的稱為「網絡損傷」。

如果要為用戶提供全頻帶的高質量音頻互動體驗,就需要在上述的音頻引擎鏈路支持全頻帶的處理,并在一些約束條件下(比如來自設備、網絡帶寬、聲學環境等),將各個環節引入的損傷盡可能降低到最小。


當音頻數據進入網絡,它會遇到……

如果將網絡視作信息的公路,那么音頻數據包就像是一輛輛跑在公路上的車。這輛車從北京開到上海,途徑的高速公路就是主干網絡,崎嶇山路就是弱網環境。假設每分鐘都有一輛車從北京出發上路,那么他們會遇到三個實時傳輸中的常見問題:丟包、延時、抖動。

丟包

“丟包”指的是有的車無法在有效時間內無法達到終點,甚至可能永遠也到不了終點。有的車可能永遠堵在北京的三環上了,有的車可能中途出了車禍。假如我們的一百輛車里有五輛車因為各種原因沒能按時到達上海,我們這次車隊傳輸的“丟包率”就是 5%。是的,互聯網傳輸也一樣,它并不是百分百可靠的,總有數據無法按時傳輸到目的地。

延時

“延時”指的是每輛車從北京鳥巢開到上海的平均時間。顯然,車隊走高速公路肯定要比走各種小公路快很多,而且從鳥巢出發沿著怎樣的路線開上高速公路也有很大影響,萬一堵在了三環可就要多花好幾個小時了。所以這個值和車隊選擇的行駛路線有關。互聯網傳輸也是一樣的道理,需要傳輸數據的兩點之間經常是有很多可選路徑的,而這些路徑的延時往往相差很大。

抖動

“抖動”指的是車子到達的順序、間隔和出發時的差異。雖然我們的一百輛車在北京是等間隔的一分鐘一輛出發的,但是它們到達上海時卻并不是按順序一分鐘一輛到達的,甚至可能有晚出發的車比早出發的車先到的情況。互聯網傳輸也一樣,如果簡單地按照收到的音視頻數據順序直接播放出來,就會出現失真的現象。

總結來講:

1. 在網絡上進行實時的音頻交互,編碼后的音頻碼流根據實時傳輸協議組裝成數據包。其中數據包從發送端按照各自的路線經過網絡前往接收端。

2. 全球范圍內,不同區域或者不同時間段,用戶網絡連接的服務質量有時非常差,且不可靠。

基于上述原因,數據包往往不是按準確的順序到達接收端,而是在錯誤的時間以錯誤的順序到達接收端,或數據包丟失等,這就會出現實時傳輸領域通常提到的問題:網絡抖動(jitter),丟包(packet loss),延時(latency)。

丟包、延時、抖動,是基于互聯網進行實時傳輸不可避免的三個問題,不論是在局域網、單一國家地區內傳輸,還是是跨國、跨地區傳輸,都會遇到。

這些網絡問題,在不同區域的分布不同,以聲網Agora 監控的網絡實況來看,在網絡相對較好的中國地區,99% 的音頻互動需要處理丟包、抖動和網絡延時等。這些音頻會話中,20%由于網絡問題會有超過 3% 的丟包,10%的會話有超過 8%的丟包。而在印度的表現差異較大,80%的音頻互動中,大約有 40% 的會話丟失。在印度地區優化 2G/3G 網絡下的服務質量,仍是提供音頻服務的重點。

抖動、延遲、帶寬的限制也是很多的,這些網絡問題導致音頻質量急劇下降,更甚者,影響音頻信號的可懂度,即不能滿足交換信息量的本質通信需求。因此,不論對于使用 WebRTC 的自研團隊,還是提供實時服務的 SDK 服務,嘗試修復這個過程中對音頻信號引入的損傷,都是必修的課題。


丟包控制

為保證可靠的實時互動,處理丟包是必須的。如果沒有提供連續的音頻數據,用戶會聽到卡頓(glitches、gaps),降低了通話質量和用戶體驗。

丟包問題可以抽象為,如何在不可靠傳輸的網絡上,完成可靠傳輸。通常使用前向糾錯 FEC(Forward Error Correction)和 自動重傳請求 ARQ(Automatic Repeat-reQuest)兩個糾錯算法,根據準確的信道狀態估計制定相應策略來解決丟包問題。

FEC 是發送端通過信道編碼和發送冗余信息,接收端檢測丟包,且在不需要重傳的前提下根據冗余信息恢復丟失的大部分數據包。即以更高的信道帶寬作為恢復丟包的開銷。相比ARQ的丟包恢復,FEC 體驗上的延時更小,但由于發送了冗余的數據包,所以信道帶寬消耗較多。

ARQ 使用確認信息 ack(acknowledgements signal,即接收端發回的確認信息表征已正確接收數據包)和 timeouts,即如果發送方在超時前沒有收到確認信息 ack,則通過滑動窗口協議幫助發送端決策是否重傳數據包,直到發送方收到確認信息 ack 或直到超過預先定義的重傳次數。相比 FEC 的丟包恢復,ARQ 延時較大(因為要等待 ack 或不斷重傳),帶寬利用率不高。

簡單講,丟包控制中使用的 FEC、ARQ 方法是通過額外的信道帶寬,以及延時對丟失的數據包進行恢復。這就是傳統抗丟包方法的現狀,那么有什么可行的方法能解決呢?

我們就以之前開源的 Agora SOLO 為例。通常,編解碼器做的事情是壓縮、去冗余,而抗丟包從一定程度上講是信道處理的擴大化。抗丟包是一種糾錯算法的擴展,通過加冗余實現抗丟包。而 Agora SOLO 的策略,是把去冗余和加冗余進行結合,對重點信息加冗余,對非重點信息則更多的去冗余,以達到在信道和信源的聯合編碼的效果。

延時、抖動控制

數據包在網絡傳輸、排隊時本身就會產生延遲、抖動。同時,我們通過丟包控制恢復的數據包也會引入延時和抖動,通常使用自適應的 de-jitter buffer 機制進行對抗,確保音頻等媒體流連續播放。

正如我們上文比喻的,數據包延遲的變化,我們稱之為抖動(jitter),是一條音頻流或其他媒體流數據包之間端到端單向延時的差異。自適應的邏輯是基于數據包到達間隔(IAT,inter-arrival times)的延時估計進行決策。當出現丟包控制未恢復的數據包、過度的抖動、延時、突發丟包,即超出自適應緩存可對抗的延時時,就會出現卡頓。此時接收端一般使用 PLC(Packet Loss Concealment)模塊預測新的音頻數據,以填充音頻數據缺失(由于丟包、過度的抖動和延時引入的丟包、突發丟包)等產生的不連續的音頻信號。

綜上所述,處理網絡損傷,是在不可靠的通信信道上面,通過丟包、延時、抖動控制方法確保數據包盡可能的順序輸出,結合 PLC 預測填充音頻數據的缺失。

要盡可能減小網絡損傷,需要結合以下五點增強弱網邊界:

1. 準確的網絡信道狀態的估計,動態的對丟包控制的策略進行調整和應用;

2. 以及相配套的 de-jitter buffer,以更快、更準的學習速度適應網絡的非穩態(好網絡轉差,差網絡轉好,突發的梳狀網絡)的變化,調整抗抖緩存至大于且更接近于穩態時等價延時的大小,才能確保收聽者在該瞬時網絡環境下的音質好,延時低,逐漸趨于理論最優;

3. 超出弱網可恢復邊界時,通過降低碼率(也常用來解決信道擁塞),提升信道帶寬中冗余數據或重傳次數的開銷;

4. 并結合 PLC 對輸入信號的適應能力,確保不同說話者,時變的背景噪聲下盡可能的減小可察覺的噪聲;

5. 在較小帶寬下,通過編碼器編碼低碼率且高質量的語音,結合3在網絡服務質量差的情況下,增加弱網對抗的魯棒性。

基于以上在丟包、延時、抖動的對抗策略,我們就可以基于互聯網傳輸,提供更好的音頻實時互動體驗。就像我們之前說的,不同地區、不同時間段、不同網絡下,網絡的延時、抖動、丟包情況都不同。而聲網Agora SDK 是面向全球提供高質量的音頻交互服務,讓全球各區域的用戶在線上進行實時互動,通過音頻引擎盡可能將線下的聲學體驗帶給用戶。因此我們也做了多次實地的測試,并觀察 SDK 的 MoS 分(ITU-T P.863)和延時數據表現。

以下是我們在上海中環環線,使用相同設備,在相同運營商網絡下,同時測試的Agora RTC SDK與友商產品的 MOS 分和延時數據。從統計來看,聲網Agora SDK提供的實時音頻交互服務,在提供較高音質的同時,延時更低。

圖:MoS 分對比

圖:延時數據對比

可以從 MoS 分對比圖看出,Agora SDK 的 MOS 主要分布在高分值[4.5, 4.7]區間段,友商主要分布在[3.4, 3.8]。再說一個數據大家可能會有更直觀的概念。我們使用的微信,盡管與 RTC SDK 不屬于同一類型的產品,但也提供語音通話服務。微信在無弱網環境下測量的最高 MoS 分是 4.19。

用戶體驗的實際音頻質量,可由以下音頻質量地圖中圓點的顏色顯示,綠色表示 MOS 分大于4.0;黃色表示 MOS 分處于[3.0, 4.0],紅色表示[1, 3.0]。

圖:上海中環,Agora SDK 的音頻質量

圖:上海中環,友商 的音頻質量

小結

丟包、延時、抖動是在實時互動場景下不可避免的問題。而且這些問題不僅會由于網絡環境、時段、用戶設備等因素不斷產生變化,也會由于底層技術的發展而產生新的變化(比如 5G 的大規模應用)。所以我們針對它們的優化策略也要不斷迭代優化。


在跟隨音頻信號從發送端經過網絡到達接收端之后,音頻體驗的優化并沒有結束。為了“高音質體驗”,我們還要進一步在端上優化音質,下一篇我們詳細分享其冰山一角,敬請期待。

相關閱讀

詳解低延時高音質:編解碼篇

詳解低延時高音質:回聲消除與降噪篇


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容