天天看點

一種自适應RTP分包方法研究

1.引言

  近年來,随着多媒體系統和網絡通訊技術的發展,基于Internet 的多媒體業務在飛速的發展,如電視電話會議、遠端視訊監控等。這些資料在網絡上傳輸往往要經過壓縮。而且網絡上的視訊音頻業務大多是通過RTP/RTCP 實作的。基于UDP 的RTP 傳輸協定沒有TCP那樣的保障機制,而且視訊資料的實時性要求出現資料誤碼或丢包也不允許資料的重傳。這要求我們必須針對網絡的狀況調整我們的傳輸政策,本文首先分析了影響圖像傳輸品質的因素,介紹了目前基于RTP 協定傳輸的擁塞控制算法,根據擁塞控制算法,提出了一種能夠适應網絡擁塞狀況的MPEG-4 資料打包政策,以宏塊為基本機關打包MPEG4 視訊包來适應網絡擁塞狀況,降低丢包對視訊解碼品質的影響。最後通過實驗分析證明本文算法的有效性。

  2.影響圖像解碼品質的因素

  MPEG-4 和H.264 等傳統的壓縮方法采用的運動估計、可變長編碼等技術使得視訊壓縮資料對信道的丢包和誤碼率更加敏感。由于采用幀内和幀間編碼技術壓縮資料,使得幀内以及幀與幀之間的編碼關系緊密。在網絡傳輸的過程中,一幀資料或是大量宏塊的資料損傷很容易造成時間與空間上的差錯的延續,導緻解碼品質的下降,甚至解碼器的停止工作。視訊資料對時延有着特殊的敏感性。往往不允許出錯資料的重傳。為了減輕信道傳輸産生的差錯對解碼品質的影響,這就要求我們在傳輸的方式上做出改進,增強資料傳輸過程中對關鍵資訊的保護。

  3.RTP 擁塞控制算法

  一般來說網絡帶寬都是随着時間不斷變化的,時常會有波動,無法預知網絡帶寬。根據不同需求,在網絡延時和丢包率上,視訊應用有着不用的要求,MPEG-4 視訊資料發送端必須得根據網絡實際狀況迅速做出反應,以保證視訊的傳輸品質。這就要求RTP 傳輸協定能夠實時監控網絡狀況。

  RTP 協定通過RTCP 來監控網絡狀态,編碼器端向解碼器端實時發送資料。在一定時間内解碼器端若沒有接受到正确分組,便認為發生了丢包,将丢包結果統計,每隔5 秒鐘生成RTCP 接收報告(RR)向編碼器端發送。編碼器端可以利用這段時間的丢包率計算出網絡可用帶寬,通過調整編碼器端的發送政策降低傳輸中的丢包率和誤碼率。比如說降低碼率或者調整MPEG-4 分組政策[1]。

  當發現網絡擁塞時需要降低發送速率來減少包的丢失,網絡回複時需要提高發送速率來,快速提高網絡帶寬使用率。一般來說常用的流量控制算法有兩種:一種是常數乘性增長和常數乘性減少[2]。另一種是常數加性增長和常數乘性減少[3]。

  1. 常數乘增長和常數乘減少控制算法其中, pre Rate 為上次發送速率, now Rate 為計算後目前的發送速率,α 乘性增長因子;PacketLost 為由RR 封包得出的丢包率;ThresHold 為丢包率門限,用以判斷目前網絡是否發生擁塞;β 為乘性減少因子,一般來說小于1,當編碼器端發現丢包率高于丢包門限的時候,認為網絡擁塞發生,将目前發送速率乘以β 降低速率。當網絡空閑時,以乘性增長因子α 為倍數提高發送速率。這樣的方法有一個缺點,由于RTCP 每隔5 秒鐘才根據解碼器端提供的QOS 資訊調整發送速率,在此期間以乘性因子的速度提高發送速率容易加重網絡擁塞,使RTP 傳輸抖動。第二種方法采用加性增長因子來解決這一問題。

  2. 常數加增長和常數乘減小控制算法加性增長方式能夠平穩增加RTP 流量,更好的适應網絡帶寬的變化。為了适應網絡的變化,本文将以擁塞控制算法設計一個基于宏塊的打包方法。提高MPEG-4 的傳輸品質。

  4.MPEG-4 分包方法改進

  4.1 以VOP 為機關分包方法

  網絡上傳輸的MPEG-4 資料首先要經過RTP 的分包處理,因為有最大傳輸單元的限制,為了RTP 包在傳輸時不造成IP 碎片,必須限制RTP 包的分包包長。如果采用硬分包技術,一個RTP 包會根據最大傳輸單元(MTU)切割[4]。這樣容易造成MPEG-4 關鍵編碼資訊的破壞,一個包的丢失會導緻可能會導緻其他資料包無法解碼。現在常用的分包方法是基于RFC3016 的以視訊對象平面(VOP)作為基本封裝機關的方法[5]。

  (1)一個MPEG-4 編碼資訊頭部資料,應該緊跟RTP 頭部後的載荷開始部分,不應分開存放到多個RTP 包中。

  (2)不同的VOP 映射到不同的RTP 包中,如果一個VOP 太小,可以将幾個連續編碼的VOP 映射到一個RTP 包中,這時需要将RTP 包中的M 域設定為1。

  (3)如果VOP 大小超過最大傳輸單元(MTU),将其按MTU 為機關分割,需要注意的是,如果分割點在宏塊上,要将該宏塊放入下一個RTP 分包中,保證宏塊的完整性[6]。

  這樣的分包方法有一定的局限性,當網絡擁塞的情況下,一個RTP 包的丢失,往往會導緻解碼器端圖像品質的迅速下降[7]。大面積的宏塊丢失會造成時間域上的錯誤累積,錯誤恢複的技術也很難彌補。以部分宏塊為機關分包可以很好的解決這一問題,一個包的丢失隻損失幾個宏塊的資訊,通過錯誤隐藏技術可以再一定程度上保證解碼圖像品質。本文在VOP為機關的分包技術上提出了一種根據網絡狀況調整分包政策的以宏塊為最小機關的打包方法。

  4.2 基于宏塊的自适應分包方法

  根據網絡丢包率分析目前網絡狀态,可以根據擁塞控制調整的發送速率作為我們封裝宏塊個數的依據。首先設定一個丢包率上限thresholdMax 和一個丢包率下限thresholdMin。如果丢包率低于丢包率下限packetlost ≤ thresholdMin,可以認為目前網絡空閑,以VOP為基本機關分包。如果丢包率高于丢包上限packetlost ≥ thresholdMax,可以認為目前擁塞嚴重,按一定比例的減少RTP 包的宏塊封裝機關,RTCP 擁塞控制算法根據丢包率改變發送速率,調整後的發送速率與之前的發送速率的比值可以用作我們衡量增加的分包宏塊數的增長幅度。我們使用_ ( ) pre now pre MB No × Rate ÷Rate 來表示新的宏塊數,為保證分入包的宏塊個數過少導緻傳輸效率太低,設定一個最小封裝宏塊數Min _MB,分包宏塊數不應低于這個值。

  MB No 為目前計算的新的宏塊個數, _ pre MB No 為上次分包的宏塊個數,Min _ MB為設定的最小宏塊個數, pre Rate 為上次發送速率, now Rate 為經過擁塞控制算法計算後的目前發送速率,[ ] 為取整數符号。

  當丢包率thresholdMin ≤ packetlost ≤ thresholdMax,網絡處于均衡狀态,通過擁塞控制算法加快發送速率,增加分入RTP 包的宏塊數:

  具體的打包規則如下:

  1. MEPG-4 的碼流頭資訊時解碼關鍵資訊,單獨分成一個包發送。

  2. 網絡空閑時,以VOP 為機關兼顧最小傳輸單元分包一幀資料。

  3. 丢 包率高出最大門限時,啟動宏塊分包機制,初始的分包宏塊數設定為Max _ MB×β 。

  4. 丢包率從嚴重狀态慢慢恢複時,增加宏塊數直至到達最大宏塊限制Max _MB,等到packetlost ≤ thresholdMin時,開始以VOP為機關打包。

  5. 複制 MPEG-4 碼流頭部資訊至最後一個RTP 包并發送,首尾發送雙標頭可以有效的保證這個碼流頭部資訊的準确性。把傳輸錯誤限制在宏塊級别。

  可以預見,當網絡丢包嚴重時,以VOP 為機關分包的方法在傳輸的過程中将造成資料的大量丢失,解碼品質迅速下降。這時根據擁塞狀況降低幀率,同時啟動以宏塊為機關的分包機制,一個RTP 包隻包含少量的宏塊,即使丢失分組也隻是丢失幾個宏塊的資料,在解碼器端通過錯誤隐藏可以恢複圖像品質至較高的水準。當網絡從擁塞中恢複時,增加分包宏塊的數目,慢慢恢複包中的宏塊數至Max _MB水準,如果此時丢包率低于最低丢包門限,可以認為網絡狀态接近空閑狀态,提高幀率,同時重新恢複VOP 為機關的分包方法,視訊傳輸流暢。

  5. 試驗結果分析

  為了測試本文設計的自适應分包方法,發送端采用帶MPEG-4 硬體編碼器的FIC8120以初始25 幀/s 的速度采集視訊,MPEG-4 壓縮并發送至PC端,傳輸子產品采用開源的JRTPLib,PC 端采用XVID 解碼實時顯示。采用兩套系統測試,一套采用VOP 為機關分包方法,另一套采用自适應分包方法。試驗結果如下:

  可見,以VOP 為機關分包在丢包率為11.32%時,網絡擁塞情況比較嚴重,同時期的自适應分包方法能夠通過宏塊的分包,減小包的容量,緩解網絡的擁塞,将丢包率控制在5.23%,雖然總的分包數變大,但是丢包數比VOP 為機關的丢包數小,而且宏塊資訊丢失的最少,圖像品質損傷最小,解碼品質較高,這個時候宏塊分包的優勢最明顯。

  6.結論

  本文采用的對 MPEG4 碼流的自适應分包算法,是在VOP 為機關分包方法的基礎上的改進。依據網絡上的擁塞情況和可用帶寬動态的使用基于宏塊和基于VOP 的分包方法,大大降低了丢包率,同時保證了圖像的傳輸品質。實驗表明,在網絡擁塞嚴重的情況下,自适應分包方法能取得更好的效果。該方法對無線信道傳輸的研究也有一定的借鑒意義。