公網傳輸技術之SRT協議解析(上)

語言: CN / TW / HK

作者:張博力

編輯:Alex

▼掃描圖中二維碼瞭解音視訊技術大會更多資訊▼

圖片

摘  要: SRT協議(即安全可靠傳輸協議)是一個新興的網路傳輸協議,適用於實時音視訊傳輸。本文將從SRT協議的原理分析入手,嘗試定義出一個衡量SRT鏈路可靠性高低的指標:鏈路安全冗餘量(Secure-Margin),並詳細介紹如何依照這個指標來部署一個可靠的SRT傳輸鏈路,並分析在不同的直播場景中的引數調整策略。

引  言

音視訊的訊號傳輸技術作為廣電領域的重點技術之一,保障了傳輸的安全和質量。傳統的訊號傳輸手段也許可以用三句話來概括:天上一顆星,地下一根纜,中間面對面的微波。

“天上一顆星” 指的是衛星傳輸,優點是靈活安全可靠並且對於直播現場的條件沒有特殊要求,但其裝置投資和費用非常昂貴。“地下一根纜” 指的是光纖傳輸,優點是安全可靠並且延時極低,但它很依賴光纜鏈路的基礎建設,靈活性較差。“中間面對面的微波” 最初指的是通視條件下的定向微波,後來又發展出長距離的U波段“大微波”和短距離的2G波段“小微波”。隨著5G和網際網路技術的飛速發展,通過公共網際網路安全可靠的傳輸音視訊訊號已經成為一種可能,實際上我們的傳輸手段又多了一種:無需面對面的公網傳輸。

然而公共網際網路中普遍存在著不同程度的丟包、抖動、延時和頻寬波動,這就需要一種可靠的傳輸協議來保證傳輸鏈路的可靠性。SRT(Secure Reliable Transport)協議,即安全可靠傳輸協議,是一種新興的音視訊傳輸協議,在音視訊的點對點實時傳輸方面有著非常好的應用效果。

廣電的技術人員習慣通過鏈路的冗餘量來估算鏈路的可靠程度,衛星鏈路中的類似指標是載噪比冗餘量(C/N Margin),光纖鏈路可以通過光功率衰減和接收端靈敏度來估算光功率冗餘量。類比這些概念,本文將從SRT協議的理論基礎談起,嘗試定義一個衡量SRT鏈路可靠性的指標——安全冗餘量(Secure-Margin)。接著根據這個指標,討論SRT協議中相關引數的設定步驟和策略。

1、SRT協議原理分析

SRT協議能夠在不可預測的網際網路環境下提供安全、可靠的資料傳輸,目前廣泛應用在流媒體傳輸領域。理論上SRT可以傳輸任意型別的資料,但由於其特別針對實時音視訊傳輸做了優化,目前的主要應用場景是跨越公共網際網路點對點傳輸實時音視訊資料

SRT協議最初是一個私有協議,在2017年4月由SRT聯盟將其開源,由於該協議良好的效能以及開源、應用靈活等特性,越來越多的廠商和裝置開始支援SRT協議。在實際工作中,搭配使用不同廠商的SRT裝置也能夠實現高可靠、低延時的音視訊傳輸,這對於使用者來說非常方便和靈活。

1.1 SRT協議和UDP協議

追述SRT的開發歷程我們會發現,它是由**UDT(UDP-based Data Transfer)**協議改進而來,SRT協議保留了UDT協議大多數的核心概念和機制,同時引進了一些改進和增強功能,其中主要包括針對實時音視訊的流量控制、增強的擁塞控制、控制資料的修改、加密機制的改進。UDT協議由Grossman提出,該協議在UDP協議的基礎上添加了可靠性控制和擁塞控制機制來保證可靠性,可以有效地利用高速廣域網路的高頻寬,實現檔案的高效、可靠傳輸。由於UDT協議主要適用於高吞吐的檔案傳輸,SRT主要適用於流媒體傳輸,所以從應用層面來說,SRT協議和UDT協議之間的差別其實是不可跨越的。

拋開SRT協議的歷史,我們可以把它理解成一個基於UDP協議的流媒體傳輸協議。眾所周知,UDP協議是一種基於資料報的不可靠傳輸協議,它以提高資料的傳輸速率作為主要設計原則,只能提供不可靠的資料傳輸服務,盡最大努力交付。

圖1展示了裸露的UDP協議在有損網路上的傳輸效果,測試中利用軟體Netem模擬了具有丟包、抖動、延遲的有損網路,在源端將音視訊訊號進行信源編碼,編碼後輸出的TS流具有可變位元率(VBR)和固定的幀間隔,但是在跨越網路後輸出的碼流特性已經完全改變,固定的幀間隔也因為網路的抖動發生了改變,實際上解碼器很難從這樣的碼流中恢復出正常的音視訊訊號。

圖片

圖1  UDP協議在有損網路下的傳輸效能

由圖2可以看到,SRT協議很好地克服了有損網路環境中的丟包和抖動,在輸出端很好地還原了輸入的碼流,它通過有效的差錯控制、精確的時間戳、反饋訊號、根據延時量定義緩衝區等一系列機制,實現了在有損網路下的流媒體傳輸,其中差錯控制使用了自動重傳請求機制(ARQ)。

圖片

圖2  SRT協議在有損網路下的傳輸效能

1.2 自動重傳請求:ARQ

數字通訊中的差錯控制方法大致可分為兩類:前向糾錯(FEC,Forward Error Correction)和自動重傳請求(ARQ,Automatic Repeat reQuest)。從七十年代開始,ARQ思想就被廣泛應用在各類通訊技術和傳輸協議中,發展至今經歷了多次進化,SRT協議發明者聲稱其對ARQ技術的改進可以稱得上ARQ技術的第三次飛躍。

圖3表示了ARQ技術的基本思想,接收端成功收到資料包後通過反饋通道向傳送端傳送一個指示接收成功的訊號(ACK),若超時未收到, 則通過反饋通道向傳送端傳送一個要求重傳的訊號(NAK),傳送端收到此NAK訊號後就重新傳送相應的未被接收的資料包。因此這種機制除了要求傳送端需要一個重傳緩衝區之外,接收端也需要一個能依次存放資料包的緩衝區。

圖片

圖3  自動重傳請求技術(ARQ)基本思想

圖4表示了ARQ和FEC之間的區別,一般情況下,我****們要根據實用場景的特點和需求來選擇ARQ或FEC。以衛星通訊為例,通訊鏈路的單次往返時延即RTT約為540ms,並且噪聲都為高斯白噪聲,這種情況下使用ARQ效率就很低,也會造成非常大的延時,FEC就成為了最合適的選擇。網際網路環境中的丟包和抖動有很多都是突發的,這種環境就比較適合ARQ技術來工作,因此SRT最初選擇了ARQ作為糾錯方式。隨著SRT應用領域的發展和擴大,最新版的SRT也加入了對FEC的支援,從而更好地適應各類場景下的應用。

圖片

圖4 FEC和ARQ鏈路對比圖

2、定義鏈路的安全冗餘量 (Secure-Margin)

在廣電領域的直播工作中,工作人員都會習慣通過鏈路的冗餘量來估算鏈路的可靠程度,衛星鏈路中的類似指標是載噪比冗餘量(C/N Margin),光纖鏈路可以通過光功率衰減和接收端靈敏度來估算光功率冗餘量。類比這些概念,本文從應用層面出發,嘗試定義出SRT鏈路的安全冗餘量(Secure-Margin),並給出定性和定量的分析。

在討論安全冗餘量之前,我們首先來了解**單次往返時延(RTT,Round-Trip Time)**的概念:它表示了資料在傳送端和接收端之間進行一次往返所需要花費的時間,也可以理解為兩點之間一來一回所需要的時間。RTT的值與兩點之間物理距離有關,同時也受到網路接入方式和路由選擇的影響。

也許可以用一句話表示如何配置一個可靠的SRT傳輸鏈路:我們要保證傳送緩衝區的使用量(使用單位毫秒來衡量)低於延時量,並且保證接收緩衝區的使用量永遠不會接近零。這句話的原理將在下文詳述,它實際上指出了SRT鏈路中的兩個臨界崩潰點,而SRT鏈路安全冗餘量表示了鏈路離臨界崩潰點還有多少餘量。

2.1 傳送端緩衝區冗餘量

參考圖3,ARQ的工作機制決定了傳送端需要一個重傳緩衝區,接收端也需要一個能依次存放資料包的緩衝區。另一方面,SRT協議通過設定延時量(Latency)統一規定了傳送緩衝區和接收緩衝區的最大可使用量。

傳送緩衝區的作用是來儲存有可能需要重傳的資料包,即那些還沒有收到肯定應答(ACK)的資料包,如果傳送端收到了關於某個資料包的肯定應答,該資料包將被從傳送端緩衝區踢出。如果一直沒接收到回覆的ACK訊號,該資料也不能永遠儲存在傳送端緩衝區中,SRT協議規定了儲存的最長時間為延時量。

參考圖5,並結合SRT的工作原理,我們把延時量的長度想象成一個同時在傳送端和接收端從左向右滑動的視窗,圖中的1號至6號資料包都已收到肯定應答(ACK),已從傳送端緩衝區踢出,7號資料包還儲存在緩衝區等待接收方的回覆。這是一種較好的傳輸狀態,傳送端緩衝區的使用比例很小,大部分資料都已經被及時接收並且收到肯定應答。

參考圖6,接收方沒有收到3號資料包,並向傳送端回覆了否定應答(NAK),由於種種原因這一過程被延誤,導致3號資料包已經處在視窗最左側,隨著視窗的滑動下一步它將被從傳送端緩衝區踢出。這種情況下如果3號資料包的重新傳輸再出現丟失或者延誤,該資料包就會丟包,解碼端的影象可能也會出現問題。同時我們也注意到圖中傳送端緩衝區已經被填滿,這也表示了一種處於丟包臨界點的傳輸狀態。

圖片

圖5 傳送端和接收端緩衝區(較好狀態)

圖片

圖6 傳送端和接收端緩衝區(較差狀態)

根據分析可以得出結論:傳送端緩衝區被佔用的比例越少,鏈路越安全,若傳送端緩衝區被佔滿,鏈路則很有可能發生丟包

根據SRT的工作機制可知:資料儲存在傳送端緩衝區的最長時間為延時量(Latency),相反儲存在傳送端緩衝區的最短時間為鏈路的單次往返時延(RTT)。如果把傳送端緩衝區被填滿定為臨界崩潰點,則傳送端緩衝區冗餘量SendBuffer-Margin的定義為:一段時間內緩衝區的最大空餘量除以傳送端緩衝區的最大值,則公式如下:

圖片

需要注意的是,我們通過狀態圖觀察傳送端緩衝區最大佔用量的使用可以忽略那些偶爾出現的短時間峰值。

圖7是某次直播當天的傳送端緩衝區監測圖,圖中延時量為125ms,RTT為10ms,這段時間內的傳送端緩衝區冗餘量約為40%。由於通過測試選擇了合適的引數,即使圖中後半段網路出現了波動,我們仍然保證了較為充足的傳送端緩衝區冗餘量。

圖片

圖7 傳送端緩衝區監測圖

2.2 接收緩衝區冗餘量

接收緩衝區的作用是將收到的資料包排序(SRT協議在SRT包頭記錄了精確的時間戳),排序一方面是解碼的需要,另一方面是為了找出未及時到達的資料包,向傳送端返回否定應答(NAK),並等待重傳。

參考圖5,接收端的1號資料包已經被送至解碼器,2號資料包隨著延時量視窗的滑動也即將送至解碼器,同時2號至6號資料包都已儲存在接收快取區中,接收緩衝區幾乎被資料包填滿,這是一種較好的鏈路狀態。

參考圖6,這是一種較差的鏈路狀態,接收端未收到3號資料包,並且3號資料包在接收端視窗最左側,意味著3號資料包很可能被跳過,解碼出的影象會出現問題。在這種情況下接收緩衝區資料包較少,原因有可能是丟包或者網路頻寬和視訊位元速率不匹配。

由此可以得出結論:接收緩衝區的理想狀態應該是其使用量應該略低於延時量,若接收緩衝區佔用量變為零,解碼影象很可能會出現問題

根據SRT的工作機制可知:資料存放在接收端緩衝區的最長時間應略低於延時量的數值(Latency)。如果把接收端緩衝區使用量變為零看作臨界崩潰點,則接收端緩衝區冗餘量ReceiveBuffer-Margin的定義為:一段時間之內接收端緩衝區的最小佔用量除以接收端緩衝區的最大值,公式如下:

圖片

圖8是某次直播當天的接收端緩衝區監測圖,圖中延時量為125ms,RTT為10ms,在圖中這一段時間內的接收緩衝區冗餘量約為40%。

圖片

圖8 接收端緩衝區監測圖

2.3 鏈路的安全冗餘量

根據SRT的工作機制,傳送端和接收端的緩衝區狀態是相互影響的,並且狀態較差一端的緩衝區冗餘量實際上決定了鏈路的安全冗餘量,那麼定義鏈路的安全冗餘量(Secure-Margin)等於傳送端緩衝區冗餘量(SendBuffer-Margin)和接收端緩衝區冗餘量(ReceiveBuffer-Margin)兩者的最小值

根據SRT的機制和延時量的含義,實際上延時量和RTT一起定義了資料包能夠被重傳的次數,這個次數等於延時量除以RTT,我們可以依此進一步定義重傳次數冗餘量的概念:

圖片

至此我們分別用百分比重傳次數兩種形式定義了鏈路的安全冗餘量(Secure-Margin),該指標表示了SRT鏈路差錯控制能力的冗餘量,同時也是從應用的層面出發,給SRT協議的鏈路測試以及引數調整設立了一個目標。理解安全冗餘量的含義能夠幫助工作人員更好地讀懂緩衝區狀態圖,並且以此為參考更有針對性地調整引數,我們也強烈推薦結合該指標和緩衝區狀態圖來一起評估鏈路的安全狀態。

參照圖7和圖8,可以觀察到RTT一直比較平穩,有時候我們的直播任務往往沒有這麼好的網路條件,如果遇到RTT突增的情況,鏈路安全冗餘量在下降,而重傳次數冗餘量在成倍的下降,這時以百分比計算的安全冗餘量就不能真實反映鏈路安全的變化情況,需要同時計算鏈路的重傳次數冗餘量。

3、配置SRT流的策略

3.1 測量網路鏈路的基礎引數

在配置SRT流之前我們必須測量自身鏈路的可用頻寬、丟包率、單次往返時延RTT,並注意觀察這些指標是否在變動以及變動的範圍。

  • 可用頻寬:可以使用Iperf軟體測量SRT流的鏈路可用頻寬。

  • 丟包率:丟包率是衡量網路堵塞程度的一種方法,使用丟失資料包與傳送資料包的百分比表示。通道的丟包率會驅動SRT延遲和頻寬開銷計算,並可從Iperf統計資訊中提取。

  • RTT:要確定兩臺裝置之間的RTT,可以使用ping命令,如果RTT<=20ms,則使用20ms作為RTT值。這是因為SRT無法對時間尺度小於20ms的事件進行響應。

3.2 設定延時量

延時量(Latency)可以說是SRT協議中最重要的引數,它是一個固定值,可設定範圍是80ms-8000ms。延時量越大,SRT鏈路的差錯控制能力就越高,但鏈路總延時會增加。通過前期測試選擇合適的延時量,能夠幫助我們在鏈路的可靠性和低延時之間取得平衡。表1給出了不同丟包率和RTT下延時量的建議值。

最大丟包率(%) RTT乘數 頻寬開銷(%) 最小延時量(當RTT<=20ms)
<=1 3 33 60ms
<=3 4 25 80ms
<=7 5 20 100ms
<=10 6 17 120ms

表1 SRT引數設定表

參考表1,延時量的計算公式如下,其中如果RTT小於20ms,按20ms來計算:

延時量Latency=RTT*RTT乘數

上式中RTT乘數的實際含義是SRT鏈路能夠完成的重傳次數,也代表了鏈路的差錯控制能力,這也是為什麼丟包率越高,所需要的RTT乘數越高,所需要的延時量也越高,而之前定義的鏈路重傳次數冗餘量可以理解成目前還未使用的重傳次數。

最初我們完全按照這張表來配置SRT鏈路,但經過多次直播工作之後我們發現按照推薦值配置的鏈路安全冗餘量並不一定充足,一個好的習慣是提前進行鏈路測試,並結合安全冗餘量和緩衝區狀態圖來選擇合適的延時量。

關於延時量還有其他幾個需要注意的點:

  • 在鏈路其他引數固定的情況下,提高延時量,安全冗餘量(Secure-Margin)會隨之增大。

  • 延時量(Latency)可以在編碼器和解碼器上分別設定,若數值不一樣,以較高的數值為準,這也就意味著我們僅在某一端把延時量引數降低是無法生效的。

  • 延時量引數並不能代表傳輸鏈路的端到端延時,計算鏈路總延時還需要考慮編碼器延時、解碼器延時以及RTT。

  • 體育比賽這類直播的傳輸鏈路需要很低的延時,因為觀眾肯定不希望從鄰居的歡呼聲或者朋友圈得知進球,我們需要非常謹慎地權衡延時量和安全冗餘量,從而找到一個折衷的引數。以上圖的直播為例,在保證充足安全冗餘量的情況下,端到端延時只有0.8秒左右,遠小於衛星鏈路的延時。

3.3 設定頻寬開銷比例

頻寬開銷(Bandwidth Overhead)是一個百分比引數,其計算基數為音視訊碼流位元率,預設值為25%,最高不建議超過50%。這部分由使用者分配的額外頻寬是用來重傳丟失的資料包、傳輸反向控制資料以及處理擁塞,也就是說頻寬開銷比例與鏈路的差錯控制能力也是息息相關的,實際上SRT協議中每丟失一個數據包就需要在接收端消耗大約400bps的可用頻寬。

圖9是一種SRT鏈路發生崩潰的極端情況,可以用該圖來理解頻寬開銷的功用。在鏈路崩潰發生後,首先緩衝區資料會暫時填補解碼器對資料的持續需求,緊接著鏈路恢復後,額外劃定的頻寬開銷會彌補之前對緩衝區資料的消耗,在處理完這次突發事件後,整個SRT鏈路會恢復正常。

圖片

圖9 頻寬開銷示意圖

關於頻寬開銷有幾點需要注意:

  • 參考表1,可以找到在不同丟包率下的頻寬開銷比例的最小值,根據鏈路狀態可稍作上浮。

  • 頻寬開銷的計算基數是視訊+音訊+元資料+其他輔助資料的總位元率,在估算時要加以注意。

  • 在確定了編碼的流頻寬之後,可以通過_流頻寬*(1+頻寬開銷)_來計算所需要的鏈路可用頻寬,實際應用中建議在此基礎上再增加一些鏈路可用頻寬來對抗波動,建議值為**流頻寬*(1+頻寬開銷)*1.33**。以HEVC方式編碼4K訊號為例,如果編碼後的TS流為40Mbits,頻寬開銷為25%,建議的鏈路可用頻寬應該在67Mbits以上。

  • 參考圖9,區域A和區域B必須相等,實際上SRT鏈路能夠容忍的網路中斷時間為_延時量*頻寬開銷_。綜藝晚會或者政府會議這樣的直播工作,其對延時並不敏感,可以考慮充分利用延時量和頻寬開銷這兩個引數來極大增強鏈路的可靠性。假設我們在這種情況下設定延時為8000ms,頻寬開銷為50%,那麼網路即使中斷4秒鐘也不會影響SRT鏈路的正常工作,SRT鏈路這一特性甚至是衛星和光纖鏈路都不具備的。

結 束 語

近年來,SRT協議在廣電領域的發展呈現多點開花的趨勢,在現場直播、遠端製作、上行推流、國際間遠距離傳輸多方面都有著廣泛的應用。在實際部署SRT鏈路的過程中,前期大量的測試工作是必不可少的,在測試時可以通過觀察安全冗餘量和緩衝區狀態圖來判斷鏈路的安全性。

《公網傳輸技術之SRT協議解析》的下篇將從SRT資料包的角度來分析SRT協議的執行機制和原理,並演示如何通過Wireshark來進行抓包和故障診斷,敬請期待。

參考文獻:

1. Haivision.SRT Protocol Technical Overview[M/OL].(2018-10) [2022-02].www3.haivision.com/srt-protocol-technical-overview.

2. Yunhong Gu,Robert L.Grossman.UDT:UDP-based data transfer for high-sspeed wide area networks[J].Computer Networks,2006,51(7):1777-1799.

3. Haivision.SRT Open Source White Paper[M/OL].(2019-1) [2022-02].www3.haivision.com/srt-open-source-wp.

4. SRT Alliance. SRT Deployment Guide,v1.1,Issue 01[M/OL].(2018-10) [2022-02].www3.haivision.com/srt-alliance-guide.

作者簡介:

張博力,安徽廣播電視臺工程師。


圖片