技術解碼 - 鬥魚同款的 SRT 技術是如何對抗推流抖動的?

SRT 推流技術解析

隨着互聯網基礎設施和硬件設備的不斷髮展,廣大直播觀衆對直播清晰度、延遲等觀看體驗的要求越來越高,直播也隨之進入了低延遲、高碼率的時代,直播傳輸技術也面臨着越來越高的挑戰。

騰訊視頻云爲此在全鏈路上針對流媒體傳輸不斷深入優化,使得在各大重要賽事上具備了高可靠、低延遲、高畫質和音質的需求,同時我們也跟客戶,比如鬥魚,進行了更深度的合作。不光在服務端,在 APP 端也進行了 SRT 的合作,和賽事一樣從源頭上保證穩定。

2021 年 3 月 23 日,鬥魚發佈 2020 年第四季度財務報表 “在技術和研發方面,第四季度鬥魚與騰訊達成合作,引入 RTMP over SRT 技術對容易產生網絡抖動的無線網絡環境進行了優化。該技術極大緩解了因鏈路丟包造成的推流丟幀問題,即使網絡在 40% 丟包的情況下,依然能流暢進行直播。” 那麼 SRT 具體是一個什麼樣的推流協議呢,我們可以通過以下的測試數據詳細瞭解下。

通常在直播過程中因網絡丟包,會造成丟幀、觀看卡頓甚至花屏,給觀衆造成很不好的觀看體驗,針對鏈路丟包,SRT 是如何解決的呢?

衆所周知,TCP 一個窗口內的數據包通常會一次性無間隔的發送,容易造成流量突發。Pacing 機制通過平滑發送間隔,來防止該問題。

SRT 是根據帶寬評估來調整發送間隔的。可以從輸入的速率採樣,或者由用戶設置最大帶寬 (maxBW),並留出一部分重傳帶寬 (overheadBW),兩者之和作爲最大的傳輸速率。

基於以上特性,騰訊視頻雲將 SRT 作爲傳輸層之上的協議,可以將任何基於 TCP 的應用層協議改造爲基於 SRT 的應用層協議,針對弱網主播進行源頭的優化。

相較於存在網絡要求高、建聯時間長、累計延時高等諸多問題的傳統 RTMP 協議推流方案,在本次採用的騰訊雲 SRT 技術,允許信號源和目標之間直接建立連接,使得推流延時從 700ms 降低到了 200ms 以下。

同時,SRT 採用的 ACK+NACK 解決方案,極大緩解了因鏈路丟包造成的推流丟幀問題,整體推流丟幀率降低了 75%,用戶觀看直播時的卡頓次數也得到了顯著降低。每隔 10ms,SRT 接收方會發送一個 "正常"ACK 包,將當前接收 buffer 中連續的最大包序號告訴發送方,發送方收到 "正常'ACK 包後,會確認數據,將發送窗口前移,同時發送 ACKACK,接收方依據 T(ackack) - T(ack) 來計算鏈路 rtt。對於高碼率的鏈路,每 10ms 確認一次可能會不及時,爲此,SRT 每收到 64 個包,便會額外回覆一個 LITEACK,用來快速確認數據,儘可能快的讓發送窗口移動。

每次收包時,SRT 會計算當前的 "亂序度"。舉個例子,如下圖所示:

上圖當前時刻的 "亂序度" 爲 2,當發現丟包需要重傳時,SRT 會延遲 2 個包發送 NACK,用來減少一部分因爲 UDP 亂序導致的無效重傳。

總之而言,在新技術的加持下,戶外直播的場景將大大增加,不再侷限於無線網絡優質的地點。即便是在網絡環境較差的場地,主播們也可以爲水友們帶來流暢的直播內容,極大提升了移動端主播的推流質量和直播間用戶的觀看體驗。

在首次嘗試使用 SRT 後,RTMP 推流和 SRT 推流對比如下:

通過上圖的對比可以明顯的看到在應用 SRT 推流後卡頓率有所改善。

在推流丟包率對比這塊,通過終端的信息對比,下行方面在應用 SRT 推流後由於上行質量的優化,下行流暢度也得到相應的提升。以下是鬥魚 App 實際對比效果。

Android 平臺 SRT 推流性能測試數據(測試平臺—MI9)

iOS 平臺 SRT 推流性能測試數據(測試平臺—iPhone XR):

SRT 推流和 QUIC 推流對比如下:

在傳輸質量指標上,我們也與 QUIC 做了對比,SRT 通過更精準和快速的重傳控制,以及針對直播流媒體場景的 pacing 機制,使得在相同丟包率下,應用層丟包較少。

可以看下和 QUIC 上行對比,在推流端相同鏈路同一直播文件的情況下,每 5 分鐘提高了 5% 的丟包率,通過以下示圖可以看出 SRT 的推流幀率更平穩。

目前騰訊雲官網已經發布了標準化的接入文檔提供用戶快速體驗測試,具體接入方法很簡單,只需要將之前的 RTMP 推流地址修改成 SRT 的推流地址通過 OBS 或者 ffmpeg 直接推到騰訊雲服務器。

推流端通過 SRT 協議直接傳輸包含音視頻數據的 ts 流,下行復用了現有直播系統。TS over SRT 已作爲 Haivision 硬件及 OBS 的推流格式標準。

此種模式下,SRT 服務器會解析負載(TS),並轉封裝爲 RTMP 協議,轉推到後端 RTMP 服務器。詳細接入流程可查詢騰訊雲直播官網。

SRT 在快速連接方面有明顯優勢,兩次握手成功即可建連;SRT 的丟包重傳策略出色,ACK、ACKACK、NACK 等提供了豐富的控制消息,還有 RTT、Receive 比特率等。隨着音頻 / 視頻數據包從源流向目標設備,SRT 會檢測並適應兩個端點之間的實時網絡狀況。SRT 有助於補償由於噪聲網絡(例如 Internet)的擁塞而引起的抖動和帶寬波動。它的錯誤恢復機制最大程度地減少了 Internet 連接中典型的數據包丟失。SRT 支持 AES 加密,以實現端到端的安全性,從而確保您的視頻流不會被撬開。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/YaqLzafUQ5MSGA1ulEb3VQ