基于Intel PXA255平臺的網(wǎng)絡攝像機設計
摘要:隨著網(wǎng)絡和多媒體技術的廣泛應用,數(shù)字網(wǎng)絡視頻得到了飛速發(fā)展。尤其在監(jiān)控領域,將傳統(tǒng)的模擬視頻監(jiān)控信號轉(zhuǎn)換為數(shù)字視頻信號,并且利用現(xiàn)有IP網(wǎng)絡設計一個不受距離限制的廉價通用網(wǎng)絡視頻監(jiān)控設備成為了新的熱點。本文根據(jù)這方面的應用需求提出一種設計方案。本方案的實現(xiàn)平臺是基于Intel PXA255的嵌入式硬件平臺以及基于嵌入式Linux的軟件平臺,采用先進的MPEG-4編碼標準。最終實現(xiàn)一個具有實時視頻采集壓縮及傳輸功能的可以直接接入以太網(wǎng)的網(wǎng)絡攝像機。
關鍵詞:PXA255 Linux MPEG-4 網(wǎng)絡攝像機 流媒體技術
1 系統(tǒng)概述
本方案設計的是基于IP網(wǎng)絡的實時視頻采集、處理及傳輸系統(tǒng)。整個系統(tǒng)在嵌入式軟硬件構架上實現(xiàn),無需其它設備協(xié)助就能獨立完成通用目的視頻應用,比如視頻監(jiān)控和網(wǎng)絡視頻會議。
1.1 硬件系統(tǒng)概述
整個系統(tǒng)除攝像頭部分外都是在Intel PXA255評估平臺Sitsang(簡稱Sitsang板)上面實現(xiàn)的。Sitsang板以PXA255為核心,配備了大量的硬件資源,其中通信接口中的以太網(wǎng)控制器和USB Host控制器在本系統(tǒng)中尤為重要。Sitsang板采用Standard Microsystems LAN91C96以太網(wǎng)控制器,它通過U52與網(wǎng)絡相連,支持IEEE802.3的10Mb/s模式。Sitsang板采用Philips ISP1161作為USB Host控制器,使用USB Host接口可以使Sitsang板與視頻采集攝像頭相連。以太網(wǎng)控制器和USB Host控制器通過數(shù)據(jù)總線收發(fā)器(74LVCH32245)以及地址、數(shù)據(jù)總線驅(qū)動器(74LVCH32244)與PXA255相接。整個硬件系統(tǒng)如圖1所示。
1.2 軟件系統(tǒng)概述
整個系統(tǒng)軟件是在嵌入式Linux基礎之上構建的。Sitsang板使用的嵌入工Linux內(nèi)核是在linux-2.4.19內(nèi)核上打上patch-2.4.19-sitsang2這個補丁后編譯而成。Sitsang板使用的文件系統(tǒng)是針對Flash的無緩沖機制的jffs2文件系統(tǒng),文件系統(tǒng)中包含應用程序、模塊、配置文件、圖形界面和庫等。Sitsang板使用的是基于Qt/Embedded的圖形界面系統(tǒng)。視頻信號的采集、壓縮和傳輸是建立在圖形界面和嵌入式Linux內(nèi)核之上的。整個軟件系統(tǒng)如圖2所示。
2 系統(tǒng)設計
系統(tǒng)的設計目標是設計一個工作在Sitsang/Intel PXA255和嵌和試Linux平臺上,內(nèi)置視頻Web服務器,采用MPEG-4編碼標準,支持相關網(wǎng)絡傳輸協(xié)議的網(wǎng)絡攝像要。系統(tǒng)的設計可以被分為以下幾個大部分:
*嵌入式Linux內(nèi)核的移植和編譯,文件系統(tǒng)和圖形界面系統(tǒng)的安裝;
*基于嵌入式Linux視頻采集模塊的設計;
*視頻圖像壓縮模塊的設計;
*基于嵌入式Linux的網(wǎng)絡視頻流服務模塊的設計。
2.1 Linux內(nèi)核、圖形界面系統(tǒng)及文件系統(tǒng)的安裝
2.1.1 嵌入式Linux內(nèi)核的定制
工作在Sitsang板上的嵌入式Linux內(nèi)核的定制步驟與其它嵌入式平臺的開發(fā)步驟相似,具有一定的通用性,所以在這里將不再詳述,但是要注意兩點。
①在解壓縮Linux內(nèi)核源代碼后,假設源代碼是linux-2.4.19.sar.gz,需要為源代碼打上Sitsang板的支持補?。?gzip-dc patch-2.4.19-sitsang2.gz|patch-p0。
②在使用make menuconfig定制內(nèi)核時,注意要讓內(nèi)核支持USB接口的攝像頭,具體步驟為:在制定菜單中選擇Multimedia devices→Video for Linux,這使得內(nèi)核被配置了Video4Linux,為視頻采集設備提供了編程接口;在菜單中選擇USB Support→USB Multimedia devices→USB OV511 Camera Support,這使得在內(nèi)核中加入了對4采用OV511接口芯片的USB數(shù)字攝像頭的驅(qū)動支持。
2.1.2 圖形界面系統(tǒng)的編譯與安裝
Sitsang板使用的是基于Qt/Embedded的圖形界面系統(tǒng),Qt/Embedded的編譯主要分為三個步驟:
①編譯Qt/X11,Qt/X11是運行在IBM兼容PC中標準Linux這上的,這主要為Qt/Embedded及其應用程序提供圖形編譯環(huán)境及仿真運行環(huán)境;
②編譯Qt/Embedded,Qt/Embedded為在嵌入式Linux平臺上運行的圖形界面系統(tǒng)及應用程序提供一系列的函數(shù)庫;
③編譯Qtopia,通過使用Qt/X11提供的編譯工具以及Qt/Embedded提供的函數(shù)庫,編譯出最終基于嵌入式Linux平臺的圖形界面系統(tǒng)及該環(huán)境下的應用程序。
2.1.3 文件系統(tǒng)的安裝
在嵌入式平臺上用作非易失存儲的設備一般是Flash,因而在嵌入式平臺上除了廣泛使用的ext2文件系統(tǒng)外,還經(jīng)常使用jffs2文件系統(tǒng)。作為日志型文件系統(tǒng),jffs2直接寫到非易失存儲器上,而不使用如ext2的緩沖機制,這樣在隨時斷電的情況下夠保護用戶的資料。直接使用mkfs.jffs2生成Sitsang板上的jffs2文件系統(tǒng)。
2.2 基于嵌入式Linux視頻采集模塊的設計
在嵌入式Linux的內(nèi)核定制和編譯階段,已經(jīng)加入了對Video4Linux模塊以及OV511設備的支持,所以運行在Linux下的視頻圖像采集程序,可以通過Video4Linux模塊提供的編譯接口(API)從OV511設備中獲取圖像幀。
①加載USB及OV511設備驅(qū)動模塊,同時加載Video4Linux模塊。分別使用命令:modprobe usbcor、modprobe usb-uhci、modprobe vodeodev和modprobe ov511。加載后將生成視頻設備文件/dev/video0,為了和Video4Linux模塊相協(xié)調(diào),使用ln-s/dev/video0/dev/video為Video4Linux模塊的默認視頻設備voideo與物理視頻設備video0建立連接。
②使用Video4Linux模塊提供的API進行視頻采集程序的設計。Video4Linux模塊的視頻采集接口設備為/dev/video,采集程序打開此接口設備并掃描 它以尋找自己所需要的數(shù)據(jù)。
這里將簡要介紹一下Video4Linux模塊提供的主要API函數(shù):VIDICGCAP函數(shù)以數(shù)據(jù)結構video_capability返回視頻采集設備的性能參數(shù);VIDIOCSFBUF函數(shù)使用數(shù)據(jù)結構video_buffer設備采集設備的幀緩存參數(shù),如果設備不支持幀緩存則此調(diào)用無效;VIDIOCGWIN函數(shù)使用數(shù)據(jù)結構video_window來設備采集窗口參數(shù),使用參數(shù)1調(diào)用VIDIOCCAPTURE則開始視頻信號采集,使用參數(shù)0則結束采集;VDIOCGCHAN函數(shù)用來查詢不同的采集通道(包括音頻信道),使用數(shù)據(jù)結構video_channel返回通道屬性;VIDIOCSPICT函數(shù)使用數(shù)據(jù)結構video_picture來獲取和設置采集圖像幀的屬性,比較重要的是圖像幀的調(diào)色板參數(shù);read函數(shù)讀取采集通道中效的下一幀圖像,所讀取的圖像格式和尺寸由前面介紹的VIDIOCSPICT函數(shù)和VIDIOCGWIN函數(shù)決定,這些API函數(shù)以及數(shù)據(jù)結構定義在頭文件linux/videodev.h>中。
整個視頻采集模塊的工作流程見圖3。
2.3 視頻圖像壓縮模塊的設計
由視頻采集模塊獲取的視頻圖像需要在以太網(wǎng)上傳輸,為了提高傳輸效率從而提高視頻圖像質(zhì)量,則需要將原始的視頻圖像進行壓縮編碼。本系統(tǒng)采用先進的MPEG-4標準對視頻圖像進行壓縮編碼,在幾種開放源代碼的MPEG-4編碼軟件中,選擇xvidcore作為本系統(tǒng)中視頻圖像壓縮模塊中的核心算法。xvid是一個高效的而且具有可移植性的編碼軟件,目前版本為xvidcore-1.0.1。xvid支持Simple Profile和Advanced Profile,支持I/PFrames、B-Frames、Interlacing和GMC,以鉆石和方塊模式來進行PMVFast和EPZS運行估計,是目前比較流行的MPEG-4編碼軟件。
對xvidcore-1.0.1進行交叉編譯比較簡單,有以下主要步驟。
①解壓縮xvidcore源代碼:tar-zxvf xvidcore-1.0.1.tar;
②設置環(huán)境變量:export xvidcore="the path of xvidcore";cd $xvidcore/build/generic;
③生成makefile:./configure-host=localhostbuild=arm-linux-gcc;
④編譯源代碼:make;make install;
⑤將交叉編譯生成的庫文件libxvidcore.so.*拷貝到交叉編譯器工作目錄的lib子目錄中,該庫文件為系統(tǒng)的其它模塊提供了編程接口。
2.4 基于嵌入式Linux的網(wǎng)絡視頻流服務模塊設計
2.4.1 Linux中流數(shù)據(jù)的操作
在本設計中,數(shù)據(jù)在整個系統(tǒng)中是以流數(shù)據(jù)的形式存在的,Linux內(nèi)核為流數(shù)據(jù)提供了一個標準的編程接口,這種接口為數(shù)據(jù)從外部設備經(jīng)內(nèi)核到達用戶進程提供了一個全雙工通道。在這個通道中,數(shù)據(jù)的處理模塊是作為可選的中間件由用戶動態(tài)加載的,上面設計的視頻壓縮模塊就是這樣的一個中間件。
2.4.2 ASF流式文件格式
本系統(tǒng)主要是用于實時視頻應用,所以需要系統(tǒng)提供對流式文件格式的支持,這樣在接收方利用標準的流視頻播放軟件,如MMedia Player就可以觀看實時傳輸?shù)囊曨l.在本系統(tǒng)中采用了開放的ASF流格式.壓縮后的視頻數(shù)據(jù)在傳輸前需要對其進行ASF編碼.ASF文件的基本組織單元為ASF對象,每個對象由三個域組成:對象標識符域、對象大小域和對象數(shù)據(jù)域。ASF文件的高層邏輯結構也包含三部分:頭對象、數(shù)據(jù)對象和索引對象。其中,頭對象包含了許多全局信息,數(shù)據(jù)對象則包含了所有待播放的數(shù)據(jù),頭對象必須在數(shù)據(jù)對象之間被接收方接收并解釋。
流視頻協(xié)議是為了在客戶機和視頻服務器之間進行通信而設計和標準化的。根據(jù)它們的功能,與網(wǎng)絡上流視頻相關的協(xié)議分為三類。
*網(wǎng)絡層協(xié)議:網(wǎng)絡層協(xié)議提供了基本的網(wǎng)絡服務支持。IP就是網(wǎng)絡上流視頻使用的網(wǎng)絡協(xié)議。
*傳輸協(xié)議:傳輸協(xié)議為流服務提供端對端的網(wǎng)絡傳輸功能。TCP、UDP、RTP和RTCP就是網(wǎng)絡上流視頻使用的傳輸協(xié)議。
*話路控制協(xié)議:話路控制協(xié)議定義消息和程序。RTSP就是一種話路控制協(xié)議。
為流視頻設計的協(xié)議棧如圖4所示。在發(fā)送方的數(shù)據(jù)面,壓縮且經(jīng)過ASF編碼的視頻數(shù)據(jù)被讀出并在RTP/RTCP/RTSP層上打包,以提供定時和同步信息以及包的序列號。然后把這些打包的RTP數(shù)據(jù)流發(fā)送到UDP/TCP層和IP層,得到的IP包在網(wǎng)絡上傳輸。在接收方則按照相反的方向處理。在控制面,RTCP包和RTSP包在UDP/TCP層上復用,并且被送到IP層,以便通過網(wǎng)絡傳輸。
3 小結
本文提出了一種基于Intel PXA255嵌入式微處理器和嵌入式Linux網(wǎng)絡攝像機的設計方案,系統(tǒng)采用先進的MPEG-4編碼標準,得到了較高的壓縮比。經(jīng)測試、在50Kbps~100Kbps的帶寬下,對CIF(352288,30fps)格式的視頻有較好的表現(xiàn)能力。滿足了在目前寬帶環(huán)境中的網(wǎng)絡視頻會議以及視頻監(jiān)控的要求,其應用十分廣泛。
評論