隨著車載導航系統的飛速發展,具有視頻播放能力的車載終端逐漸成為新的熱點。本文根據這一需求設計了一種嵌入式流媒體播放器,方案基于Intel PXA270 的硬件平臺及嵌入式Linux 的軟件平臺,采用無線上網方式,可支持ASF、RM 格式的流文件解壓,能夠播放常見的MP1、MP2、MP3、WAV 音頻和先進的MPEG- 4 視頻,并可通過軟件升級加入對其它格式的支持。 播放器概述 近兩年來,車載導航系統在國內悄然興起,據專家預測,中國車載市場在啟動初期需求約為55 萬臺,折合人民幣約27.6 億。而從長遠來看,規模將達到千億元人民幣。但是,當前車載終端的視頻播放能力大多比較薄弱,能夠支持MPEG-4等新式編碼格式的只有少數廠家。而且由于嵌入式系統獨有的特點,車載產品存儲空間一般都很小,只有流式文件邊下載邊播放的特性才能滿足車載終端上音、視頻的播放要求,實時的為車主播放刷新的信息。本產品是基于I P 網絡的嵌入式流媒體播放器,不但可以支持MPEG- 4 和主流的流媒體格式,而且可以通過軟件升級支持未來的媒體格式。 播放器的底層開發環境 播放器的硬件環境包括:Intel PXA270開發平臺Sophia (簡稱sophia 板) 和支持802.11a、USB接口的10Mb/s無線網卡。sophia 板以Intel 公司的嵌入式處理器PXA270 為核心,伴以2700G 多媒體加速芯片實現視頻加速與3D加速,系統的硬件模塊如圖1所示:網絡控制模塊將從網卡讀出的數據送入PXA270 和Intel 2700G模塊處理,解壓后的數據在LCD或RGB顯示器上播放。 播放器的模塊劃分 sophia板使用的嵌入式Linux內核是由基于linux-2.4.20內核的MontaVista linux編譯而成,文件系統是針對Flash 無緩沖機制的jffs2 文件系統。同時,sophia 板的開發商還提供了BSP、中間件等大量的軟、硬件資源,其中通信接口中的網絡控制模塊、解碼模塊和播放器模塊是系統開發的關鍵。整個系統的模塊劃分如圖2 所示:Bootloader 在硬件物理層之上進行最底層的引導,它屬于板級支持包BSP 的一部分。BSP負責直接和底層的硬件設備建立聯系,同時,它也可以包含某些驅動。不過,在sophia 的軟件系統模塊中,網卡的驅動是作為嵌入式系統內核的模塊之一動態加載的。嵌入式中間件位于操作系統和應用程序的中間環節,提供了到程序模塊、組件庫的聯接,系統的解碼模塊和播放器模塊都是在它之上開發的。 模塊的實現 系統實現可以被分為以下幾個步驟: 1) 嵌入式Linux 內核的移植和編譯、文件系統的安裝; 2) 視頻圖像解壓縮模塊的實現; 3) 播放模塊的實現; 嵌入式Linux 內核的移植和文件系統、圖形界面系統的安裝 工作在sophia 板上的嵌入式Linux 內核對boot-loader、內核、文件系統的加載步驟和交叉編譯環境的建立方法與其它嵌入式平臺的開發步驟相似具有一定的通用性,具體的建立方法可以參考文獻。但是有兩點要注意: 1) 在使用make menuconfig定制內核時要讓內核支持無線網卡,具體步驟是在USB Support 配置菜單中選擇USB network devices,再于子菜單中選擇wireless,使得在內核中加入對USB 無線網卡的驅動支持。 2) 在圖形界面系統的編譯與安裝中注意建立工程后,要將選項中的gettext 選項勾掉,否則程序無法順利編譯。 視頻圖像解壓模塊的實現 由網絡控制模塊獲取的數據在系統中是以流數據的形式存在的,因此,首先要對流式文件進行解壓。同時,為了提高傳輸效率從而提高視頻圖像質量,網絡上傳輸的原始視頻圖像都進行了壓縮編碼,所以,還需要根據編碼格式進行相應解碼。本系統不但支持常見的MP1、MP2、MP3 和WAV 音頻文件格式,還可以對先進的MPEG- 4視頻圖像壓縮編碼文件解壓縮。 流式文件的解壓縮 按照播放器所接入的車載導航網絡的要求,本方案要為當前主流的流文件格式:ASF、RM提供解壓能力。 ASF 文件解壓 ASF文件基本的組織單元叫做ASF 對象,每個對象由三個域組成:128 位的全球唯一的對象標識符域、64 位整數的對象大小域和可變長的對象數據域。ASF 文件的高層邏輯結構也包含三部分:頭對象、數據對象和索引對象。其中頭對象是必需的并且必須放在每一個ASF 文件的開頭部分,它包含了許多全局信息,一定要在數據對象之前被接收方接收并解釋;數據對象也是必需的,且一般情況下緊跟在頭對象之后,包含了所有待播放的數據;索引對象是可選的。 RM文件解壓 組成RM文件的基本部件是塊,每個塊包括三個字段:指明塊標識符的四字符編碼、塊中限定數據大小的32 位數值和數據塊部分。塊標識符用來唯一的標識每一個塊。同樣地,RM文件的高層邏輯結構也由三部分組成:文件報頭部分、文件數據部分和文件索引部分。因為RealMedia 文件格式是一種加標志的文件格式,塊的順序沒有明確規定,但RealMedia 文件報頭必須是文件的第一個塊。 MPEG- 4 視頻圖像的解壓 在幾種開放源代碼的MPEG- 4 解碼軟件中,作者選擇xvidcore 作為系統中視頻圖像解壓模塊的核心算法。xvid 是一個高效且可移植的編碼軟件,系統采用的是目前最新的版本xvidcore- 1.1.0。xvid 支持SimpleProfile 和Advanced Profile,支持I/P Frames、B -Frames、Interlacing 和GMC,是目前比較流行的MPEG- 4 編碼軟件。對xvidcore- 1.0.1 進行交叉編譯有以下主要步驟: 1) 解壓縮xvidcore 源代碼tar- zxvf xvidcore- 1.1.0.tar; 2)設置環境變量export xvidcore= “the path of xvidcore”; 3)生成makefile ./configure- - host=localhost- - build=arm- linux- gcc; 4) 編譯源代碼make;make install; 將交叉編譯生成的庫文件libxvidcore.so.* 拷貝到交叉編譯器工作目錄的./local/lib 子目錄中,該庫文件為系統的其它模塊提供了編程接口。 解碼格式的可擴展性 播放器支持的文件格式越多,其生命力也就越強大,PXA270 嵌入式處理器加上2700G 多媒體加速芯片的搭配方案為媒體播放提供了強大的硬件支持,通過軟件升級,理論上可以支持任何媒體格式。本方案的做法是:在播放器中實現一個索引表類,將來根據需要新添加的編碼格式作為獨立的類注冊到索引表中。基于linux 的c++解碼類源代碼可以由網上開放源碼的解碼器網站下載,系統中的MP1,MP2,MP3 和WAV 的解碼就是采用這種方法實現的。 播放模塊實現 文件的輸入 在播放器系統中,文件的來源有兩種:由網卡讀入存儲器后播放或通過其它數據傳輸途徑寫入存儲器,在存儲器中直接播放。sophia 板提供了網卡的驅動模塊,可以使用命令modprobe usbcore 和modprobe usbwlnc動態加載,為數據從網卡經由操作系統到達播放進程提供一個全雙工的通道。數據的處理由播放器中的stream input 類來實現。 流媒體協議 實現流式傳輸有兩種方法:實時流式傳輸和順序流式傳輸,系統使用的是實時流式傳輸,需要標準化的流媒體協議來保證客戶機和專用的流媒體服務器之間進行通信。根據流媒體協議的功能可以分為兩類: 基本網絡協議 為媒體傳輸提供基本的網絡服務支持,由于TCP需要較多的開銷,不太適合傳輸實時數據。在流式傳輸的實現方案中,采用RTSP/TCP 來傳輸控制信息,而用RTP/UDP 來傳輸實時聲音、圖像數據。 傳輸協議 傳輸協議包括RTP、RTCP、RTSP 和RSVP,RTP和RTCP 控制端到端網絡數據的傳輸,RTSP 提供話路控制的功能,RSVP 是可選的,它為播放進程在網上預先申請一部分網絡資源( 即帶寬),能在一定程度上為流媒體在Internet 上的傳輸提供特殊服務質量QoS。為流媒體設計的協議棧如圖3 所示:從UDP/TCP層得到的數據包處理后得到打包的RTP 數據流,通過RTP/RTCP/RTSP 層分離出定時和同步信息以及包的序列號,將讀出的流文件交給ASF 和RM解碼模塊。 媒體的播放 播放器以自由軟件mplayer 為藍本,處理流程如圖4所示: 1) 如果數據是從網卡獲得的,調用stream input模塊進行處理。Stream input 模塊根據流媒體協議,使用socket 和多媒體服務器進行通信,輸入的流數據放入緩沖池中并根據流文件的格式對它進行ASF 或RM解壓縮; 2) 解壓后的文件根據文件的類型查找索引表調用不同的解碼類將數據轉化為一種統一的中間格式raw,生成相應的file,由播放器main 函數播放。如果文件已保存在存儲器中,可以跳過第一步,直接執行第二步流程。 小結 本文提出了一種基于Intel PXA270 嵌入式微處理器和嵌入式Linux 的流媒體播放器系統實現方案,特有的索引表結構使得播放器可以通過軟件升級增加新的編碼格式,純軟件的實現方式大大縮減了研發周期。經測試,在帶寬50Kb/s~100Kb/s、緩存256k 的條件下,系統對CIF(352288) 視頻格式、QCIF(176144)視頻格式和音頻格式的文件播放失幀率在5%以下,播放流暢,滿足了目前車載終端中嵌入式流視頻播放的要求。 |