基于IPP庫的MPEG-4視頻傳輸系統(tǒng)設(shè)計
隨著網(wǎng)絡(luò)及通信技術(shù)的發(fā)展,形式多樣的嵌入式設(shè)備作為繼PC機后的信息處理工具正日益滲透到社會生活的各個領(lǐng)域。在IP化和視頻化的雙重推動下,以嵌入式設(shè)備作為視頻處理與傳輸終端在視頻監(jiān)控,視頻會議等領(lǐng)域得到越來越廣泛的應(yīng)用。為了進一步提高傳輸?shù)膶崟r性和圖像質(zhì)量,本文在硬件平臺上采用 Intel新一代的XScale處理器PXA270,增強了媒體處理能力,降低了系統(tǒng)功耗。同時,為了最大限度的發(fā)揮處理器的性能優(yōu)勢,本文采用 INTEL針對PXA27X系列開發(fā)的高性能集成函數(shù)庫,即IPP庫函數(shù)作為MPEG-4視頻編解碼的函數(shù)骨架,采用MPEG-4編解碼,在LINUX嵌入式操作系統(tǒng)上實現(xiàn)并優(yōu)化了視頻傳輸系統(tǒng)。
1 系統(tǒng)硬件組成及工作流程
1.1 系統(tǒng)組成
本系統(tǒng)硬件組成如圖1所示,采用Intel公司的嵌入式處理器PXA270作為主控CPU,該款處理器的主頻率可達520MHz,可以滿足系統(tǒng)在編解碼條件下的速度要求。其Wireless MMX技術(shù)有效提高了處理視頻數(shù)據(jù)的能力,獨有的SpeedStep技術(shù)使其兼?zhèn)淞烁咝阅芎偷凸牡奶攸c。根據(jù)系統(tǒng)的運算量和系統(tǒng)文件的大小,核心系統(tǒng) Flash存儲器和SDRAM存儲器容量分別設(shè)計為32M和64M。外設(shè)接口方面,通過USB接口連接以O(shè)V511作為控制芯片的高性能USB攝像頭,提高了傳輸速率并避免了低帶寬條件下的圖像跳動現(xiàn)象。通過LCD控制接口連接LCD顯示模塊,通過系統(tǒng)總線連接10M/100M自適應(yīng)以太網(wǎng)芯片 LAN91C11。同時,系統(tǒng)還預(yù)留了RS232串口供調(diào)試使用。
1.2 MPEG-4視頻傳輸系統(tǒng)的工作流程
該系統(tǒng)的主要工作流程如下:
發(fā)送端:視頻數(shù)據(jù)經(jīng)USB攝像頭采集進入本系統(tǒng),由PXA270對原始的YUV420格式的視頻數(shù)據(jù)進行MPEG-4編碼,采用IPP庫函數(shù)進行DCT變換[2],量化,預(yù)測,運動估計及運動補償,熵編碼后,把壓縮后的視頻數(shù)據(jù)打成RTP包,經(jīng)以太網(wǎng)控制模塊送入以太網(wǎng)。
接收端:將接收的RTP包還原成MPEG4碼流[2],仍采用IPP庫函數(shù)由PXA270進行MPEG-4解碼,將解碼后的視頻數(shù)據(jù)運用FrameBuffer機制送入LCD,由LCD顯示模塊來回放發(fā)送端采集到的視頻圖像,達到視頻傳輸?shù)哪康摹?br />
圖1 視頻傳輸系統(tǒng)硬件組成框圖
2 系統(tǒng)的模塊分析及基于IPP庫的軟件實現(xiàn)
本系統(tǒng)由視頻采集模塊,基于IPP庫的MPEG4編解碼模塊,RTP傳輸模塊和視頻回放模塊組成,整個系統(tǒng)的軟件流程圖如圖2所示,下面就該圖對各個模塊進行簡要分析。
圖2 系統(tǒng)軟件流程圖
2.1 視頻采集模塊
視頻采集由USB攝像頭來實現(xiàn),采用通用的Video4Linux API 進行編程。Video4Linux是嵌入式LINUX為圖像傳感器之類的語音圖像設(shè)備提供接口函數(shù)。通過打開/dev/video0 設(shè)備文件對攝像頭進行操作,得到Y(jié)UV420格式的視頻數(shù)據(jù)。采集視頻數(shù)據(jù)的過程為:打開設(shè)備文件,查詢并確認設(shè)備性能,對采集窗口,顏色模式,幀狀態(tài)初始化,采用mmap()內(nèi)存映射方式實現(xiàn)共享內(nèi)存,開始采集圖像數(shù)據(jù),阻塞等待驅(qū)動緩沖好一幀完整的圖像,循環(huán)采集直至程序退出。由于采用了內(nèi)存映射方式而不是read(),write()等文件操作函數(shù),繞過了內(nèi)核緩沖區(qū),加速了I/O訪問。同時,該模塊開辟了兩塊視頻緩沖區(qū),一塊用于采集的同時另一塊用于發(fā)送,顯著提高了采集效率。
2.2 基于IPP庫的MPEG4編解碼
2.2.1 IPP庫簡介
IPP是Intel基于其系列處理器開發(fā)的一套跨平臺的集成性能函數(shù)庫(Integrated Performance Primitives)的縮寫[3,5],它提供了廣泛的多媒體功能,包括音視頻編解碼(如MPEG4,G.723),圖像處理,語音識別及加密機制。 Intel IPP 針對包括PXA27X系列的大量微處理器進行優(yōu)化,采用跨平臺的通用API,提供圖像處理、顏色轉(zhuǎn)換、過濾、變換,以及算術(shù)、統(tǒng)計與圖形運算等各種函數(shù),為軟件應(yīng)用程序提供了一個友好的連接界面,不但節(jié)省了開發(fā)成本以及研發(fā)時間,還使得多媒體應(yīng)用程序在INTEL處理器上的性能大大改善。
2.2.2 IPP庫函數(shù)介紹
一般的IPP函數(shù)名如下:
ipp<data-domain><name>_<datatype>[<descriptor>](<arguments> ) ;
這里的data-domain所謂的域,指的是該IPP函數(shù)所屬的功能范圍。i(images/video)代表二維圖像處理
datatype數(shù)據(jù)類型的定義是<bit depth>位數(shù)加上<bit interpretation>位解釋組成。位數(shù)有<1|8|16|32|64>,位解釋則有<u|s|f>[c]。
這里u是無符號,s是有符號,f是浮點數(shù),c是復(fù)數(shù)。
descriptor是描述符,描述要操作的數(shù)據(jù)。
C加數(shù)字n表明圖像數(shù)據(jù)有幾個顏色頻道,1|2|3|4。
I表示操作僅在此數(shù)據(jù)內(nèi)存的范圍內(nèi)進行,不需要多余的內(nèi)存空間。
R表示需要指定ROI即圈選范圍。
2.2.3 MPEG-4編解碼中的關(guān)鍵IPP庫函數(shù)
基于IPP庫的MPEG-4編解碼系統(tǒng)框圖如圖3所示,下面來具體介紹MPEG4編解碼中用到的關(guān)鍵的IPP庫函數(shù)[1,4]:
DCT變換:
ippiDCT8x8Fwd_Video_8u16s_C1R(const Ipp8u * pSrc, int srcStep, Ipp16s * pDst);
功能描述:將pSrc指向的8X8圖像塊采樣點(空間域)進行前向離散余弦變換,轉(zhuǎn)換到 pDst指向的一組變換系數(shù)(變換域)。
量化:
ippiQuantIntra_MPEG4_16s_I (Ipp16s * pSrcDst, Ipp8u QP, int blockIndex, const int * pQMatrix);
功能描述:將輸入的DCT系數(shù)量化后,重新存儲到pSrcDst指向的存儲空間,其中QP是量化系數(shù)
VLC編碼:
ippiEncodeVLCZigzag_Inter_MPEG4_16s1u 對幀間塊進行之字型掃描并VLC編碼
運動估計和運動補償:
ippiMCBlock_RoundOff_8u----進行運動補償并將補償結(jié)果復(fù)制到當(dāng)前塊
ippiMotionEstimation_16x16_SEA----完成16X16大小的運動補償,它不僅覆蓋了16X16,還包括了8X8的整像素和半像素搜索。同時,該函數(shù)還決定了幀內(nèi)或幀間的選擇
ippiEncodeMV_MPEG4_8u16s----搜索預(yù)測的運動向量并對殘差進行編碼
以上只選取了MPEG4編碼端用到的幀內(nèi)/幀間關(guān)鍵的IPP庫函數(shù),而解碼端的VLC解碼,逆量化以及逆DCT變換是編碼的逆過程,對于各個功能模塊相對應(yīng)的IPP庫函數(shù)在IPP庫參考文檔中有詳細敘述,在此不再贅述。
圖3 MPEG-4編解碼系統(tǒng)框圖
2.3 視頻傳輸模塊
在壓縮視頻流通過IP網(wǎng)絡(luò)傳輸之前必須打包。由于TCP協(xié)議丟包重傳的特性增加了抖動和失真,不符合MPEG-4視頻傳輸對時延的嚴(yán)格要求,本系統(tǒng)采用UDP來傳輸,但UDP不保證可靠傳輸,接收端需要通過RTP/RTCP來檢測丟包。RTP協(xié)議提供了時間戳,序列號來控制實時數(shù)據(jù)的流放。發(fā)送端在數(shù)據(jù)包里隱蔽的設(shè)置了時間標(biāo)簽,接收端依照時間標(biāo)簽按照正確的速率恢復(fù)成原始的實時的數(shù)據(jù)。
2.4 視頻回放模塊
本系統(tǒng)采用FrameBuffer機制在LCD上實現(xiàn)視頻信息的顯示。FrameBuffer是一種能夠提取圖形的硬件設(shè)備,是用戶進入圖形界面很好的接口,這種接口將顯示設(shè)備抽象為幀緩沖區(qū)。用戶可以把它看作一塊內(nèi)存,只要將其映射到進程地址空間,就可以直接進行讀寫操作,而寫操作可以立即反應(yīng)在屏幕上。在應(yīng)用程序中,首先打開/dev/fb0設(shè)備文件,隨后用ioctl操作取得屏幕的分辨率和bpp值,從而計算出屏幕緩沖區(qū)的大小,并將該緩沖區(qū)映射到用戶空間,最后就可直接對屏幕緩沖區(qū)進行圖片顯示。由于本系統(tǒng)所采用的LCD只支持RGB格式的視頻流,而經(jīng)MPEG4 解碼后的數(shù)據(jù)為YUV格式的,所以在顯示之前還需運用IPP函數(shù)ippiYUV420ToRGB565_8u16u_P3C3R進行YUV到RGB格式的轉(zhuǎn)換。
3 結(jié)語
本文介紹了視頻傳輸系統(tǒng)各個模塊的功能和軟件實現(xiàn),重點介紹了基于IPP的MPEG-4編解碼模塊。從實際效果來看,在 XScale PXA270中利用IPP庫編解碼后的編碼速率比未用IPP庫提高了70%~90%,大大提高了實時性。本文的研究成果可以在視頻監(jiān)控,多媒體會議等很多領(lǐng)域得到更廣泛的應(yīng)用。
本文作者創(chuàng)新點:在基于Intel Xscale構(gòu)架的PXA270嵌入式設(shè)備上,使用IPP為MPEG-4編解碼編寫的底層API函數(shù)對視頻傳輸系統(tǒng)程序結(jié)構(gòu)進行重組并優(yōu)化,對IPP的語法規(guī)則和其中的關(guān)鍵算法給出了解釋。經(jīng)優(yōu)化后的系統(tǒng)傳輸效率和圖象質(zhì)量明顯提高。
參考文獻:
[1]Intel Integrated Performance Primitives on Intel Personal Internet Client Architecture Processors Reference Manual Version 5.0 [S].Intel.com ,2005
[2]求是科技.Visual C++音視頻編解碼技術(shù)及實踐[M].人民郵電出版社,2006
[3]洪艷偉,楊斌.嵌入式手持設(shè)備及其基于IPP的優(yōu)化. [J].《微計算機信息》,2007,2-2:23
[4]Iain E.G.Richardson 著 歐陽合 韓軍譯. H.264和MPEG-4視頻壓縮[M].國防科技大學(xué)出版社,2004
[5]鄭靈翔等.嵌入式系統(tǒng)設(shè)計與應(yīng)用開發(fā)[M].北京航天航空大學(xué)出版社,2006