潘家躍,湯志敏
(偉樂視訊科技股份有限公司,廣東 惠州 516025)
可靠互聯(lián)網(wǎng)流傳輸(Reliable Internet Stream Transport,RIST)協(xié)議是一種傳輸實時音視頻流的技術(shù)方案。本文分析并論述該協(xié)議的特點及其關(guān)鍵實現(xiàn)原理。RIST 協(xié)議的一般應(yīng)用場景如圖1 所示。
圖1 RIST 流傳輸示意圖
RIST用于實現(xiàn)從發(fā)送端到接收端的單向流傳輸。數(shù)據(jù)流中每個報文的有效負載是由1~7 個TS 封裝報文組成。數(shù)據(jù)流發(fā)送前,RIST 發(fā)送端會順序定義每個報文的標識(0~65 535),可以通過一條或者多條通道發(fā)送到接收端。RIST 接收端可以根據(jù)接收到的報文標識進行重新排序,并檢測是否有丟包。如存在丟包,可以請求發(fā)送端重傳相關(guān)報文[1]。
為了達成高效傳輸?shù)哪繕?,流媒體傳輸?shù)南嚓P(guān)技術(shù)都是基于用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)。后期為了達到新的應(yīng)用標準,逐步定義了更多的字段來完成相應(yīng)的功能。
流媒體傳輸技術(shù)演進如圖2 所示。從最簡單MPEG/IP 的UDP 傳輸數(shù)據(jù)包結(jié)構(gòu),到RTP 流傳輸協(xié)議,再到RIST 傳輸協(xié)議,圖2 展示了各種模式對應(yīng)的數(shù)據(jù)包結(jié)構(gòu),從中可以看出流傳輸技術(shù)的演進歷史[2]。
圖2 流媒體傳輸技術(shù)演進圖
RIST 協(xié)議是基于RTP 協(xié)議再次開發(fā)的,兼容并擴充了RTP 協(xié)議。UDP、RTP 以及RIST 協(xié)議的對比如表1 所示。其中,RIST 協(xié)議包含Simple profile 和Main profile 兩種模式[3]。
表1 流媒體傳輸技術(shù)對比
RIST 技術(shù)協(xié)議的特點及實現(xiàn)原理如表2 所示。
表2 RIST 技術(shù)協(xié)議特征表
RIST 丟包重傳機制如圖3 所示。圖3 詳細描述了RIST 發(fā)送端和接收端如何實現(xiàn)丟包重傳,具體步驟如下。
圖3 RIST 丟包重傳機制圖
(1)發(fā)送端在發(fā)送報文到接收端的同時,會將報文備份到發(fā)送緩沖區(qū)中。
(2)接收端接收到報文后,首先對報文進行排序,解決報文到達順序不一致的問題。
(3)在排序緩沖區(qū)超時的時候,接收端開始檢測是否丟失報文。如果有報文丟失,就往發(fā)送端請求某個報文的重傳。
(4)發(fā)送端從發(fā)送緩沖區(qū)中取出相應(yīng)的報文,再次發(fā)送到接收端。
(5)接收緩沖區(qū)在RTT 的時間內(nèi),如果還是沒有接收到該報文,可以再次要求重傳。重傳的最大次數(shù)跟接收緩沖區(qū)的大小有關(guān)。緩沖區(qū)越大,可以要求重傳的次數(shù)越多,但是造成碼流延遲的時間就越大。一般緩沖區(qū)設(shè)置為1 s 左右。
(6)數(shù)據(jù)包在接收緩沖區(qū)超時的時候出隊列,進行接收視頻流后續(xù)的解碼處理。
(7)當數(shù)據(jù)包在發(fā)送緩沖區(qū)中超時,意味著不會再用到,也出隊列,釋放相關(guān)內(nèi)存。
需要注意的是,發(fā)送緩沖區(qū)不能比接收緩沖區(qū)小[4],避免請求重傳報文時發(fā)送緩沖區(qū)中的相關(guān)報文已釋放。
在當前的互聯(lián)網(wǎng)傳輸技術(shù)中,當要連續(xù)傳輸多個數(shù)據(jù)包時,報文發(fā)送端會針對要發(fā)送的每一個報文,按順序定義其報文標識(seq number),然后把報文一個個發(fā)送到接收端。而接收端接收到部分報文后,會檢查接收的報文標識是否連續(xù),是否存在丟包。如果存在丟包,接收端便會把丟失的報文標識反饋給發(fā)送端。丟失一個報文,回傳一次,丟失兩個報文,回傳兩次,依次類推。當發(fā)送端收到回傳的報文后,解析其中丟失的報文標識,將對應(yīng)的報文再次發(fā)送給接收端。以這樣的方式實現(xiàn)丟包重傳的功能[5]。
在上述方案中,對于丟失報文標識,一般是丟失一個報文便要回傳一次,以告知發(fā)送端具體是哪個報文丟失了。這種方式直接了當,但是如果網(wǎng)絡(luò)環(huán)境不好,出現(xiàn)了大量報文丟失的情況,那么回傳的報文數(shù)也會急劇提升,會增加網(wǎng)絡(luò)負擔,然后可能又會加重網(wǎng)絡(luò)丟包的情況。
針對上述情況,設(shè)計一種方案,通過接收端的一次報文丟失反饋,可以告知發(fā)送端多個報文丟失。
反饋報文只需定義丟失的起始報文號以及其后16 個報文是否丟失,如果丟失了,用比特1 標識,否則用0 表示。起始報文號占16 個比特,其后16個報文標識也占用16 個比特,共計32 個比特就可以用來定義17 個報文是否存在丟包。這種定義方式比較適合用于零散丟包的情形。比如,接收端發(fā)現(xiàn)序列號為10 000 的報文丟失,并且后面的10 002和10 016 號報文也丟失了,那么起始報文號為10 000,位掩碼就是二進制0100 0000 0000 0001。
在反饋的報文類型中,可以把負荷類型定義特別的數(shù)值(205)用于表示該報文是基于位掩碼的定義方式。相關(guān)包結(jié)構(gòu)定義基于位掩碼反饋的協(xié)議定義,如圖4 所示。
圖4 基于位掩碼反饋的協(xié)議定義圖
傳輸過程中,一旦出現(xiàn)大量連續(xù)丟包的情況,比如有100 個甚至更多的連續(xù)丟包的情況,這時如果使用上述基于位掩碼的反饋方式,每次最多只能反饋17 個丟包情況,那么就需要連續(xù)反饋多個丟包報文。針對這種情況,可以使用基于范圍的定義方式。
基于范圍的定義方式需要定義丟包的起始序列號和后續(xù)丟包數(shù)量。比如丟包的起始序列號為10 000,其后120 個報文都丟失了,這意味著序列號為10 000~10 121 的報文都丟失了。如果后續(xù)丟包數(shù)量為0,就表示只有起始序列號的那個報文丟失了。這種情況適用在大量連續(xù)報文丟失的情況?;诜秶膩G包反饋報文的負荷類型是204。相關(guān)包結(jié)構(gòu)定義基于范圍反饋的協(xié)議定義,如圖5所示。
圖5 基于范圍反饋的協(xié)議定義圖
流的發(fā)送端需要同時支持兩種丟包反饋的解析,并根據(jù)反饋包中負荷類型的數(shù)值確定反饋方式。如果是204,表示為基于范圍的丟包反饋方式;如果是205,則是基于位掩碼的丟包反饋方式。
流的接收端需要根據(jù)丟包的實際情況來選擇反饋方式。選擇方式按如下的計算方式來確定:如果是連續(xù)的丟包,并且連續(xù)丟包的數(shù)量大于等于17,則采用基于范圍的丟包反饋方式;否則采用基于位掩碼的丟包反饋方式。
RIST 技術(shù)協(xié)議實現(xiàn)了媒體流傳輸目標的幾個關(guān)鍵特性,即實時性、可靠性、安全性、高效性及兼容性。偉樂視訊科技股份有限公司在2021 年10 月正式推出支持RIST 協(xié)議的媒體網(wǎng)關(guān)產(chǎn)品。通過橫向比較,相關(guān)產(chǎn)品的功能已經(jīng)領(lǐng)先國內(nèi)外同行。