摘要:該文設計了一個符合3GPP標準的移動流媒體服務器。系統以DirectShow為開發平臺,采用先進的XVID編解碼庫進行MPEG-4編碼,使用RTP/RTCP協議對視頻數據進行實時傳輸和控制,并進行了相關測試,結果表明本服務器滿足設計要求。
關鍵詞:3G網絡;流媒體;移動視頻
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2009)33-9509-02
Design and Realization of Mobile Streaming Media Server in 3G Network
WANG Zhi-xue
(Ningxia Teachers University, Guyuan 756000, China)
Abstract: A 3G network mobile streaming media Server has been designed based on the MPEG-4 standard, RTP/RTCP protocol and 3GPP technical specification. MPEG-4 standard and RTP/RTCP protocols have been studied, a multi-rate Coding scheme has been proposed. Then, the Xvid encode lib, modified JRTPLIB streaming media lib and DirectShow platform have been adopted to implement the system.
Key words: 3G network; streaming media; mobile video
隨著3G(3rd Generation)通訊技術蓬勃發展,無線網絡帶寬迅速增長,以及移動終端運算能力的不斷增強,使得移動終端可以獲得傳統有線網絡視頻服務,移動流媒體通訊技術成為了近年來網絡技術發展的一個趨勢和熱點。為了滿足日益增長的移動流媒體服務需求,設計實現一個符合PSS (Packet Switched Streaming Service)技術規范的3G網絡視頻流媒體服務系統,具有較高的工程應用價值。
1 移動流媒體服務器設計
移動流媒體服務器是移動流媒體系統的核心組成部分,它的主要功能是完成流節目的存取調度、傳輸以及管理等功能。其主要功能包括:流文件存儲,文件傳送處理,節目文件存取,流協議棧,QoS保證,碼率適配,終端適配,資源反饋,直播處理等。
根據上面的功能,可以設計出3G網絡移動流媒體服務器的工作流程如圖1。
服務器工作過程如下:流媒體信息首先進入XVID編碼器,編碼成MEPG-4格式的視頻碼流,然后根據網絡情況進行速率調整后,在應用層由RTP進行封裝,并把視頻信息的時間戳(屬于同一Sample的包打相同的時間戳)和序列號等參數寫入RTP數據包中,交給下層UDP處理,UDP對RTP數據包進行封裝,并把源端口地址、目標端口地址和校驗值等寫入自己的數據包中,RTP和UDP一起共同完成傳輸層協議所應完成的任務,UDP數據包被交給IP網絡層處理,IP網絡層協議對UDP數據包進行封裝,然后IP數據包通過Internet向接收端發送。同時發送端周期性地接收RTCP(RR)包,可以了解網絡狀況,從而相應地對數據的發送速率進行調整,使得終端的碼率能自適應地隨著網絡傳輸條件的變化而變化。
2 移動流媒體服務器軟件實現
移動流媒體服務器以PC機為運行平臺,使用Windows XP操作系統,編程語言為VC++6.0。根據上面的分析,移動流媒體服務器軟件設計主要從以下幾個方面進行:
2.1 MPEG-4編碼
在本系統中,采用XVID編解碼器來完成視頻圖像的MPEG4標準編解碼模塊。在安裝完該XVID編解碼器后,會自動在系統中安裝其編解碼Filter。MPEG-4編碼實現過程為:
1) 通過枚舉 video compressors目錄CLSID_videoCompressorCaegory來創建XVID的壓縮Filter;
2) 如果創建成功,將該壓縮Filter添加到 Filler Graph中;
3) 得到壓縮Filter的輸入Pin;
4) 將運動檢測Filter的視頻輸出Pin連接到此壓縮Filter的輸入Pin;
5) 得到視頻壓縮Filter的輸出Output;
6) 將此視頻壓縮Filter繼續往下連接。
2.2 MPEG-4視頻流的RTP組包算法
要通過RTP傳輸MPEG-4視頻流,需要對其進行打包處理。MPEG-4視頻流作為RTP數據包的凈負荷,設置RTP包頭,標記順序號,打上時間戳等,形成RTP數據包。因此,該文采用如下包機制:
1) 若當前VOP能放人單個RTP包,就把此VOP單獨放人一個RTP包中;
2) 若放不下,則把VOP分段,放人多個RTP包,此時須把VOP頭部信息復制到每個RTP包;為減小包數,降低開銷,一包中能放人多少宏塊就盡可能多地放人多少宏塊,但即使最后一個包中仍有剩余空間,也不能把另一VOP中的宏塊放人此包中。MPEG-4數據的算法描述如下:
while(MPEG-4數據流結束前)
{if(發現下一個VOP起始碼)
{if(當前分段長度三去除頭部字段長度的路徑MTU值)
{把此段數據打入RTP包}
Else
{把盡可能多的宏塊打入RTP包}
Else
{對剩余數據打包}
}
2.3 視頻數據傳輸
實現視頻流實時傳輸的核心是網絡發送過濾器和網絡接收過濾器的實現,本系統定義為是MPEG-4 XVID Multicast Sender和MPEG-4 XVID Multicast Receiver,RTP/RTCP協議功能在這兩個過濾器中實現,這兩個傳輸過濾器都是結合微軟SDK示例DSNetwork和開源代碼JRTPLIB開發的。使用JRTPLIB時,只需要通過繼承RTPSeSSion類實現以下幾步就可以完成數據的發送和接收。
1) 首先實現RTP初始化,建立RTP會話,主要是在函數STDMETHODIMP CNetsend:create_RTPSession(long local_port)中實現。
2) 數據發送
當RTP會話成功建立起來之后,接下來就可以開始進行流媒體數據的實時傳輸了。首先需要設置好數據發送的目標地址,RTP協議允許同一會話存在多個目標地址,這可以通過調用RTPSeSSion類的AddDestination(),DeleteDestination()和ClearDestinations()方法來完成。目標地址全部指定之后,然后啟動數據發送處理線程,接著就可以調用RTPSeSSion類的SendPacket()方法,向目標地址發送流媒體數據。
3) 數據接收
對于流媒體數據的接收端,首先需要調用RTPSession類的JoinMultieastGroup()加入組播組,然后啟動數據接收處理線程,調用rtpsession類的PollData()方法來接收發送過來的rtp或者rtcp數據包。
2.4 服務器速率控制
為了提高移動網絡上視頻數據傳輸的質量,需要編碼和傳輸技術的相互配合和改進。目前這種編碼方式主要有兩種:層次編碼和多速率編碼,本系統采用多速率編碼。
目前的移動網絡主要有GPRS(General Packer Radio Service)、CDMA1X、以及3G,對應有三種不同的傳輸帶寬,但PSS規范規定MPEG-4的最大碼率為64kbps。根據以上情況,指定視頻數據編碼成三個不同速率的流,即20kbps、35kbps、50kbps。流自動選擇的具體方法如下:
1) 首先選擇35kbps的流進行傳輸,流服務器根據所收到的RTCP包來判斷所選擇的流是否最適合目前的傳輸帶寬,若發現數據包丟失太多則改為使用20kbps的流,反之則使用50kbps的流,若丟失較少則保持不變。
2) 其次,當網絡環境變差時,流服務器會自動選擇速率低一級的流,但當網絡環境變好時,并不主動測試是否適合速率高一級的流,避免造成反復緩沖,影響播放效果。
實際使用中,多速率編碼可以在一定程度上降低因移動環境變換導致傳輸帶寬變化對流媒體數據傳輸的影響,消除手機終端的環境差異 ,對視頻播放質量有一定的改善作用。
3 系統性能測試
本系統采用Netperf來測試3G網絡移動流媒體服務器,是一種網絡性能的測量工具,主要針對基于TCP或UDP的傳輸。Netperf根據應用的不同,可以進行不同模式的網絡性測試。測試的指標包括:可用性、響應時間、網絡利用率、網絡吞吐量和網絡帶寬容量。測試結果如表1所示。
測試結果分析:最大連接數為145,網絡吞吐量為2612 KB/s,網絡利用率隨著連接數的增加而增加,約145時達到了飽和穩定狀態,響應時間隨著連接數的增加而增加,結果表明:所設計的3G網絡視頻流媒體服務系統能夠滿足移動終端視頻流媒體服務的需求。
參考文獻:
[1] 3GPP TS 22.233:Transparent End-to-End Packet-Switched Streaming Service:Stage1[S].2003.
[2] 陸其明.DirectShow開發指南[M].北京:清華大學出版社,2003.
[3] 陳強,杜旭.流媒體技術與應用間[M].北京:北京郵電大學出版社,2005.