摘要:該文以ARM9微處理器和嵌入式Linux系統(tǒng)作為開發(fā)平臺設(shè)計并實現(xiàn)了一個視頻監(jiān)控系統(tǒng),系統(tǒng)基于Brower/Server結(jié)構(gòu),使用Boa作為嵌入式Web服務(wù)器完成視頻數(shù)據(jù)在Internet上的傳輸。介紹了系統(tǒng)硬件平臺和軟件平臺的搭建過程,詳細討論了使用Video4Linux編程接口完成對視頻數(shù)據(jù)的采集過程,以及利用JPEG標(biāo)準(zhǔn)對視頻數(shù)據(jù)進行壓縮的方法。測試結(jié)果表明系統(tǒng)功能及性能基本滿足應(yīng)用要求。
關(guān)鍵詞:ARM;嵌入式Linux;瀏覽器/服務(wù)器;視頻監(jiān)控
中圖分類號:TP368 文獻標(biāo)識碼:A 文章編號:1009-3044(2013)04-0897-03
Design and Realization of an Embedded Video Monitoring System Based on Internet
LI Bo
(65021 Unit of the People's Liberation Army, Shenyang 110162, China)
Abstract: An embedded video monitoring system, which takes ARM9 microprocessor and embedded Linux operating system as development platform, is designed and realized in the paper. The system based on Brower/Server structure, using Boa as embedded Web server completes the transmission of video data over the Internet. The building process of system hardware and software platform is introduced. The process of video data collection using Video4Linux programming interface and the method of using JPEG to compress the video data are discussed in detail. The test results show that the function and performance of the system can meet application requirements.
Key words: ARM; embedded Linux; Brower/Server; video monitoring
1 概述
隨著Internet的廣泛普及,以及視頻壓縮編碼技術(shù)的提高,視頻監(jiān)控領(lǐng)域進入了高速發(fā)展的數(shù)字化的網(wǎng)絡(luò)時代。網(wǎng)絡(luò)視頻監(jiān)控已經(jīng)被廣泛應(yīng)用于交通、醫(yī)院、家居、銀行、視頻會議等領(lǐng)域。隨著嵌入式技術(shù)的不斷發(fā)展,出現(xiàn)了許多高性能的芯片,這為嵌入式視頻監(jiān)控系統(tǒng)的進一步發(fā)展提供了硬件基礎(chǔ)。嵌入式系統(tǒng)具有體積小、功耗低、性價比高、穩(wěn)定性好等優(yōu)點,因此基于嵌入式技術(shù)的遠程視頻監(jiān)控必將成為安防系統(tǒng)未來的發(fā)展方向[1]。
本文設(shè)計并實現(xiàn)了一個嵌入式遠程視頻監(jiān)控系統(tǒng),該系統(tǒng)采用嵌入式Linux系統(tǒng)和Samsung公司的ARM9-S3C2440AL微處理器作為軟、硬件平臺,使用中星微公司的ZC301的USB攝像頭作為視頻信號采集設(shè)備。系統(tǒng)采用瀏覽器/服務(wù)器(Browser/Server,B/S)結(jié)構(gòu),可通過Internet實現(xiàn)遠程視頻監(jiān)控。
2 系統(tǒng)硬件平臺
本系統(tǒng)由視頻采集、視頻壓縮和視頻傳輸三個模塊組成。系統(tǒng)硬件平臺主要包括:處理器模塊、USB接口攝像頭、JTAG調(diào)試接口、以太網(wǎng)接口、串口接口、存儲器系統(tǒng)、顯示模塊、電源及復(fù)位電路等。系統(tǒng)硬件平臺結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)
Samsung S3C2440AL[2]處理器主頻400MHz,最高可達到533MHz。根據(jù)其內(nèi)部電路工作方式及最高頻率,選擇12MHz的無源晶振。通過JTAG接口,可以進行軟件仿真和單步調(diào)試以及下載u-boot。系統(tǒng)中板載64MB SDRAM,32位數(shù)據(jù)總線,SDRAM時鐘頻率可達100MHz。S3C2440AL通用異步接收器和發(fā)送器(UART)提供三個獨立的異步串行I/O接口,每個接口都可以在中斷或DMA模式下操作。
本系統(tǒng)采用ZC301攝像頭,在基于S3C2440AL處理器的開發(fā)板上加載USB及Video4Linux驅(qū)動,并在此基礎(chǔ)上完成攝像頭的驅(qū)動,實現(xiàn)視頻圖像的采集,并采用JPEG標(biāo)準(zhǔn)對圖像進行壓縮。
3 系統(tǒng)軟件平臺
3.1 搭建交叉編譯環(huán)境
本系統(tǒng)編譯環(huán)境采用交叉編譯調(diào)試的方式,將一臺PC機作為宿主機,在宿主機上安裝Linux系統(tǒng)和針對開發(fā)板處理器S3C2440的arm-linux-gcc交叉編譯器、相關(guān)的開發(fā)和調(diào)試工具。首先建立交叉編譯環(huán)境,編譯器使用天嵌公司制作的EABI-4.3.3。采用德國DEXN小組開發(fā)的u-boot作為Bootloader實現(xiàn)系統(tǒng)的引導(dǎo)加載,然后制作Yaffs文件系統(tǒng)。
3.2 Linux內(nèi)核移植
Linux具有內(nèi)核小、源碼開放,提供網(wǎng)絡(luò)支持等優(yōu)點。但本系統(tǒng)的硬件資源相對有限,不能直接把Linux作為本硬件平臺上的操作系統(tǒng),需要針對本應(yīng)用對Linux內(nèi)核進行配置和裁減,使整個系統(tǒng)能夠存放到容量較小的Flash中。
系統(tǒng)選取Linux-2.6.30內(nèi)核,全面支持S3C2440AL處理器。移植工作包括:內(nèi)核配置、對相應(yīng)的體系結(jié)構(gòu)代碼進行修改、加載文件系統(tǒng)、驅(qū)動移植(USB設(shè)備驅(qū)動移植,LCD驅(qū)動移植等)。將上述內(nèi)容編譯出鏡像燒寫到系統(tǒng)板的flash中,嵌入式Linux開發(fā)平臺即搭建完成。
3.3 攝像頭視頻驅(qū)動加載
ZC301攝像頭要正常工作必須有驅(qū)動程序的支持。本系統(tǒng)采用了Linux-2.6.30內(nèi)核自帶的USB攝像頭驅(qū)動。直接修改配置菜單中的配置選項:
1) 選擇Device下的Multimedia Devices。
2) 選擇Video capture adapters下的 V4L USB devices。
3) 選擇<*> ZC3XX USB Camera Driver。
4) 選擇<*> USB ZC0301[P] Image Processor and Control Chip support。
操作完成后,攝像頭就能正常工作了。
4 視頻監(jiān)控軟件
4.1 基于V4L的視頻數(shù)據(jù)采集
Video4Linux(簡稱V4L)是Linux的視頻設(shè)備的內(nèi)核驅(qū)動,是為各種TV卡、USB攝像頭、視頻捕捉卡等設(shè)備提供的統(tǒng)一編程接口。Linux下的視頻采集設(shè)備的正常使用依賴于對Video4Linux標(biāo)準(zhǔn)的支持[3]。對于USB口攝像頭, 其驅(qū)動程序需要提供基本的I/O操作接口函數(shù),如:open()、read()、write()、close()的實現(xiàn)、內(nèi)存映射功能以及對I/O通道的控制接口函數(shù)ioctl()的實現(xiàn)等。
V4L中有一個重要的數(shù)據(jù)結(jié)構(gòu)提供了視頻設(shè)備的信息,其結(jié)構(gòu)如下:
typedef struct v4l_struct{
int fd;
struct video_capability capability;
struct video_channel channel[4];
struct video_picture picture;
struct video_window window;
struct video_capture capture;
struct video_buffer buffer;
struct video_mmap mmap;
struct video_mbuf mbuf;
unsigned char*map;
int frame;
int framestar[2];
}v4l_device;
其中:video_capability包含攝像頭的基本信息;video_picture包含設(shè)備采集圖像的各種屬性;video_mmap用于內(nèi)存映射;video_mbuf利用mmap進行映射的幀信息,實際上是輸入到攝像頭存儲緩沖中的幀信息。
基于V4L的視頻數(shù)據(jù)的采集過程如下:
1) 打開對應(yīng)的圖像采集外設(shè)。
2) 查詢設(shè)備驅(qū)動功能和攝像頭支持的功能。
3) 設(shè)置當(dāng)前驅(qū)動的視頻圖像幀格式。
4) 設(shè)置視頻采集控制參數(shù)。
5) 申請內(nèi)存用于存放視頻圖像數(shù)據(jù)。
6) 通過函數(shù)ioctl調(diào)用VIDIOC_ QUERYBUF命令獲取這些內(nèi)存的地址,然后使用mmap函數(shù)轉(zhuǎn)換成應(yīng)用程序中的絕對地址,最后函數(shù)ioctl調(diào)用VIDIOC_QBUF命令把這段內(nèi)存放入內(nèi)存隊列。
7) 開始捕捉圖像數(shù)據(jù)。
8) 出隊列取得已采集數(shù)據(jù)的幀緩沖,取得原始采集數(shù)據(jù)。
9) 將緩沖重新入隊列尾,實現(xiàn)循環(huán)采集。
10) 停止視頻圖像數(shù)據(jù)的采集。
4.2 視頻數(shù)據(jù)的壓縮
本系統(tǒng)采集的視頻數(shù)據(jù)為RGB格式,一張640 x 480像素的24位圖像,占據(jù)的存儲大小為640*480*24/8=900KB,若以每秒25幀圖像計算,則一秒鐘視頻所占據(jù)的存儲空間是900*25=22MB。如此大的數(shù)據(jù)量對于資源有限的嵌入式系統(tǒng)和帶寬有限的網(wǎng)絡(luò)都難以保證其傳輸?shù)膶崟r性。
JPEG是一種非常方便的壓縮格式,其算法復(fù)雜度較低,對處理器芯片性能要求不高,允許用不同的壓縮比例(通常在10:1到40:1之間)對文件進行壓縮 [4],非常適合應(yīng)用在嵌入式系統(tǒng)中。而且,瀏覽器可方便的解壓JPEG格式的圖片文件。
本系統(tǒng)在服務(wù)器端采用JPEG標(biāo)準(zhǔn)壓縮采集到的視頻數(shù)據(jù),選用20: 1的壓縮比率;在客戶端瀏覽器解壓并顯示視頻圖像。
linux操作系統(tǒng)中包含一個Libjpeg庫,通過其中的庫函數(shù)可以把視頻信號由RGB轉(zhuǎn)換為JPEG格式,實現(xiàn)對視頻數(shù)據(jù)的編碼。Libjpeg壓縮視頻圖像的過程如下:
1) 使用jpeg_create_compress()函數(shù)申請并初始化jpeg壓縮對象,同時指定錯誤處理器。
2) 使用dest_buffer(&cfo, buffer, size, &written)函數(shù)指定內(nèi)存來存儲壓縮后的視頻數(shù)據(jù)。
3) 設(shè)置壓縮視頻圖像數(shù)據(jù)的參數(shù)。然后調(diào)用jpeg_set_defaults()函數(shù),Libjpeg庫將按預(yù)先設(shè)置好的參數(shù)壓縮視頻數(shù)據(jù)。
4) 使用jpeg_start_compress()函數(shù)壓縮圖像。使用jpeg_finish_compress()函數(shù)結(jié)束一個壓縮過程,并將視頻圖像放在指定內(nèi)存里。
5) 使用jpeg_destroy_compress()函數(shù)釋放所申請的內(nèi)存。
4.3 視頻數(shù)據(jù)的網(wǎng)絡(luò)傳輸
本系統(tǒng)采用B/S方式完成視頻監(jiān)控,其實現(xiàn)原理是在開發(fā)板上實現(xiàn)嵌入式Web服務(wù)器的功能,攝像頭采集的視頻信號數(shù)字化后經(jīng)壓縮處理,通過內(nèi)部總線傳送到內(nèi)置的Web 服務(wù)器,并通過網(wǎng)絡(luò)發(fā)送,客戶端用戶可以直接通過瀏覽器觀看采集到的視頻圖像。
本系統(tǒng)選用嵌入式Linux系統(tǒng)下的Boa[5]作為嵌入式Web服務(wù)器,完成用戶和嵌入式設(shè)備之間的信息交互,同時把響應(yīng)信息通過Internet傳送到監(jiān)控主機。
系統(tǒng)的視頻監(jiān)控頁面通過在HTML中嵌入Java Applet來實現(xiàn),并由支持Java的瀏覽器解釋并執(zhí)行。在Web頁面中使用Java Applet能夠很大地提高頁面的交互能力和動態(tài)交互能力。
將設(shè)計好的用于視頻監(jiān)控的HTML頁面取名為webcam.html,引導(dǎo)開發(fā)板使用NFS啟動,啟動成功后運行Boa服務(wù)器,在客戶端瀏覽器中輸入Boa服務(wù)器的IP地址“http://10.16.12.157/webcam.html”,就能看攝像頭采集到的比較清晰、流暢的視頻圖像,如圖2所示。
圖2 視頻監(jiān)控圖像
為測試該視頻監(jiān)控系統(tǒng)能否達到應(yīng)用要求,從服務(wù)器端發(fā)送5000幀圖像到客戶端,然后對客戶端接收到的幀數(shù)、能夠顯示出的幀數(shù),以及消耗的時間進行統(tǒng)計,并計算出每秒顯示的幀數(shù),測試結(jié)果如表1所示。
從表1的數(shù)據(jù)可以看出,對于分辨率為640×480的視頻,客戶端能近似以25幀/S顯示,效果比較流暢,而且丟幀率也很低,僅為0.3%左右,測試結(jié)果達到預(yù)期目標(biāo)。
5 結(jié)論
本文基于ARM處理器和嵌入式Linux系統(tǒng)設(shè)計并實現(xiàn)了一個可應(yīng)用在Internet上的視頻監(jiān)控系統(tǒng),該系統(tǒng)采用B/S結(jié)構(gòu),在嵌入式Web服務(wù)器端利用Video4Linux完成對攝像頭視頻數(shù)據(jù)的采集功能,采集到的視頻數(shù)據(jù)通過JPEG標(biāo)準(zhǔn)壓縮進行編碼,再通過Internet實時傳輸??蛻舳藶g覽器對接收到的視頻數(shù)據(jù)進行實時解碼和播放。系統(tǒng)具有體積小、功耗低、穩(wěn)定可靠、安裝簡便等特點。通過對系統(tǒng)功能及性能的測試與分析,實驗結(jié)果基本滿足系統(tǒng)的設(shè)計要求。
參考文獻:
[1] 張莉,柳松,張秀玲.基于Web的嵌入式視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].微型機與應(yīng)用,2012,31 (18):82-84.
[2] Samsung S3C2440說明書[EB/OL].[2012-09-20].http://www.ec21.com/ks-samsung-s3c2440/.
[3] 蔡婧璇,潘銀松.基于嵌入式Video4Linux的USB視頻信號采集[J].電子設(shè)計應(yīng)用,2009(2):40-43.
[4] 王國慶,朱峰,楊華冰.基于ARM的遠程監(jiān)控系統(tǒng)的設(shè)計及實現(xiàn)[J].電腦知識與技術(shù),2011, 7(23):5771-5775.
[5] 王莉,周偉.嵌入式Web服務(wù)器的設(shè)計與實現(xiàn)[J].計算機工程與應(yīng)用,2012,46(14):90-93.