冀 峰,齊幸輝,張松軼
(河北遠東通信系統工程有限公司,河北 石家莊 050200)
隨著移動互聯網技術的發展,VoIP電話、網絡視頻會議等多媒體交互性的應用已經變得越來越廣泛。但由于網絡傳輸的時延和波動性等因素,實時數據通信過程中經常會遇到分組丟失、亂序和擁塞等問題,成為制約IP設備用戶體驗的重要因素[1-2]。
在現有技術中,基于網絡分組傳輸的波動性和流媒體傳輸的數據量大、實時性要求高等特點,通常的技術手段是在接收端增加數據的緩沖處理環節[3],通過數據在緩沖區內的排序、平衡和組織,消除或減輕網絡分組在傳輸過程中的亂序、丟失和抖動等影響,進而將數據在輸出端平穩有序地輸出,提高媒體播放的質量。
因此,改進接收端的緩沖區設計和數據處理方法,特別是依托于實時傳輸層控制協議,設計滿足和適應于實際網絡傳輸條件的緩沖數據處理方法,是基于VoIP的多媒體應用研究中比較重要的一個方面。
實時傳輸協議(Real-time Transport Protocol,RTP)是在Internet上處理多媒體數據流的一種網絡協議,利用它能夠在一對一或者一對多的網絡環境中實現流媒體數據的端到端的實時傳輸,目的是提供時間信息和實現流同步,是被廣泛采用的流媒體傳輸的基礎技術。RTP協議包頭的定義如圖1所示[4]。

圖1 RTP協議中包頭結構定義說明
RTP包中攜帶的時間和同步信息體現在協議頭中,常用的時序參考參數有以下2個:
① 序列號:描述報文傳輸的序列號,表示RTP分組的次序。初值為隨機數,每發送1個增加1,可供接收方檢測分組丟失和恢復分組次序。
② 時間戳:描述該報文采樣數據的時間標記,表示RTP分組第1個字節的取樣時刻。其初值為隨機數,每個采樣周期加1。
本文所述的數據傳輸和緩沖技術都是基于RTP協議所提供時間戳或序列號等機制。由于RTP協議本身不保證數據包的可靠性傳輸,鑒于在實際應用中都采用UDP作為傳輸層協議,因此,對收到來自網絡的RTP數據包進行對于亂序包的檢測與重排是有必要的。
緩沖技術是接收端將網絡傳輸鏈路上接收的數據包,在緩沖區內進行排序、組合等數據處理。輸出端按照生成的順序對緩沖區內的數據包進行依次讀取。該技術可以在一定程度上消除網絡傳輸過程所帶來的分組丟失和延遲抖動[5-6]。
靜態數據緩沖技術[7]是數據緩沖區大小為固定不變的緩沖技術,工作原理如圖2所示。

圖2 靜態數據緩存技術原理示意圖
程序在啟動過程中,需要初始化一塊大小恒定的內存區域作為數據緩沖區。由于在實際運行過程中要兼顧到網絡傳輸質量較差的情況,因此,該緩沖區的長度一般設置得比較大。
程序運行過程中,接收任務將從網絡傳輸層接收到的數據包放入緩沖區,首先判斷緩沖區是否已滿。如果未滿,將按照數據包攜帶的RTP序列號信息放入緩沖區中進行排序存儲,否則,則丟棄該數據包。
讀取任務根據播放信號的驅動,對緩沖區中的數據包進行順序讀取,并對其攜帶的序列號信息進行同步檢測,遇到序列號不連續的情況,說明數據包在傳輸過程中存在丟失的情況,則按照緩沖區內已有的數據包進行順序讀取;如果緩沖區為空,則說明網絡接收出現異常或者延遲,返回靜音數據包。
現有靜態緩沖技術的缺點如下:
(1)有非常明顯的延時累加效應[8]
由于網絡的傳輸特性,網絡丟包/亂序會導致數據包的傳輸延時變大,同時,經過緩沖區的存儲、排序操作,最終數據包的讀取延時會逐漸增大,直到維持在最大值。即使網絡傳輸狀況好轉,也不能根據網絡情況自動減小網絡延時。在實時性交互時,這種延時累加的結果,有可能導致雙方或多方的動態交流無法進行[9-10]。
(2)資源開銷太大
采用靜態緩沖技術的條件下,緩沖區的設計要兼顧各種網絡的傳輸情況,確保在數據接收過程中,緩沖區不出現數據溢出,避免被動丟包,緩沖區的長度設置一般參考網絡傳輸可能出現的最差情況,因此,緩沖區就需要設置得比較大,隨之帶來較大的系統資源占用。在資源非常有限的嵌入式應用場合,該方法有很大的局限性。
在實時交互式的媒體應用中,實時性的要求占主體地位,如果雙方或多方能有較好的實時性,即使媒體質量較差,也是可以接受的;否則,雙方的交流就會因時延問題而發生困難[3-4]。
結合某些應用條件下資源緊張的情況,為了盡量減少資源的浪費,保證媒體交互的實時性,在靜態緩沖技術的基礎上研究了動態緩沖技術[11]。動態緩沖技術是指緩沖區的大小并不是固定不變的,它可以根據網絡數據包的傳輸狀況,如抖動、丟包率及延時等,對緩沖區的大小進行實時調整,以提高實時交互性能,減少系統資源占用[12]。
動態緩沖技術需要周期性地獲取當前網絡的傳輸質量,以此作為緩沖區調整策略的依據。網絡傳輸狀況包括網絡傳輸中的抖動延遲和丟包情況。
根據RTP協議標準規定,RTP包中攜帶的序列號定義為16 bit的整型數,發送端每發送一個RTP數據包,序列號加1,序列號的初始值是隨機的。借助于RTP包頭的序列號,接收端可以重建數據包的順序和檢測數據包的丟失情況[13-14]。
由于網絡具有波動性,單一時刻的延時抖動不能代表一個特定時間段內的網絡傳輸狀況。因此,本文采用在一個固定窗口對RTP數據包的抖動時間平滑得到作為網絡傳輸質量的一個估計值(窗口寬度N選擇為20個語音幀)。
式中,k,i為收到RTP數據包的順序號,S(k),S(i)為對應數據包中的RTP序列號,Δ是針對數據包基準順序號為i的固定窗口進行抖動時間的平滑估計,以此作為網絡傳輸狀況的參考,完成一次估計后,窗口的數據包基準順序號為i+N。
一旦有分組丟失,或者網絡抖動的情況產生,Δ的輸出就是大于1的正值,而在理想的網絡傳輸環境下,Δ的輸出維持為1的恒定值。因此,根據周期性Δ的返回值,可以及時感知當前網絡的傳輸質量,通過調整緩沖區的長度和讀取任務指針,來保證媒體傳輸的實時性和媒體質量的平穩性。
以周期性所獲取的網絡傳輸質量為依據,該技術主要根據當前的網絡傳輸情況動態地調整緩沖區的大小,充分利用帶寬資源,在媒體流的實時交互性能和網絡傳輸質量之間取得平衡,原理如圖3所示。

圖3 動態數據緩存示意圖
程序在初始化時,申請一小塊的內存區作為緩沖區的初始長度,本文選取5幀語音作為初始長度。在實際應用過程中,通過周期性獲取當前的網絡傳輸質量,來對緩沖區中的動態調整部分進行自適應調整。
根據Δ的計算公式,可以推出,在Δ逼近于數值1的條件下,表明當前網絡的傳輸狀態較為理想;在Δ偏離數值1的的條件下,表明當前網絡的傳輸狀態存在丟包、亂序等情況,可以通過補包處理的方式給系統設置較長的緩沖隊列,以引入較大的時延來延緩數據的抖動和亂序,保證媒體數據的傳輸質量;在Δ較小的情況下,表明當前網絡傳輸狀態比較通暢,通過適當的丟包處理,給系統設置較短的緩沖隊列,減小系統在交互過程中引入的延時,保證媒體的實時交互。同時,為降低緩沖區動態調整過程中對媒體質量的影響,在每一個周期內僅補償或丟棄一個數據包。
緩沖區動態調整的處理流程圖如圖4所示。

圖4 動態緩沖區調整流程圖
采用該方法能夠動態調整緩沖區延時大小,避免現有傳統技術中的延時累加效應。同時又能在保持媒體質量的前提下,提升交互的實時性。
在網絡傳輸狀況較差或者延時較大的情況下,適當丟棄當前緩沖的數據包,接收端不對該數據包所包含的媒體信息進行播放,以此來減少讀取媒體數據的時延,雖稍微降低了媒體的播放質量,但是達到了增強媒體實時性的目的。
為驗證算法的性能以及正確性,需要模擬各種網絡的傳輸情況,構建語音分組的測試序列,該序列中應該包括語音分組的網絡傳輸中的普遍情況,包括網絡抖動、網絡延時和網絡丟包等情況。利用模擬網絡狀態的情況,模擬的網絡數據包測試序列如圖5所示。
該測試序列包含了網絡抖動、延時和亂序等常見的網絡傳輸問題。在語音測試序列中,有a,b,c三個模擬段,其中,a段模擬網絡延時,b段模擬網絡丟包,c段模擬網絡抖動和亂序。
在該測試序列的測試下,依據本文所描述的動態緩沖區調整策略,緩沖區的大小會根據網絡傳輸質量進行實時動態調整,控制語音分組的輸出延時,針對語音分組傳輸測試序列進行測試的網絡傳輸質量估計如圖6所示。

圖5 語音分組測試序列

圖6 網絡傳輸質量估計
由圖6可以看出,在語音分組傳輸正常時,估計值Δ一直保持在1左右,說明此時網絡上沒有發生丟包或者延時的情況,當網絡延時出現時,該估計值會出現一個抖動,當網絡丟包和抖動亂序出現時,該估計值會出現明顯波動。
由圖7可以看出,經過緩沖區調整后的媒體輸出,可以兼顧媒體質量和實時性,在大量媒體數據丟包的情況下,語音分組的接收時間出現一個延時波動,但是隨著時間趨于收斂,削弱了網絡傳輸惡化對媒體實時性的影響,使媒體的整體質量始終維持在一個相對較好的水平。

圖7 不同算法的語音分組輸出對比圖
該方法根據實時估計網絡的傳輸質量,采用動態調整緩沖區中數據包的個數來保證流媒體傳輸的實時性和傳輸質量,因此,不必預先設置很大的緩存區來兼顧網絡狀況很差時的傳輸質量。減小了資源占用,提升了產品的用戶體驗,對基于VoIP的多媒體應用研究有著重要的參考意義。目前,該方法已經成功應用于某多媒體調度產品,應用效果良好。