0 引言
通信網(wǎng)絡(luò)已經(jīng)普及到人類生活的各個(gè)方面,布控區(qū)域廣闊的網(wǎng)絡(luò)視頻采集系統(tǒng)也在迅速的發(fā)展,,嵌入式視頻采集系統(tǒng)的服務(wù)器直接連入已經(jīng)建成的網(wǎng)絡(luò),,既沒(méi)有線纜長(zhǎng)度的限制,也沒(méi)有信號(hào)衰減的限制,,通過(guò)沒(méi)有距離概念的網(wǎng)絡(luò),,徹底拋棄了地域的限制,。系統(tǒng)具有幾乎無(wú)限的無(wú)縫擴(kuò)展能力,所有設(shè)備都以IP地址劃分,,增加設(shè)備只是意味著IP地址的增加,,可組成非常復(fù)雜的視頻采集系統(tǒng),服務(wù)器輸出的視頻數(shù)據(jù)已完成模擬到數(shù)字的轉(zhuǎn)換并壓縮,,采用TCP/IP協(xié)議在網(wǎng)絡(luò)上傳輸,,支持跨網(wǎng)關(guān)、跨路由器的遠(yuǎn)程視頻信息傳輸,。
本文根據(jù)網(wǎng)絡(luò)視頻采集的需要,,將網(wǎng)絡(luò)傳輸與視頻采集相結(jié)合,設(shè)計(jì)了以S3C2440為核心的USB攝像頭視頻采集和嵌入式Linux系統(tǒng)下的視頻服務(wù)器,,從而實(shí)現(xiàn)了遠(yuǎn)程網(wǎng)絡(luò)視頻信息采集,。
1 系統(tǒng)總體設(shè)計(jì)
該系統(tǒng)是以ARM9處理器S3C2440為核心,在嵌入式Linux系統(tǒng)平臺(tái)下,,通過(guò)USB攝像頭采集視頻信息,,然后對(duì)所得到的視頻數(shù)據(jù)通過(guò)內(nèi)部總線送到視頻服務(wù)器MJPG-streamer上,視頻服務(wù)器經(jīng)過(guò)對(duì)圖像壓縮處理,,經(jīng)過(guò)以太網(wǎng)傳輸出去,,遠(yuǎn)端客戶機(jī)通過(guò)瀏覽器或者專用軟件訪問(wèn)視頻服務(wù)器,即可瀏覽現(xiàn)場(chǎng)信息,,從而實(shí)現(xiàn)網(wǎng)絡(luò)視頻采集,。系統(tǒng)總體如圖1所示。
2 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)的硬件框圖如圖2所示,。
系統(tǒng)處理器采用高性能ARM9處理器S3C2440,,S3C2440是基于ARM920T核心的RISC處理器,主頻為400 MHz,,實(shí)現(xiàn)了MMU,,具有AMBA總線和哈佛結(jié)構(gòu)高速緩沖體系結(jié)構(gòu),有獨(dú)立的16 KB的指令緩存和16 KB的數(shù)據(jù)緩存,。主要應(yīng)用于高性能,,低價(jià)格,低功耗的嵌入式設(shè)備和手持設(shè)備,。處理器內(nèi)部集成了完備的硬件資源,,外部存儲(chǔ)控制器,4通道DMA,,3通道的UART,,2通道SPI,2通道USB主機(jī)和1通道USB設(shè)備,4通道PWM定時(shí)器和內(nèi)部看門(mén)狗定時(shí)器,,130個(gè)GPIO等,。
NAND FLASH采用K9F2G08,該存儲(chǔ)芯片容量大,,高達(dá)256 MB,,改寫(xiě)速度非常快,,易于使用,,具有可靠的耐用性,適合用于大量數(shù)據(jù)存儲(chǔ),,該FLASH以512 B為塊進(jìn)行讀寫(xiě)操作,,通過(guò)輸入輸出接口傳送地址和命令,傳遞專門(mén)的數(shù)據(jù)接口與CPU相連,,數(shù)據(jù)總線為8 b,,寫(xiě)入操作必須在空白區(qū)域進(jìn)行,所以在改寫(xiě)數(shù)據(jù)時(shí)要先進(jìn)行擦除,,然后再寫(xiě)入,。
NAND FLAsH在本系統(tǒng)中用來(lái)存放bootloader引導(dǎo)代碼,Linux內(nèi)核代碼以及Yaffs文件系統(tǒng),。SDRAM為同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,,類似于PC機(jī)的內(nèi)存,在系統(tǒng)啟動(dòng)時(shí),,先將內(nèi)核代碼從FLASH復(fù)制到SDRAM中,,用來(lái)程序的讀取,存儲(chǔ),,執(zhí)行,,從而提高CPU讀取和寫(xiě)入數(shù)據(jù)的速度。本采用2片32 MB的HY57V作為系統(tǒng)內(nèi)存,,把他們并聯(lián)起來(lái)形成32位的數(shù)據(jù)總線,,提高CPU的訪問(wèn)速度,增加運(yùn)行Linux系統(tǒng)的流暢性,。由于SDRAM掉電不能保存數(shù)據(jù),,所以要不斷的進(jìn)行動(dòng)態(tài)刷新來(lái)保存數(shù)據(jù),使用之前要進(jìn)行初始化,。
目前最流行的以太網(wǎng)控制器是DAVICOM公司的DM9000網(wǎng)卡芯片,該芯片自適應(yīng)10 Mb/s和100 Mb/s的網(wǎng)絡(luò),,處理器通過(guò)GPIO與網(wǎng)卡相連,,支持3.3 V接口電壓,32位接口存儲(chǔ)器可以方便直接與S3C2440相連,,在連接RJ-45接口,,即可實(shí)現(xiàn)以太網(wǎng)物理層和數(shù)據(jù)鏈路層的連接,。設(shè)備驅(qū)動(dòng)程序在Linux操作系統(tǒng)下可以方便的移植,故選擇此網(wǎng)卡芯片作為以太網(wǎng)控制器,。攝像頭采用市場(chǎng)普通USB攝像頭,,即插即用,處理器通過(guò)USB控制器控制攝像頭,。
3 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)軟件可分為Bootloader,,Linux內(nèi)核,Yaffs文件系統(tǒng)和MJPG-streamer視頻服務(wù)器,,系統(tǒng)框圖如圖3所示,。
“Bootloader是在操作系統(tǒng)運(yùn)行之前運(yùn)行的一段小程序,來(lái)完成硬件設(shè)備的初始化,,從而將系統(tǒng)軟硬件環(huán)境帶到合適狀態(tài),,為最終調(diào)用操作系統(tǒng)做好準(zhǔn)備”。Bootloader可以從SAMSUNG公司官方網(wǎng)站下載,,經(jīng)過(guò)交叉編譯生成Bin文件,,下載到板子上。
Linux內(nèi)核采用Linux 2.6.32版本,,運(yùn)行make menuconfig配置萬(wàn)能驅(qū)動(dòng)USB攝像頭,,在Device Drivers下,選擇Multimedia device,,選擇Video Capture adapters,,選擇V4L USB devices,選擇GSPA based webcams,,即可選擇萬(wàn)能驅(qū)動(dòng)USB攝像頭,。
系統(tǒng)采用Yaffs文件系統(tǒng),Yaffs是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng),。它減少了一些功能,,速度更快,掛載時(shí)間很短,,對(duì)內(nèi)存的占用較小,,所以系統(tǒng)采用Yaffs文件系統(tǒng)。
MJPG-streamer是一款免費(fèi)基于IP地址的視頻流服務(wù)器,,它的輸入插件從攝像頭讀取視頻數(shù)據(jù),,這個(gè)輸入插件產(chǎn)生視頻數(shù)據(jù)并將視頻數(shù)據(jù)復(fù)制到內(nèi)存中,它有多個(gè)輸出插件將這些視頻數(shù)據(jù)經(jīng)過(guò)處理,,其中最重要的輸出插件是網(wǎng)站服務(wù)器插件,,它將視頻數(shù)據(jù)傳送到用戶瀏覽器中,MJPG-streamer的工作就是將其中的一個(gè)輸入插件和多個(gè)輸出插件綁定在一起,所有的工作都是通過(guò)它的各個(gè)插件完成的,。MJPG-stream er源碼包可從SourceForge網(wǎng)站下載使用,。各個(gè)文件如下:
(1)input_testpicture.so。這是一個(gè)圖像測(cè)試插件,,它將預(yù)設(shè)好的圖像編譯成一個(gè)頭文件,,可以在沒(méi)有攝像頭的情況下傳輸圖像,從而方便調(diào)試程序,。
(2)input_uvc.so,。此文件調(diào)用USB攝像頭驅(qū)動(dòng)程序V4L2,從攝像頭讀取視頻數(shù)據(jù),。
(3)input_control.so,。這個(gè)文件實(shí)現(xiàn)對(duì)攝像頭轉(zhuǎn)動(dòng)的控制接口。
(4)output_http.so,。這是一個(gè)功能齊全的網(wǎng)站服務(wù)器,,它不僅可以從單一文件夾中處理文件,還可以執(zhí)行一定的命令,,它可以從輸入插件中處理一幅圖像,,也可以將輸入插件的視頻文件根據(jù)現(xiàn)有M-JPEG標(biāo)準(zhǔn)以HTTP視頻數(shù)據(jù)服務(wù)流形式輸出。
(5)output_file.so,。這個(gè)插件的功能是將輸入插件的JPEG圖像存儲(chǔ)到特定的文件夾下,,它可以用來(lái)抓取圖像。
將MJPG-streamer視頻流服務(wù)器移植到目標(biāo)板上運(yùn)行,,從而可以實(shí)現(xiàn)網(wǎng)絡(luò)視頻數(shù)據(jù)的采集,,具體移植過(guò)程:
(1)首先移植MJPG-streamer依賴的jpeg庫(kù)。在/usr/local目錄下解壓源碼包tar xvzf jpegsrc.v8b.tar.gz,。
(2)修改配置文件./configure--prefix=/usr/video/jpeg--host=arm-linux-gnueabi,,編譯:make,安裝:make install,,最后將/usr/local/video/jpeg/lib目錄下的libjpeg.so.8文件拷貝到文件系統(tǒng)中的lib目錄下,。
(3)解壓源碼包:tar zxvf mjpg-streamer.tar.gz;
(4)修改源碼:修改頂層Makefile及plugins目錄中的各級(jí)Makefile將所有CC=gcc修改為CC=arm-linux-gcc。修改/usr/local/mjpg-streamer-r63/plugins/input_uvc目錄下的Makfile文件,,在CFLAGS+=-O2-DLINUX-D_GNU_SOURCE-Wall-shared-fPIC后加上I//usr/loc al/video/jpeg//include,,把$(CC)$(CFLAGS)-ljpeg-o$@input_uvc.c v412uvc.lo jpeg_utils.lodynctrl.lo代碼修改為$(CC)$(CFLAGS)-ljpeg-L/usr/local/video/jpeg/lib-o$@input_uvc.c v412uvc.lojpeg_utils.lo dynctrl.lo,從而加載前面編譯安裝的jpeg庫(kù)文件,,使得MJPG-streamer能夠調(diào)用到j(luò)peg庫(kù),。
(5)交叉編譯:make CC=arm-linux-gcc,交叉編譯器為arm-linux-gcc4.3.2,,生成ARM板可執(zhí)行的二進(jìn)制文件,。
網(wǎng)絡(luò)視頻采集系統(tǒng)軟件流程圖如圖4所示,。
4 系統(tǒng)測(cè)試
將應(yīng)用程序通過(guò)超級(jí)終端工具傳輸?shù)紸RM板上,,設(shè)置視頻服務(wù)器應(yīng)用程序start_uvc.sh開(kāi)機(jī)啟動(dòng),,將交換機(jī)引出的雙絞線通過(guò)RJ-45接口連接到ARM板,在超級(jí)終端下進(jìn)入ARM板,,用ifconfig命令配置服務(wù)器相應(yīng)網(wǎng)段的IP地址,,將板子上電之后即可執(zhí)行視頻采集程序。從客戶端瀏覽器輸入ARM板IP地址發(fā)出訪問(wèn)請(qǐng)求,,服務(wù)器接收到請(qǐng)求后與客戶端建立連接,,將視頻數(shù)據(jù)發(fā)送到客戶端監(jiān)聽(tīng)端口,客戶端就可以得到連續(xù)的現(xiàn)場(chǎng)現(xiàn)場(chǎng)畫(huà)面,,從而實(shí)現(xiàn)網(wǎng)絡(luò)視頻采集功能,。客戶端測(cè)試畫(huà)面如圖5所示,。
5 結(jié)語(yǔ)
隨著互聯(lián)網(wǎng)的不斷發(fā)展,,視頻信息采集進(jìn)入到一個(gè)新的時(shí)代,本系統(tǒng)設(shè)計(jì)基于S3C2440的高速信息處理能力和豐富的硬件接口,,在網(wǎng)絡(luò)功能強(qiáng)大的Linux操作系統(tǒng)平臺(tái)下,,移植MJPG-streamer視頻流服務(wù)器,模塊結(jié)構(gòu)清晰,,易于管理,,利用現(xiàn)有網(wǎng)絡(luò)資源,很容易實(shí)現(xiàn)遠(yuǎn)程的網(wǎng)絡(luò)視頻采集,,克服了現(xiàn)有視頻采集的距離問(wèn)題,,開(kāi)發(fā)簡(jiǎn)單,可移植性高,,并且系統(tǒng)運(yùn)行穩(wěn)定,。
系統(tǒng)改進(jìn)思路:無(wú)線局域網(wǎng)WLAN成為無(wú)線通信使用熱點(diǎn),通過(guò)移植WIFI模塊可以實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)視頻采集,,從而擺脫網(wǎng)線的限制,,更加方便使用,在MJPG-streamer軟件中有一個(gè)input_control.so的輸入插件沒(méi)有用到,,加上該插件可以實(shí)現(xiàn)攝像頭的位置的控制,,比如自動(dòng)跟蹤的功能,另外可以加入智能模式識(shí)別算法,,從攝像頭讀取的視頻信息識(shí)別物體,,辨別出人、動(dòng)物,、汽車等物體,,從而是系統(tǒng)功能更加強(qiáng)大,。