游張華
?。ㄉ钲谑腥A海聯(lián)能科技有限公司,,廣東 深圳 518100)
摘要: ZigBee是以IEEE 802.15.4標準為基礎(chǔ)的一種低成本、低功耗的無線網(wǎng)絡(luò)技術(shù),通過ZigBee協(xié)議棧,,可將各ZigBee節(jié)點形成一個節(jié)點容量大,、通信范圍廣的ZigBee網(wǎng)絡(luò)。而H.264是當今最好的視頻壓縮標準,,具有碼流率低,、圖像質(zhì)量高、容錯能力強等優(yōu)點,。使用ZigBee網(wǎng)絡(luò)來傳輸H.264視頻碼流,,是實現(xiàn)無線視頻傳輸系統(tǒng)的一種好方案。通過具體開發(fā)實例,,從硬件和軟件兩個方面討論了該方案的設(shè)計與實現(xiàn),。
關(guān)鍵詞:ZigBee;H.264,;無線視頻傳輸系統(tǒng)
中圖分類號:TP393.0文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.016
引用格式:游張華. 基于ZigBee和H.264的無線視頻傳輸系統(tǒng)的設(shè)計與實現(xiàn)[J].微型機與應(yīng)用,,2016,35(24):54-56,,60.
0引言
ZigBee是以IEEE 802.15.4標準[1]為基礎(chǔ)的一種低成本、低功耗,、網(wǎng)絡(luò)容量大,、通信范圍廣的無線網(wǎng)絡(luò)技術(shù)[2],可支持多達65 000個節(jié)點,。ZigBee的工作頻段有3個,,分別是868 MHz、915 MHz,、2.4 GHz,當工作于2.4 GHz時,,其擁有最高的傳輸速率250 KB/s。在存儲量盡可能小的情況下獲得好的圖像質(zhì)量和低帶寬圖像快速傳輸已成為視頻壓縮的兩大難題,。為此ISO/IEC和ITUT兩大國際標準化組織聯(lián)手制定了新一代視頻壓縮標準H.264[3],。H264具有圖像質(zhì)量好、連續(xù)性強,、動態(tài)圖像質(zhì)量高,、壓縮比高、碼流速率可調(diào)等優(yōu)點,。本文從硬件和軟件兩個方面討論使用帶H.264硬件編解碼器,、ARM9 CPU核的i.MX27和帶ZigBee協(xié)議棧的微處理器CC2430來共同組建無線視頻傳輸系統(tǒng)。
1系統(tǒng)總體設(shè)計
系統(tǒng)總體設(shè)計如圖1所示,,整個ZigBee網(wǎng)絡(luò)由一個ZigBee協(xié)調(diào)器,、多個 ZigBee路由器和ZigBee無線視頻終端組成[4]。由于CC2430集成了2.4 GHz DSSS射頻收發(fā)器和單片機控制器,,因此ZigBee設(shè)備可以使用CC2430單芯片來實現(xiàn),。ZigBee協(xié)調(diào)器用于組建最初的ZigBee網(wǎng)絡(luò),并為加入網(wǎng)絡(luò)的每個ZigBee路由器和ZigBee無線視頻終端分配16位網(wǎng)絡(luò)短地址,。ZigBee路由器在ZigBee網(wǎng)絡(luò)中扮演路由和中繼的角色,,為各ZigBee無線視頻終端傳輸數(shù)據(jù)并擴大無線數(shù)據(jù)傳輸?shù)姆秶igBee無線視頻終端根據(jù)分配得到的16位網(wǎng)絡(luò)短地址可以相互之間進行雙向無線數(shù)據(jù)通信[5],。i.MX27上采用Linux操作系統(tǒng),,在Linux下通過對采集的圖像進行硬件壓縮編碼,各ZigBee無線視頻終端之間的數(shù)據(jù)以H.264碼流的形式進行無線傳輸,。
2ZigBee無線視頻終端的硬件設(shè)計
考慮到H.264軟件編解碼需要消耗大量的CPU資源,,故本方案中選擇了具有H.264硬件編解碼器及ARM9 CPU核的Freescale微處理器i.MX27。ARM9 CPU核一方面負責將攝像頭采集到的YUV圖像數(shù)據(jù)送入H.264硬件編碼器,,并將硬件編碼器輸出的H.264碼流通過ZigBee微處理器CC2430無線發(fā)送出去,。另一方面通過CC2430接收H.264碼流并送入H.264硬件解碼器,然后將硬件解碼器輸出的YUV圖像數(shù)據(jù)顯示到液晶屏上,。ZigBee微處理器CC2430負責H.264碼流的收發(fā)工作,,并通過SPI接口與i.MX27進行通信,。 ZigBee無線視頻終端的硬件組成如圖2所示,?! ?/p>
為了實現(xiàn)圖像的采集,本方案采用含有OV9650芯片的CMOS攝像頭,,采集到的圖像通過i.MX27的CSI接口傳輸?shù)紿.264硬件編碼器中,。對于圖像的顯示,則選擇群創(chuàng)AT070TN83V.1(16∶9,,800×480)7英寸TFT液晶屏,。該屏支持18位數(shù)字RGB接口,格式為RGB666,,即每個像素由6 bit紅,、6 bit綠、6 bit藍構(gòu)成18 bit數(shù)據(jù),。該屏與i.MX27的LCDC控制器主要通過18根數(shù)據(jù)線(LD[17:0]),、幀同步(VSYNC)、行同步(HSYSNC),、時鐘(LSCLK)進行連接,。采用一片三星的K9F2G08R0A NAND Flash芯片(256 M×8 bit)來儲存系統(tǒng)的Bootloader(RedBoot),Linux內(nèi)核,文件系統(tǒng)和視頻程序,。由兩片Infineon Technologies的HYB18M512160AF7.5芯片(4 Bank×8 M×16 bit)構(gòu)成128 MB的DDR,,主要用于加載Linux操作系統(tǒng)和運行視頻編解碼程序。
設(shè)計一個10針的JTAG接口,,用來燒寫系統(tǒng)的Bootloader,、Linux內(nèi)核和文件系統(tǒng)。使用MAX3232構(gòu)成UART接口,,用來將調(diào)試信息返回到MiniCom上顯示,。因處理器內(nèi)核需要1.8 V、1.5 V電壓,,而存儲器和外部I/O需要3.3 V電壓,,故把整個系統(tǒng)的輸入電壓設(shè)為5 V,經(jīng)過DCDC轉(zhuǎn)換器可完成到3.3 V,、1.8 V,、1.5 V的電壓轉(zhuǎn)換。采用26 MHz的有源晶振,,晶振經(jīng)過i.MX27片內(nèi)的PLL電路倍頻后最高可達到400 MHz,。
ZigBee通信模塊以CHIPCON公司的CC2430微處理器為核心。將CC2430的SPI接口與i.MX27的SPI接口連接,,H.264碼流通過SPI接口進行傳輸,。
3ZigBee無線視頻終端的軟件設(shè)計
3.1圖像采集
CSI(CMOS Sensor Interface)是i.MX27中的CMOS圖像傳感器接口,。圖像的采集可通過CSI接口、圖像傳感器芯片OV9650和Linux下視頻設(shè)備的內(nèi)核驅(qū)動V4L2來實現(xiàn),,所以需要加載CSI驅(qū)動mx27_csi.ko,、ov9650驅(qū)動ov9650_cam.ko和V4L2驅(qū)動mx27_v4l2_capture.ko。這樣應(yīng)用程序在打開V4L2后,,就可以進行圖像數(shù)據(jù)采集了,。
3.2圖像顯示
LCDC(Liquid Crystal Display Controller)是i.MX27中的液晶顯示控制器??赏ㄟ^LCDC接口來控制圖像的顯示,,故需要加載LCDC驅(qū)動mxcfb_modedb.ko和mxcfb.ko及幀緩沖驅(qū)動。使用幀緩沖設(shè)備時,,可將顯示緩沖區(qū)直接映射到Linux用戶空間,。這樣在Linux用戶空間,應(yīng)用程序可按照預(yù)先設(shè)置好的R,、G,、B位數(shù)和偏移量,將圖像數(shù)據(jù)直接寫到經(jīng)過mmap()映射后的顯示緩沖區(qū),,進而實現(xiàn)圖像的顯示,。
3.3H.264編解碼
VPU(Video Processing Unit)是i.MX27中的視頻處理單元,主要用于H.264 BP,、MPEG-4 SP,、H.263 P3格式的硬件編解碼[6]。為了用戶能夠使用VPU的硬件編解碼器,,F(xiàn)reescale提供了一套Linux下的基于i.MX27 VPU的庫文件,。不論是編碼還是解碼,首先都必須調(diào)用vpu_Init()函數(shù)對VPU硬件進行初始化,。
對于H.264編碼,,需要執(zhí)行以下步驟:(1)調(diào)用vpu_EncOpen()函數(shù)對VPU編碼器初始化;(2)調(diào)用vpu_EncGetInitialInfo()函數(shù)獲取編碼初始化信息,;(3)調(diào)用vpu_EncRegisterFrameBuffer()函數(shù)注冊編碼幀緩沖,;(4)調(diào)用vpu_EncStartOneFrame()函數(shù),將編碼幀緩沖中的每一幀圖像數(shù)據(jù)送入VPU編碼器編碼,,并將編碼得到的H.264碼流存放到指定的位流緩沖區(qū)中,;(5)當需要結(jié)束編碼操作時,只需調(diào)用vpu_EncClose()函數(shù),。H.264編碼的執(zhí)行流程如圖3所示,。
對于H.264解碼,需要執(zhí)行以下步驟:(1)調(diào)用vpu_DecOpen()函數(shù)對VPU解碼器初始化;(2)調(diào)用vpu_DecGetInitialInfo()函數(shù)獲取解碼初始化信息,;(3)調(diào)用vpu_DecRegisterFrameBuffer()函數(shù)注冊解碼幀緩沖,;(4)為了獲取需解碼的H.264碼流,可調(diào)用vpu_DecGetBitstreamBuffer()函數(shù),;(5)調(diào)用vpu_DecStartOneFrame()函數(shù),,將H.264碼流送入VPU解碼器進行解碼,并將得到的圖像數(shù)據(jù)存放到解碼幀緩沖中,;(6)當需要結(jié)束解碼操作時,,只需調(diào)用vpu_DecClose()函數(shù)。H.264解碼的執(zhí)行流程如圖4所示,。
3.4H.264無線傳輸
要進行H.264碼流無線接收和發(fā)送,首先需要加載i.MX27的SPI接口驅(qū)動mx27_spi.ko,。通過SPI接口,,i.MX27可以將H.264碼流[7]傳輸?shù)紺C2430中并無線發(fā)送出去,也可以將CC2430無線接收的H.264碼流輸入到i.MX27中,。
由于ZigBee在2.4 GHz工作頻段和250 KB/s的傳輸速度下,物理層每次最多只能傳輸127 B的數(shù)據(jù)包,。除去物理層和MAC層的網(wǎng)絡(luò)包頭,ZigBee每次傳輸?shù)膶嶋H數(shù)據(jù)最多只有89 B[8],。由于ZigBee網(wǎng)絡(luò)層不能對H.264碼流進行分割和重組,,而傳輸?shù)腍.264碼流遠多于89 B,因此必須在ZigBee協(xié)議的應(yīng)用層將H.264碼流分割為等于或小于89 B的數(shù)據(jù)包進行傳輸,。在接收端需要對這些分解的數(shù)據(jù)包進行重組,,以形成正確的H.264碼流。由于在無線數(shù)據(jù)傳輸過程中被分割的數(shù)據(jù)包可能會丟失,,這將直接影響接收端的數(shù)據(jù)重組,,因此需要建立一個重傳機制來重傳數(shù)據(jù)傳輸過程中丟失的數(shù)據(jù)包。下面給出分組傳輸?shù)臄?shù)據(jù)包的格式,。
數(shù)據(jù)發(fā)送之前,,先執(zhí)行握手協(xié)議[9]。ZigBee發(fā)送端先發(fā)送請求包,,告訴ZigBee接收端即將發(fā)送的一幀H.264數(shù)據(jù)將被分割為幾個數(shù)據(jù)包以及第一個數(shù)據(jù)包的編號,。編號字段定義為4 B,能對4 GB的數(shù)據(jù)進行編號,,這樣可以保證當編號重復(fù)時,,舊編號的數(shù)據(jù)包早已在網(wǎng)絡(luò)中消失。
ZigBee接收端接收到請求包后,,將返回一個確認包,,表示ZigBee接收端接受ZigBee發(fā)送端的請求。ZigBee發(fā)送端接收到確認包后,同樣也返回一個確認包,,這樣握手協(xié)議完成,。接下來就是實際的數(shù)據(jù)通信了。握手協(xié)議的執(zhí)行流程如圖5所示,。
握手協(xié)議完成后,,ZigBee接收端將根據(jù)分割數(shù)據(jù)包的數(shù)量來分配接收緩沖區(qū)大小。將接收到的每個數(shù)據(jù)包按照數(shù)據(jù)包的編號依次存放到接收緩沖區(qū)對應(yīng)的位置處,,并將該位置的標志置1,,表示接收到了對應(yīng)的數(shù)據(jù)包。如果接收緩沖區(qū)中某些位置的標志為0并且對應(yīng)的定時器超時,,則表示該位置沒有接收到對應(yīng)的數(shù)據(jù)包,,數(shù)據(jù)包在無線傳輸?shù)倪^程中丟失。ZigBee接收端需要向ZigBee發(fā)送端發(fā)送一個重傳包,,請求將丟失的數(shù)據(jù)包重新傳遞過來,。本傳輸協(xié)議規(guī)定,若針對某位置連續(xù)3次發(fā)送重傳包后,,定時器連續(xù)4次超時,,則表示傳輸失敗。ZigBee接收端將發(fā)送重新開始包,,命令ZigBee發(fā)送端對下一幀H.264數(shù)據(jù)進行傳輸,。協(xié)議重傳的執(zhí)行流程如圖6所示。
4系統(tǒng)測試
為了測試ZigBee發(fā)送端是否將每一幀H.264數(shù)據(jù)成功地傳輸?shù)搅薢igBee接收端,,現(xiàn)在在ZigBee發(fā)送端和接收端之間依次放置1~4個ZigBee路由器,,對100幀H.264數(shù)據(jù)進行傳輸測試。無線傳輸H.264圖像的測試結(jié)果如表1所示,。
可見,,圖像從ZigBee發(fā)送端無線傳輸?shù)絑igBee接收端所經(jīng)過的路由器越少,傳輸?shù)某晒β试礁?。實際測試時,,每秒能傳輸約14幀H.264圖像數(shù)據(jù),基本上達到了無線視頻傳輸?shù)囊蟆?/p>
5結(jié)論
本文詳細地介紹了基于ZigBee和H.264的無線視頻傳輸系統(tǒng)的設(shè)計與實現(xiàn),,文中所設(shè)計的方案不僅能用于無線數(shù)字視頻傳輸,,也可以應(yīng)用到無線數(shù)字音頻傳輸,具有很強的通用性,。
參考文獻
?。?] BARONTI P, PILLAI P, CHOOK V. Wireless sensor networks: a survey on the state of the art and the 802.15.4 and ZigBee standards[D]. Pisa, Italy: University of Pisa, 2006.
[2] CHIPCON. ZigBee User Guide[Z]. 2006.
?。?] Joint Video Team. Draft ITUT recommendation and final draft international standard of joint video specification (ITUT Rec. H.264/ISO/IEC 1449610 AVC)[Z]. Joint Video team of ISO/IEC MPEG and ITUT VCEG,JVTG050, 2003.
?。?] 成銳,李靜,雷鳴. 基于ZigBee的無線傳感器網(wǎng)絡(luò)設(shè)計方案[J]. 電子元器件應(yīng)用,,2007,9(12):5458.
?。?] 王振玲.基于ZigBee無線傳感器網(wǎng)絡(luò)的監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D].新鄉(xiāng):河南師范大學,2012.
?。?] KANG H Y,JEONG K A,BAEETC J Y.MPEG4 AVC/H.264 decoder with scalablebus architecture and dual memory controller[C]. Proceedings of the 2004 International symposium on Circuits and Systems, ISCAS 2004, 2004,2(2):145148.
?。?] ITUT. Advanced video coding for generic audiovisual services[R]. ITU T H.264 Recommedation. March, 2005.
[8] 盛先剛. 基于RTP的H.264視頻傳輸系統(tǒng)研究[D]. 西安:西安電子科技大學,,2006.
?。?] 肖婭. H264視頻流實時傳輸系統(tǒng)的研究與應(yīng)用[D]. 北京:北京郵電大學,2008.