潘家躍,湯志敏
(偉樂視訊科技股份有限公司,廣東 惠州 516025)
可靠互聯網流傳輸(Reliable Internet Stream Transport,RIST)協議是一種傳輸實時音視頻流的技術方案。本文分析并論述該協議的特點及其關鍵實現原理。RIST 協議的一般應用場景如圖1 所示。

圖1 RIST 流傳輸示意圖
RIST用于實現從發送端到接收端的單向流傳輸。數據流中每個報文的有效負載是由1~7 個TS 封裝報文組成。數據流發送前,RIST 發送端會順序定義每個報文的標識(0~65 535),可以通過一條或者多條通道發送到接收端。RIST 接收端可以根據接收到的報文標識進行重新排序,并檢測是否有丟包。如存在丟包,可以請求發送端重傳相關報文[1]。
為了達成高效傳輸的目標,流媒體傳輸的相關技術都是基于用戶數據報協議(User Datagram Protocol,UDP)。后期為了達到新的應用標準,逐步定義了更多的字段來完成相應的功能。
流媒體傳輸技術演進如圖2 所示。從最簡單MPEG/IP 的UDP 傳輸數據包結構,到RTP 流傳輸協議,再到RIST 傳輸協議,圖2 展示了各種模式對應的數據包結構,從中可以看出流傳輸技術的演進歷史[2]。

圖2 流媒體傳輸技術演進圖
RIST 協議是基于RTP 協議再次開發的,兼容并擴充了RTP 協議。UDP、RTP 以及RIST 協議的對比如表1 所示。其中,RIST 協議包含Simple profile 和Main profile 兩種模式[3]。

表1 流媒體傳輸技術對比
RIST 技術協議的特點及實現原理如表2 所示。

表2 RIST 技術協議特征表
RIST 丟包重傳機制如圖3 所示。圖3 詳細描述了RIST 發送端和接收端如何實現丟包重傳,具體步驟如下。

圖3 RIST 丟包重傳機制圖
(1)發送端在發送報文到接收端的同時,會將報文備份到發送緩沖區中。
(2)接收端接收到報文后,首先對報文進行排序,解決報文到達順序不一致的問題。
(3)在排序緩沖區超時的時候,接收端開始檢測是否丟失報文。如果有報文丟失,就往發送端請求某個報文的重傳。
(4)發送端從發送緩沖區中取出相應的報文,再次發送到接收端。
(5)接收緩沖區在RTT 的時間內,如果還是沒有接收到該報文,可以再次要求重傳。重傳的最大次數跟接收緩沖區的大小有關。緩沖區越大,可以要求重傳的次數越多,但是造成碼流延遲的時間就越大。一般緩沖區設置為1 s 左右。
(6)數據包在接收緩沖區超時的時候出隊列,進行接收視頻流后續的解碼處理。
(7)當數據包在發送緩沖區中超時,意味著不會再用到,也出隊列,釋放相關內存。
需要注意的是,發送緩沖區不能比接收緩沖區小[4],避免請求重傳報文時發送緩沖區中的相關報文已釋放。
在當前的互聯網傳輸技術中,當要連續傳輸多個數據包時,報文發送端會針對要發送的每一個報文,按順序定義其報文標識(seq number),然后把報文一個個發送到接收端。而接收端接收到部分報文后,會檢查接收的報文標識是否連續,是否存在丟包。如果存在丟包,接收端便會把丟失的報文標識反饋給發送端。丟失一個報文,回傳一次,丟失兩個報文,回傳兩次,依次類推。當發送端收到回傳的報文后,解析其中丟失的報文標識,將對應的報文再次發送給接收端。以這樣的方式實現丟包重傳的功能[5]。
在上述方案中,對于丟失報文標識,一般是丟失一個報文便要回傳一次,以告知發送端具體是哪個報文丟失了。這種方式直接了當,但是如果網絡環境不好,出現了大量報文丟失的情況,那么回傳的報文數也會急劇提升,會增加網絡負擔,然后可能又會加重網絡丟包的情況。
針對上述情況,設計一種方案,通過接收端的一次報文丟失反饋,可以告知發送端多個報文丟失。
反饋報文只需定義丟失的起始報文號以及其后16 個報文是否丟失,如果丟失了,用比特1 標識,否則用0 表示。起始報文號占16 個比特,其后16個報文標識也占用16 個比特,共計32 個比特就可以用來定義17 個報文是否存在丟包。這種定義方式比較適合用于零散丟包的情形。比如,接收端發現序列號為10 000 的報文丟失,并且后面的10 002和10 016 號報文也丟失了,那么起始報文號為10 000,位掩碼就是二進制0100 0000 0000 0001。
在反饋的報文類型中,可以把負荷類型定義特別的數值(205)用于表示該報文是基于位掩碼的定義方式。相關包結構定義基于位掩碼反饋的協議定義,如圖4 所示。

圖4 基于位掩碼反饋的協議定義圖
傳輸過程中,一旦出現大量連續丟包的情況,比如有100 個甚至更多的連續丟包的情況,這時如果使用上述基于位掩碼的反饋方式,每次最多只能反饋17 個丟包情況,那么就需要連續反饋多個丟包報文。針對這種情況,可以使用基于范圍的定義方式。
基于范圍的定義方式需要定義丟包的起始序列號和后續丟包數量。比如丟包的起始序列號為10 000,其后120 個報文都丟失了,這意味著序列號為10 000~10 121 的報文都丟失了。如果后續丟包數量為0,就表示只有起始序列號的那個報文丟失了。這種情況適用在大量連續報文丟失的情況。基于范圍的丟包反饋報文的負荷類型是204。相關包結構定義基于范圍反饋的協議定義,如圖5所示。

圖5 基于范圍反饋的協議定義圖
流的發送端需要同時支持兩種丟包反饋的解析,并根據反饋包中負荷類型的數值確定反饋方式。如果是204,表示為基于范圍的丟包反饋方式;如果是205,則是基于位掩碼的丟包反饋方式。
流的接收端需要根據丟包的實際情況來選擇反饋方式。選擇方式按如下的計算方式來確定:如果是連續的丟包,并且連續丟包的數量大于等于17,則采用基于范圍的丟包反饋方式;否則采用基于位掩碼的丟包反饋方式。
RIST 技術協議實現了媒體流傳輸目標的幾個關鍵特性,即實時性、可靠性、安全性、高效性及兼容性。偉樂視訊科技股份有限公司在2021 年10 月正式推出支持RIST 協議的媒體網關產品。通過橫向比較,相關產品的功能已經領先國內外同行。