劉 易,李太君
(海南大學 信息科學技術學院,海南 海口 570228)
流媒體技術以數據流的形式實時發布多媒體內容,流媒體在播放時并不需要下載整個文件,具有邊下載邊播放的功能[1]。移動流媒體是流媒體技術在移動網絡和終端上的應用,利用移動通信網絡,為移動終端提供音、視頻等多媒體服務。移動流媒體的技術特點決定了其在移動網絡中的廣闊應用前景。隨著 3G網絡的不斷發展和多媒體壓縮技術的不斷提高,諸如手機電視,手機監控等移動流媒體應用日益受到人們的青睞,無線流媒體業務成為 3G中占據重要地位的一種新業務[2]。因此,在移動網絡環境中,針對手機終端的流媒體解碼播放技術正成為研究熱點。
在實際應用中,由于無線網絡具有帶寬不穩定、數據誤碼率高等缺點,所以如果想在無無線網絡上傳輸清晰流暢的實時視頻流數據,必須有先進的視頻壓縮技術和高效健壯的傳輸協議提供支持。H.264是ITU和ISO/IEC聯合研究并制定的一個面向IP和無線環境的視頻壓縮標準[3], 其視頻壓縮效率比MPEG2、MPEG4等目前的其他壓縮標準都要高。在相同的碼率條件下可以傳輸更清晰的視頻數據。H.264的高壓縮率,網絡適應性及其容錯性可以很好地改善無線環境下帶寬波動大,信息資源有限,信道誤碼率高等傳輸問題[4]。H.264標準在整體上分為(VCL ,Video Coding Layer)視頻編碼層和(NAL,Network Abstraction Layer)網絡抽象層。VCL專注于視頻信號的壓縮,而 NAL則定義了編碼器和傳輸信道之間的接口。這種分層處理的結構使得 H.264能夠靈活適應不同的傳輸環境,提高了傳輸效率和容錯性能。H.264的這些優點使其成為移動視頻通信領域優先考慮的視頻壓縮標準。
無線流媒體系統可以分為四個部分:視頻采集與制作、服務器、移動通信網絡、移動終端(手機、PDA等客戶端),其體系結構如圖1 所示。視頻服務器可以提供直播和點播功能。移動終端可以通過實時流傳輸協議(RTSP,Real Time Streaming Protocol)協議向服務器發送直播或點播請求。視頻服務器接到請求后,將相應的視頻壓縮碼流數據封裝成RTP包,通過RTP/UDP/IP協議棧發送給移動終端。移動終端從無線網絡接收到視頻流數據后,首先對接收到的數據進行緩沖,當緩沖數據達到了緩沖窗口上限后就可以開始解碼播放。移動終端和服務器之間的數據傳輸過程通過RTP控制協議(RTCP,RTP Control Protocol)協議進行控制:移動終端周期性向服務器發送RTCP包報告自己的狀態,服務器根據移動終端的反饋,動態調整編碼參數和數據傳輸速率,優化數據傳輸過程。

圖1 無線流媒體應用系統結構示意
H.264解碼器從 NAL(網絡提取層)獲得經過壓縮的視頻數據比特流,經過對碼流進行熵解碼和重排序獲得一系列量化系數X,這些系數經過反量化和反變換得到殘差數據塊D。解碼器使用從碼流中解碼得到的頭信息創建預測數據塊P,P與D相加形成圖像塊數據uF,uF經過濾波處理消除塊效應后生成解碼后的數據塊F,F即是解碼器最終得到的重建數據,可以將其轉化成RGB數據繪制在屏幕上[5]。整個解碼流程如圖2所示。

圖2 H.264解碼流程
H.264視頻壓縮技術的優異性能是以提高了算法的復雜度為代價的。所以在手機這種資源有限的平臺上實現H.264碼流的實時解碼,需要對算法進行適當的簡化和優化,才能取得理想的解碼效果。為了盡可能地提高手機端解碼器的效率,解碼器采用多線程架構來設計。解碼器的主要功能由三個線程來實現:主控線程、數據通信線程、解碼顯示線程。解碼器主線程負責創建管理子線程,控制子線程間的交互。數據通信線程負責和視頻服務器交互,發送和接收數據;解碼顯示線程負責解碼接收到的視頻壓縮數據,還原成原始的RGB數據,并根據解碼所得的RGB數據創建位圖,在手機屏幕上繪制出來。解碼器的具體功能實現如圖3所示。

圖3 解碼器功能示意
由于手機CPU頻率不高,且手機在獲取視頻數據的同時,還要進行實時解碼和視頻畫面放大縮小,因此低端的手機基本上很難獲得良好的播放效果[6]。所以建議只在比較高端的手機上開發,比如具有 Symbian、Windowsmobile、Android等操作系統的智能手機。
實驗在Symbian平臺上進行,Symbian 面向對象的程序開發框架采用MVC(Model-View-Controller)設計模式,MVC中模型、視圖、控制器封裝了應用程序的不同部分,分別相對應于Document class、View class、AppUi class。其中模型擁有對應用程序數據的所有權,負責這些數據的持久性和內部化。視圖負責顯示,并將用戶輸入發送給控制器。控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求。
該解碼器的實現參考了開放源代碼項目FFmpeg, FFmpeg是一個集錄制、轉換、音/視頻編碼解碼功能為一體的完整的開源解決方案[7]。通過深入學習FFmpeg中的H.264解碼部分知識,利用Open C插件把FFmpeg中包含了所有音視頻編解碼器(encoder/decoder)的libavcodec模塊和包含公共工具函數的libavutil模塊移植到Symbian平臺上。因為Symbian平臺是用C++語言來開發的而FFmpeg是用C語言編寫的,所以為了更好的兼容在引用FFmpeg模塊時要加上extern "C"{…}語句。H.264解碼實現大致步驟如下:1.注冊所有容器格式和CODEC:av_register_all(),2.打開壓縮文件:av_open_input__file(),3.從壓縮文件中提取流信息:av_find_stream_info(),4.查找解碼器:avcodec_find_decoder(),5.打開解碼器:avcodec_open(),6.為解碼幀分配內存:avcodec_alloc_frame(),7.從碼流中提取出幀數據:av_read_frame(),8.判斷幀的類型調用視頻幀:avcodec_decode_video(),9.解碼完后釋放解碼器:avcodec_close(),10.關閉輸入壓縮文件:av_close_input_file()。
在XP系統、CPU雙核T6400、內存2G的PC機上使用Carbide C++2.1和NOKIA提供的SDK(S60_3rd_FP1),構建Symbian S60開發平臺。實驗測試采用3個qcif格式的標準序列:Claire、Grandma和Foreman,序列都經過H.264開源編碼器JM10.1 的baseline編碼,將編碼產生的視頻壓縮文件放到解碼器中進行解碼,解碼效果如圖4所示。

圖4 解碼效果
實驗結果表明:解碼器播放流暢,解碼速度可以達到18~35 f/s,基本滿足實時解碼的需求。
在探討 3G網絡中移動終端的視頻解碼技術基礎上,實現了在Symbian平臺手機終端的H.264協議的解碼播放,解碼效果良好基本滿足實時解碼的要求。設計了從 PC端向移動終端發送音、視頻的無線流媒體應用系統。隨著無線通信網絡的不斷完善和視頻壓縮技術的不斷提高,無線流媒體應用成為一種趨勢[8]。網絡運營商完全能以此對手機用戶提供個性化、多樣化的數據增值業務,把其他各種多媒體內容轉換成流媒體格式,與3G網絡的高帶寬技術相結合,實現移動終端的高質量視頻的實時點播和直播。
[1] 鄭昊.移動流媒體應用開發[D].北京:北京郵電大學,2006:5-12.
[2] 任守華,王勝華,劉士雷,等.基于3G和H.264技術的無線視頻監控系統[J].計算機應用研究,2010,27(04):1554-1556.
[3] 龔琪琳.基于 H.264協議的手機實時視頻播放的研究[J].計算機與現代化,2010(01):91-93.
[4] 石碩,郭庚麒,李久仲,等.二網融合的可視電話與多媒體增值業務系統[J].通信技術,2009,42(08):102-104.
[5] 畢厚杰.新一代視頻壓縮編碼標準-H.264/AVC[M].北京:人民郵電出版社,2005:245-257.
[6] 張海朝,潘永輝,王亞濤.基于TCP友好速率控制和錯誤隱藏的H.264視頻傳輸[J].通信技術,2010,43(02):80-82.
[7] 杜傳贏.Symbian平臺移動流媒體播放器的實現與優化[D].湖北:華中科技大學,2008:15-20.
[8] 劉超,馬力妮,宋雄亮.基于 H.264 標準的多視點視頻編碼方案的研究[J].計算機工程與設計,2010,31(03):564-567.