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