曹 潔,金保召,趙 宏
CAO Jie,JIN Baozhao,ZHAO Hong
蘭州理工大學 計算機與通信學院,蘭州 730050
School of Computer and Communication,Lanzhou University of Technology,Lanzhou 730050,China
隨著互聯網技術和流媒體技術的飛速發(fā)展,網絡數字視頻傳輸技術正被廣泛應用于新聞發(fā)布、視頻點播、實時視頻會議、遠程教育等各個領域?;贗P流媒體技術的嵌入式流媒體終端因其使用方便,便于攜帶而受到用戶青睞,逐漸成為研究的熱點,擁有廣闊的市場前景。如文獻[1]基于DirectShow技術,針對移動網絡不穩(wěn)定、帶寬小的特點,采用RTCP反饋機制、緩沖區(qū)管理和音視頻同步機制來設計移動流媒體播放器,但該播放器僅在Hopen手機模擬平臺上模擬運行,其在硬件平臺上的播放性能有待進一步測試。文獻[2]采用MPEG-4視頻壓縮標準和RTP/RTCP協(xié)議實現了基于3G無線網絡的移動視頻監(jiān)控系統(tǒng),但由于流媒體播放時對網絡帶寬的高占有特性,使得傳統(tǒng)的C/S方式很容易導致服務器成為系統(tǒng)瓶頸,限制系統(tǒng)的服務能力。文獻[3]提出了一種基于DM6446的嵌入式P2P流媒體播放器的設計模式,同時對媒體數據加載和音視頻同步作了深入的研究,但采用專用的編解碼芯片在保證系統(tǒng)實時性的同時帶來系統(tǒng)功能定制性不強、性價比較低等問題。文獻[4]提出利用平均速率、時延抖動和輔助系數η三個參數進行緩沖區(qū)長度估算的簡化算法,并提出了在客戶端按照數據的重要性或優(yōu)先級的不同實施主動拋棄策略,但該方法僅進行了軟件模擬仿真并未在硬件設備上實現。
針對上述問題,本文提出以S3C6410為處理器的嵌入式流媒體播放終端的設計方案,充分利用S3C6410的多媒體數據處理能力[5],輔之以高效且可定制的多媒體數據編解碼算法,以硬件加軟件的方式實現一款功能穩(wěn)定、性價比高,且支持算法升級的嵌入式流媒體播放終端。
為保證系統(tǒng)的模塊性和功能的可擴展性,系統(tǒng)采用分層結構設計[6],從下往上依次為系統(tǒng)層、解碼層和應用層,如圖1所示,采用層次設計方式可在各層實現模塊化的功能,將各層功能相分離,同時下層為上層提供服務接口,供上層調用。
圖1 系統(tǒng)結構
如圖1所示,第一層為系統(tǒng)層,系統(tǒng)層負責提供媒體數據傳輸、QoS(Quality of Service)控制機制、數據緩存空間管理和P2P數據轉發(fā)等服務。其中,媒體數據傳輸服務包括本地媒體數據訪問和接收來自網絡的流媒體數據,其中,網絡媒體數據的獲取需要首先建立TCP連接,用于創(chuàng)建 RTSP(Real Time Streaming Protocol)會話,然后分別創(chuàng)建RTP(Real-time Transport Protocol)連接實現媒體數據傳輸和RTCP(Real-time Transport Control Protocol)連接實現媒體傳輸控制、保證媒體數據傳輸質量;QoS控制機制根據傳輸過程中已接收到的媒體數據信息和網絡狀態(tài)信息,周期性地向服務器端發(fā)送反饋控制信息,以動態(tài)調整媒體數據發(fā)送速率,實現流媒體數據傳輸的實時QoS控制[7];數據緩存空間管理服務主要包括數據緩存、流內同步以及與其他P2P節(jié)點交互等功能,數據緩存服務用于對接收到的媒體數據進行存儲以減少因網絡傳輸抖動而給媒體播放所帶來的影響,流內同步機制采用雙向循環(huán)隊列作為其基本數據結構,對亂序到達的網絡媒體數據進行處理,以保證播放時媒體流的時基順序與原始媒體數據順序一致;P2P數據轉發(fā)服務的主要功能是將數據緩存空間中已播放但尚未丟棄的數據包轉發(fā)給其他節(jié)點,以實現其他節(jié)點的P2P播放方式。
第二層為解碼層,解碼層主要包括解碼器、音頻解碼庫、視頻解碼庫和音/視頻流間同步機制,該層采用解碼器和選擇解碼器組件相分離的層次結構,該結構有效地降低了層次間的耦合度,提高了解碼層的可擴展性。首先,解碼器由系統(tǒng)層的數據緩存區(qū)讀取媒體數據,并根據媒體數據頭信息判斷媒體數據編碼格式,選擇相應的解碼庫進行解碼[8]。然后,由于用戶對聲音的敏感程度較強,本文采用了基于解碼時間戳(Decoding Time Stamp)的視頻同步到音頻的同步方式來實現音視頻流間同步,該種流間同步機制的基本思想是以音頻流為主媒體流、視頻流為從媒體流,音頻流以正常速度播放,根據當前播放的音頻時間戳確定當前應當播放的視頻時間戳,從而達到音視頻同步播放的效果。
第三層為應用層,即用戶界面層,作為用戶與播放器的交互界面,該層用于播放用戶請求的媒體文件,同時允許用戶進行其他的操作,例如快進、快退、靜音等操作。
當前流媒體播放技術均采用緩存技術[9],即客戶端首先從服務器端下載媒體數據到本地緩存空間,然后開始對緩存空間內的媒體數據進行排序、解碼、播放等操作,同時下載后續(xù)的媒體數據到本地緩存空間[10]。其緩存空間設計如圖2所示,其中 p點表示緩沖空間起始點,也是本地播放點,d點表示新下載的媒體數據存儲點,e點表示緩沖空間結束點。
圖2 客戶端緩存空間劃分示意圖
通常情況下,客戶端會從緩存空間 p~d中不斷讀取媒體數據,解碼播放后丟棄,以提供更多的空間d~e來存儲后續(xù)下載的待播放的媒體數據,減少因媒體數據下載速度波動對播放帶來的影響。傳統(tǒng)的嵌入式硬件設備由于CPU、內存空間和數據傳輸等原因導致多媒體數據處理能力低下。隨著嵌入式終端硬件設備的迅速發(fā)展,目前主流的S3C6410微處理器主頻高達667 MHz且支持256 MB RAM內存[11],其內部集成了MFC(多格式CODEC)、3D圖形引擎等硬件加速器,具有出色的多媒體數據處理能力,同時其外圍擴展部件支持WIFI、藍牙、紅外等數據傳輸方式,最新的APQ8064微處理器已高達1.7 GHz、支持2 GB RAM內存[12]。高性能的CPU處理能力、不斷增大的內存空間和高速的數據傳輸方式為P2P技術在嵌入式流媒體終端中的應用提供了硬件平臺。
為了能夠以P2P方式利用嵌入式流媒體終端設備中緩存的媒體數據,需要對終端設備中的緩存空間重新規(guī)劃,使緩存空間中已播放的媒體數據保留一段時間,以便為其他節(jié)點提供服務。終端設備中緩存空間的設計規(guī)劃要綜合考慮終端設備對外提供服務的能力和自身播放的流暢性等問題。
根據P2P方式流媒體數據傳輸的特征[13],在緩存空間中增加一個新的區(qū)域,以存儲本地已播放完成的媒體數據,如圖3所示。其中,s表示緩存空間起始點;p表示本地播放點;d表示新下載媒體數據存儲點;e表示緩存空間結束點。s~p之間存儲的是本地已經播放完畢、能夠向其他節(jié)點提供服務的媒體數據;p~d之間存儲本地待播放的媒體數據;由于可用網絡帶寬波動使得媒體數據下載速度隨之波動,導致d點經常左右移動,因此,此區(qū)間的媒體數據不作為服務數據對其他節(jié)點提供;d~e之間為存儲新下載數據的預留空間。
圖3 具有P2P功能的客戶端緩存空間劃分示意圖
正常情況下,新下載的媒體數據以媒體播放速度進入緩存空間d~e,同時,緩存空間s~p中的媒體數據以媒體播放速度被丟棄,使得各點位置相對固定。當媒體數據下載速度大于播放速度時,點d將右移,使得d~e區(qū)間變小,緩存預留空間減小,p~d區(qū)間變大,本地待播放媒體數據增多;當媒體數據下載速度小于播放速度時,點d將左移,使得d~e區(qū)間變大,緩存預留空間增大,p~d區(qū)間變小,本地待播放數據減少。
網絡可用帶寬的波動會引起d點的移動,當節(jié)點播放速度較長時間低于媒體數據下載速度時,使得d點右移,最終與e點重合,從而導致新下載的媒體數據溢出而被丟棄,浪費系統(tǒng)資源和網絡帶寬;當節(jié)點播放速度超過媒體數據下載速度較長時間時,使得d點左移,最終使得d點與 p點重合,導致因待播放媒體數據供應不足出現“播放暫停,等待緩沖”的現象[14]。綜合考慮以上兩種情況,媒體數據的下載速度應該隨 p~d區(qū)間和d~e區(qū)間比值的變化而變化,如公式(1)所示。
其中,speeddownload表示媒體數據下載速度,d-e表示存儲新下載數據的預留空間大小,p-d表示存儲已下載待播放媒體數據的空間大小,speedplay表示媒體播放速度。由公式(1)可知,當已下載待播放媒體數據較多時,媒體下載速度speeddownload的值將會減??;當 p點與d點距離很近時,speeddownload的值將會很大,表示本地因待播放媒體數據供應不足而采用盡可能的下載方式獲取數據;當媒體數據的實際下載速度長期達不到speeddownload的值時,表示客戶端應該更換服務端,以改善媒體數據的下載速度。
該嵌入式流媒體播放終端將播放過程中的各個環(huán)節(jié)劃分為不同的功能模塊,并使用線程實現,采用模塊化線程設計充分利用了Linux多線程、多任務機制[15],保證了系統(tǒng)的靈活性和易升級性,提高了播放器的響應速度和性能,播放器軟件流程如圖4所示。
圖4 播放器軟件流程圖
圖4為播放器軟件系統(tǒng)的實現流程圖,可劃分為以下幾個主要階段:
(1)系統(tǒng)初始化,對系統(tǒng)參數、環(huán)境進行相應的設置。
(2)創(chuàng)建會話,主要包括初始化會話描述信息、RTSP客戶端標示符、同步線程標示符和顯示屏參數等系統(tǒng)變量,如果初始化失敗,則系統(tǒng)退出。
(3)初始化數據緩存空間,申請一定大小的內存空間作為數據緩存空間,并初始化其數據結構。
(4)媒體數據獲取,根據初始化會話信息判定服務類型,若為服務器播放模式,則建立RTSP會話,創(chuàng)建RTSP客戶端,建立與服務器之間的連接,通過RTP/RTCP協(xié)議傳輸流媒體數據;若為P2P播放模式,則創(chuàng)建socket()套接字,建立與指定P2P節(jié)點之間的連接,通過UDP協(xié)議傳輸流媒體數據。
(5)流內排序,將亂序到達的網絡媒體數據包進行處理,使得播放時媒體流的時基順序與原始媒體流的順序一致,同時將已排序的媒體數據與其他節(jié)點交互。
(6)解碼器解碼,解碼選擇器根據媒體數據頭信息選擇相應的解碼器,對已排序的媒體數據進行解碼。
(7)流間同步,將不同媒體流之間的基于時序的對應,即保證對各媒體流(音頻、視頻)的播放是同步的,與流內同步相比,其過程更加復雜也更為關鍵。
(8)啟動解碼播放線程,主要是初始化硬件設備,以保證音視頻同步播放。
(9)判斷媒體播放是否結束,如果結束則系統(tǒng)退出,否則,繼續(xù)獲取媒體數據。
系統(tǒng)測試中流媒體服務器采用的是Apple公司提供的開源實時流媒體服務器Darwin Streaming Server(簡稱DSS),由DSS后臺管理系統(tǒng)可實時觀測服務器狀態(tài),如 CPU Load、Current Throughput、Total Bytes Served等參數狀態(tài),通過DSS服務器狀態(tài)參數的變化來實現對不同實驗環(huán)境的對比分析。
系統(tǒng)測試分為兩部分,首先是不具有P2P功能的嵌入式流媒體播放器的播放測試,本文實驗中采用的是開源的MPlayer,通過編譯移植到UP-Magic6410開發(fā)板上,DSS服務器主機IP地址為192.168.1.100,嵌入式流媒體播放器終端設備IP地址為192.168.1.101/102,分別在播放器地址欄中輸入傳輸協(xié)議、服務器IP地址和視頻名稱rtsp://192.168.1.100/daomeixiong.mp4,觀察記錄DSS服務器狀態(tài)參數;然后是本文設計的具有P2P功能的嵌入式流媒體播放器的播放測試,步驟同上。兩種不同播放環(huán)境下DSS狀態(tài)參數如圖5所示。
圖5 DSS服務器狀態(tài)參數對比圖
在圖5中,左圖為不具有P2P功能的嵌入式流媒體播放時DSS服務器狀態(tài)參數示意圖,右圖為具有P2P功能的嵌入式流媒體播放器播放時DSS服務器狀態(tài)參數示意圖。通過對比證明,當采用具有P2P功能的嵌入式流媒體播放器訪問DSS服務器時,CPU Load有效降低,整體媒體數據傳輸量Total Bytes顯著減少,媒體下載速率也有一定的提升,且當以具有P2P功能的嵌入式流媒體播放器播放時,其效果圖如圖6所示。實驗結果表明,本文設計模式能夠提供穩(wěn)定、流暢的播放服務,且能夠有效降低流媒體服務器負載。
圖6 具有P2P功能的嵌入式流媒體播放器播放效果圖
本文提出的具有P2P功能的嵌入式流媒體終端設計方案,采用層次化設計方式,對系統(tǒng)功能進行分層,實現上層的軟件模塊調用下層硬件提供的功能,充分利用了硬件的處理能力,并保證了軟件的可升級性。經實驗證明,所引入的P2P播放模式,有效減輕了服務器負載,提高了系統(tǒng)的服務能力。
[1]呂偉梅,鄭慶華.移動流媒體播放器的設計與實現[J].計算機科學,2008,35(9):126-128.
[2]賀禮,陳前斌.基于3G無線網絡實時傳輸MPEG-4流媒體的設計與實現[J].計算機應用研究,2008,25(6):1856-1859.
[3]李愛群,賀鋒.一種嵌入式P2P流媒體播放器的設計[J].信息化研究,2010,36(9):23-27.
[4]文遠保,林建明.嵌入式流媒體客戶端緩沖控制策略的研究[J].華中科技大學學報:自然科學版,2005,33(10):83-85.
[5]趙宏.視頻網格關鍵技術研究[D].烏魯木齊:新疆大學,2010.
[6]Bamakhrama M,Stefanov T.Hard-real-time scheduling of data-dependent tasks in embedded streaming applications[C]//EMSOFT’11 Proceedings of the Ninth ACM International Conference of Embedded Software,2011:195-204.
[7]朱鵬,李春文.基于RTP的網絡視頻傳輸系統(tǒng)的設計與實現[J].計算機工程與應用,2003,39(26):18-20.
[8]管昌生,鄧磊.基于P2P技術的流媒體服務模型研究[J].武漢理工大學學報,2006,28(2):70-73.
[9]金海紅,昂志敏.基于CDMA網絡的視頻實時傳輸系統(tǒng)[J].儀器儀表學報,2006,27(6):659-661.
[10]Inge H O,Jetunda,Andrew P.RTP-based broadcast streaming of high definition H.264/AVC video:an error robustness evaluation[J].Journal of Zhejiang University:Science A,2006(S1):19-26.
[11]王書芹,姜秀柱.基于P2P的流媒體點播系統(tǒng)中客戶端緩存的研究[J].計算機應用與軟件,2009,26(9):219-221.
[12]Qiu Xuanjia,Huang Wei,Wu Chuan.Instant Leap:an architecture for fast neighbor discovery in large-scale P2P VoD streaming[J].Multimedia Systems,2010,16(3):183-198.
[13]施博學,王志良,劉冀偉.基于RTP實時遠程圖像傳輸研究與實現[J].微計算機信息,2005,21(2):178-179.
[14]譚云福,張建忠.基于MPEG-4的嵌入式流媒體服務器設計[J].計算機工程與設計,2008,29(16):4144-4146.
[15]陳起,吳杰.P2P流媒體點播系統(tǒng)中的緩存管理方案的研究和實現[J].計算機應用與軟件,2009,26(2):94-96.