魏卓照++李昌立++籍新成
摘 要:為了更好地實現(xiàn)視頻采集,文中設(shè)計了一種視頻監(jiān)控系統(tǒng)。該系統(tǒng)以S5PV210開發(fā)板為硬件平臺,Linux操作系統(tǒng)為軟件平臺。利用USB攝像頭,通過對系統(tǒng)內(nèi)核的配置和底層設(shè)備驅(qū)動程序的編寫以及上層應(yīng)用程序的設(shè)計,構(gòu)建了基于mjpg-streamer的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)。根據(jù)內(nèi)核提供的Video4Linux2接口對視頻信息進行采集處理,搭建mjpg-streamer流媒體服務(wù)器完成視頻數(shù)據(jù)的采集、壓縮以及將網(wǎng)絡(luò)傳輸至客戶端。實驗結(jié)果表明,該系統(tǒng)圖像采集穩(wěn)定,經(jīng)過采集處理后的視頻效果和實時性都達到了監(jiān)控要求。
關(guān)鍵詞:視頻監(jiān)控;mjpg-streamer;攝像頭;Video4Linux2
中圖分類號:TP277 文獻標(biāo)識碼:A 文章編號:2095-1302(2016)02-00-03
0 引 言
視頻監(jiān)控系統(tǒng)被廣泛運用在道路安全監(jiān)控、樓宇監(jiān)控等日常生活中,給人們的生活帶來了便利,隨著人們安全意識的上升,普通居民住宅也大量采用了視頻監(jiān)控設(shè)備,使得視頻監(jiān)控設(shè)備的市場前景越來越被看好。所以,開發(fā)易于管理且功能強大的視頻監(jiān)控系統(tǒng)顯得尤為重要。而嵌入式開發(fā)作為日益成熟的開發(fā)平臺,其豐富的開發(fā)資源得到越來越普遍的應(yīng)用。近年來流行的以嵌入式設(shè)備為平臺的視頻監(jiān)控系統(tǒng)日益興起,相比于傳統(tǒng)視頻監(jiān)控系統(tǒng),它具有體積小、成本低、易于攜帶的特點。本文設(shè)計了一種基于S5PV210的視頻監(jiān)控系統(tǒng),該系統(tǒng)將嵌入式Linux技術(shù)、網(wǎng)絡(luò)數(shù)據(jù)傳輸技術(shù)、多線程通信技術(shù)等相結(jié)合,從而保證視頻監(jiān)控圖像的穩(wěn)定性和實時性。
1 系統(tǒng)總體架構(gòu)
本文設(shè)計的是以嵌入式技術(shù)為基礎(chǔ)的通用性強且高性能的嵌入式視頻監(jiān)控系統(tǒng)。該系統(tǒng)使用S5PV210處理器,采用ARM CortexTM-A8內(nèi)核處理器,主頻達到1 GHz,64/32位內(nèi)部總線結(jié)構(gòu),具有每秒運算2億條指令集的高性能運算能力?;贑ortexTM-A8內(nèi)核的處理器在進行人機交互設(shè)備管理、支持OS等方面擁有比較明顯的優(yōu)勢。本硬件平臺體系由256 MB的Nand Flash,64 MB的SDRAM,2 MB的Nor Flash,三個USB接口,一個DM9000網(wǎng)卡接口以及一個256真色彩的TFT(Thin Film Transistor)液晶屏組成。圖1所示為系統(tǒng)總體結(jié)構(gòu)框圖,它的工作原理是由Linux系統(tǒng)驅(qū)動攝像頭采集圖像信息,將采集的圖像信息通過USB傳送到硬件平臺S5PV210進行預(yù)處理,然后利用網(wǎng)絡(luò)通信形式將采集到的圖像傳到客戶端。
2 系統(tǒng)硬件環(huán)境
2.1 USB攝像頭硬件設(shè)計
本系統(tǒng)所采用的ZC301攝像頭其形式為UVC(USB Video Class),攝像頭驅(qū)動采用V4L2(Video 4 Linux 2)驅(qū)動。USB電路如圖2所示,它不僅具有傳輸速度快、穩(wěn)定等優(yōu)勢,而且USB主控制器集成在微處理器中,可以便捷的與USB接口的攝像頭相接。該ZC301芯片可以支持ARM9/11,且具有快速壓縮引擎,2至8倍壓縮比,MMX技術(shù)軟解壓等功能。
2.2 V4L2視頻采集程序設(shè)計
V4L2是Linux下進行視頻采集的一套規(guī)范形式,V4L2 API接口函數(shù)通過ioctl來操作圖像數(shù)據(jù)的采集,它的編程模式如圖3所示。
通過open()函數(shù)打開攝像頭,采用非阻塞模式,一旦攝像頭未采集到數(shù)據(jù),那么驅(qū)動程序依舊會把緩存的數(shù)據(jù)發(fā)送給應(yīng)用程序。應(yīng)用程序通過以下兩種方法獲得攝像頭采集的圖像數(shù)據(jù):(1)通過read()直接讀??;(2)利用mmap()函數(shù)進行內(nèi)存映射,而本文采用內(nèi)存映射方式。因為映射方式將申請到的內(nèi)核緩沖區(qū)地址通過mmap()函數(shù)映射到用戶空間,直接對內(nèi)核緩沖區(qū)的數(shù)據(jù)進行處理,相對于只讀式在內(nèi)核空間和用戶空間進行數(shù)據(jù)交換,該方法節(jié)省內(nèi)存空間,提高了效率。
圖3 V4L2編程模式示意圖
V4L2對設(shè)備文件的操作方法比較簡單直觀,ioctl(input/output control)是設(shè)備驅(qū)動程序中對設(shè)備的I/O通道進行管理的函數(shù),它的形式為int ioctl(int fd , ind cmd , ...) 。其中,fd是打開設(shè)備時調(diào)用open()函數(shù)返回的文件標(biāo)識符,cmd是應(yīng)用程序?qū)υO(shè)備的控制命令,而省略號則表示一些補充參數(shù)。應(yīng)用程序中主要用到的控制命令如表1列。
3 軟件環(huán)境搭建
3.1 USB攝像頭驅(qū)動設(shè)計
嵌入式開發(fā)板進行軟件開發(fā)時一般采用交叉編譯的方式。本文采用arm-linux-gcc-4.3.2交叉編譯環(huán)境,Bootloader為u-boot-1.1.6,內(nèi)核為linux-3.0.8。通過構(gòu)建相應(yīng)的根文件系統(tǒng),以達到使用內(nèi)核與存取文件的目的,USB攝像頭驅(qū)動部分在內(nèi)核移植部分完成。對驅(qū)動程序的編譯采用編譯成模塊的方式在運行時動態(tài)加載。它使用insmod工具將編譯的模塊直接插入至模塊,若出現(xiàn)了故障,則可以使用rmmod對內(nèi)核中加載的模塊卸載,不用再重啟內(nèi)核。
本設(shè)計采用的內(nèi)核版本為linux-3.0.8,對Linux內(nèi)核進行簡單配置即可實現(xiàn)對USB攝像頭驅(qū)動的功能。配置如下所示:
Device Drivers --->
<*>Multimedia devices --->
*** Multimedia core support ***
<*> Video For Linux
[*] Video capture adapters --->
[*] V4L USB devices --->
<*>USB Video Class (UVC)
[*] UVC input events device supportendprint
<*> GSPCA based webcams --->
<*> ZC3XX USB Camera Driver
然后,保存配置并退出。執(zhí)行指令make zImage,將內(nèi)核重新編譯,并在內(nèi)核目錄/arm/arch/boot/中生成zImage.bin內(nèi)核文件,通過SD燒寫方式、TFTP網(wǎng)絡(luò)傳輸方式或者是USB下載方式等,將內(nèi)核文件zImage.bin重新燒寫到開發(fā)板中。這樣當(dāng)重新插入USB攝像頭時,開發(fā)板便可以立即識別出該設(shè)備。
3.2 mjpg-streamer流媒體服務(wù)器的應(yīng)用
目前,幾種主流的視頻編碼技術(shù)主要是MPEG、MPEG-1/2、MPEG-4、H.264/AVC等。其中,H.264因為良好的壓縮性能和網(wǎng)絡(luò)親和性,它被廣泛應(yīng)用在視頻會議、視頻監(jiān)控等領(lǐng)域,其能夠在較低帶寬情況下提供高質(zhì)量的圖像傳輸,相比其它的編碼標(biāo)準(zhǔn)節(jié)約了很多傳輸碼流。但是,為了傳輸更加高質(zhì)量的圖像就對其編碼能力提出了更高的挑戰(zhàn)。而mjpg-streamer是一個輕量級的開源視頻服務(wù)器軟件,它主要應(yīng)用在TCP/IP協(xié)議的網(wǎng)絡(luò)中,通過mjpg-streamer流媒體服務(wù)器將攝像頭采集到的圖像以JPG格式傳輸?shù)介_發(fā)板上。它使用方便,解碼后生成的視頻圖像是RGB格式,避免了使用H.264編解碼技術(shù)所帶來的第三方瀏覽器不能打開視頻信息的情況。圖4所示為mjpg-streamer的工作流程框圖。
其中,Input_init用來完成攝像頭的初始化工作,它需要調(diào)用Init_videoIn函數(shù)和init_v4l2函數(shù)。Input_run通過調(diào)用Pthread_creat函數(shù)和Pthread_detach函數(shù)來創(chuàng)建不同的線程,再將創(chuàng)建的線程設(shè)置為分離狀態(tài)。Output_run主要使用Socket套接字,通過bind、listen、accept以及read/write等函數(shù)來完成網(wǎng)絡(luò)編程并實現(xiàn)圖像數(shù)據(jù)的網(wǎng)絡(luò)傳輸。
4 系統(tǒng)測試
4.1 jpeg庫的移植
jpeg庫的移植程序如下所示:
#tar xvf jpegsrc.v8b.tar.gz
#cd jpeg-8b
# ./configure --prefix=/opt/EmbedSky/jpeg --host=arm-linux
#make
#make install
最后,拷貝libjpeg.s0.8庫到開發(fā)板文件系統(tǒng)lib目錄下。
4.2 mjpg-streamer服務(wù)器的移植
mjpg-streamer服務(wù)器移植的步驟如下:
(1)首先下載mjpg-streamer源碼包,下載地址為http://sourceforge.net/p/mjpg-streamer/code/HEAD/tree/
(2)在Ubuntu中將下載的mjpg-streamer.tar.gz文件解壓縮:#tar zxvf mjpg-streamer.tar.gz -C /opt/EmbedSky/
(3)進入源碼目錄,并指定交叉編譯工具鏈:#cd /opt/EmbedSky/mjpg-streamer,修改Makefile文件的第16行CC=gcc為CC= /opt/EmbedSky/4.4.6/bin/arm-linux-gcc
(4)執(zhí)行#make編譯,并得到mjpg-streamer和一些input*.so或者output*.so組件。
(5)將得到的input*.so以及output*.so等文件燒寫到開發(fā)板的“/lib/webcam”目錄下,并將mjpg-streamer文件燒寫到開發(fā)板的“/bin”目錄下,接下來便可以對IP camera進行測試。在開發(fā)板的串口控制臺輸入指令:
#mjpg-streamer -i "/mjpeg/input_uvc.so -d /dev/video0" -o "/mjpeg/output_http.so"
然后在PC端打開客戶端程序viewer.exe,并輸入IP和端口號,點擊”connect”,即可看到攝像頭采集的圖像。圖5所示為視頻監(jiān)控系統(tǒng)的硬件連接圖。圖6所示為通過應(yīng)用程序查看視頻信息,其中,172.16.72.150是開發(fā)板的IP地址,8080是打開的端口號。
當(dāng)然,除了使用客戶端以外,也可以使用firefox瀏覽器查看視頻信息。要求開發(fā)板與主機同在一個網(wǎng)段內(nèi),并且可以相互ping通,然后在火狐瀏覽器中輸入IP地址172.16.72.150,便可以瀏覽攝像頭采集到的視頻圖像。圖7所示為視頻監(jiān)控系統(tǒng)在firefox上顯示。
5 結(jié) 語
本文設(shè)計了一種基于S5PV210的視頻監(jiān)控系統(tǒng),編寫了USB攝像頭驅(qū)動程序和流媒體服務(wù)器mjpg-streamer移植程序。通過測試,發(fā)現(xiàn)該系統(tǒng)使用便捷,圖像清晰,傳輸信號穩(wěn)定,并且系統(tǒng)開發(fā)過程結(jié)構(gòu)清晰,性能穩(wěn)定。
參考文獻
[1]盧靈,周賢軍.基于WiFi的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計[J].電視技術(shù),2013,37(1):157-160.
[2]曹名如,羅浩,徐小勇,等.基于ARM9的視頻監(jiān)控系統(tǒng)設(shè)計[J].計算機工程與設(shè)計,2015,36(4):925-929.
[3]王巖.視頻信號采集與網(wǎng)絡(luò)傳輸系統(tǒng)的研究與實現(xiàn)[D].大連:大連海事大學(xué),2011.
[4]劉良,賴萬昌,黎明.基于ARM9的GPRS圖像傳輸系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2010,31(7):1477-1480.
[5]彭浩,龔杰,秦建敏.基于S3C2440的嵌入式Linux根文件系統(tǒng)構(gòu)建[J].電子設(shè)計工程,2010(6):20-22.
[6] Soyak E,Tsaftaris S A,Katsaggelos A K. Low-complexity tracking-aware H.264 video compression for transportation sur-veillancd [J].IEEE Transactions on Circuits and Systems for Video Technology,2011,21(10):1378-1389.
[7]陳恒鑫,林威,張欽宇.基于Mjpg-streamer的移動視頻監(jiān)控系統(tǒng)的設(shè)計[J].計算機測量與技術(shù),2014,22(11):3597-3599.
[8]華春夢,劉沖.基于S3C2440嵌入式平臺的USB攝像頭視頻監(jiān)控[J].電腦開發(fā)與應(yīng)用,2015(1):46-49.endprint