彭玲 黃松發(fā)
摘要:本文將嵌入式技術(shù)與網(wǎng)絡(luò)技術(shù)融合到視頻監(jiān)控系統(tǒng),提出了基于S3C2440A和MJPG-Streamer的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng),通過測試表明視頻圖像顯示效果較好,運行穩(wěn)定、可靠。
關(guān)鍵詞:S3C2440A USB攝像頭 MJPG-Streamer v4l2
1 概述
隨著科學(xué)技術(shù)的高速發(fā)展,視頻監(jiān)控系統(tǒng)已經(jīng)進入到人們生活的各個方面,將嵌入式技術(shù)與網(wǎng)絡(luò)技術(shù)融合到視頻監(jiān)控系統(tǒng),彌補了以前傳統(tǒng)視頻監(jiān)控系統(tǒng)存在體積過于龐大、布線復(fù)雜、價格高等不足,在圖像處理與傳輸方面都有很好的應(yīng)用,具有重要的社會和應(yīng)用價值[1]。
2 總體設(shè)計
本文提出的視頻監(jiān)控系統(tǒng)以ARM9的S3C2440A 作為主控芯片,配合Linux操作系統(tǒng),通過USB與攝像頭連接,搭建了MJPG-Streamer流媒體視頻服務(wù)器,完成視頻數(shù)據(jù)的采集、壓縮及網(wǎng)絡(luò)傳輸?shù)竭h程客戶端[2],遠程客戶端通過軟件進行查看,從而實現(xiàn)視頻監(jiān)控。
3 系統(tǒng)硬件設(shè)計
本系統(tǒng)的核心板采用Samsung公司生產(chǎn)的S3C2440微處理芯片,該芯片基于ARM920T內(nèi)核,主頻高達400MHz,內(nèi)置了USB控制器,本系統(tǒng)的USB攝像頭采用具有視頻壓縮編碼的ZC0301P芯片[3]。
4 系統(tǒng)軟件設(shè)計
4.1 Linux內(nèi)核配置編譯 要使USB攝像頭能正常工作,Linux需要加載該功能模塊,可以有兩種方式:一種是把相應(yīng)模塊編譯進內(nèi)核;另一種是編譯成模塊,生成對應(yīng)的.o文件,可以動態(tài)加載[2]。本文采用第一種方式,直接編譯進內(nèi)核,USB攝像頭隨內(nèi)核啟動就能正常工作了。在PC機的Linux系統(tǒng)下,進入linux-2.6.30.4內(nèi)核目錄,輸入make menuconfig,進入到Linux 內(nèi)核配置菜單,由于本文選擇ZC0301P系列的USB攝像頭,具體操作如下:
Device Drivers 目錄---> <*> Multimedia support ---> [*] Video capture adapters --->[*] V4L USB devices ---> <*> USB ZC0301[P] Image Processor and Control Chip support。
保存配置后,執(zhí)行make zImage可生成新的壓縮內(nèi)核zImage。
4.2 MJPG-Streamer視頻服務(wù)器軟件的設(shè)計 MJPG-
Streamer是一個基于網(wǎng)絡(luò)應(yīng)用的輕量級的開源的視頻服務(wù)器軟件,可以從USB攝像頭中獲取視頻數(shù)據(jù),通過TCP/IP網(wǎng)絡(luò)協(xié)議傳輸?shù)娇蛻舳耍饕╥nput插件和output插件,結(jié)合Linux 系統(tǒng)的API,能完成視頻數(shù)據(jù)的采集、壓縮和網(wǎng)絡(luò)傳輸[4]。
4.2.1 input插件。input插件主要是完成USB攝像頭的初始化以及視頻數(shù)據(jù)采集,需要調(diào)用Video for Linux(V4L),它是上層的視頻應(yīng)用程序與系統(tǒng)內(nèi)核的接口,由于V4L 中存在的一部分設(shè)計上的bug[2],本文使用V4L的改進版V4L2來編寫視頻采集程序,具體流程如圖2所示。
4.2.2 output插件。output插件主要是完成視頻壓縮、網(wǎng)絡(luò)傳輸。本文使用基于幀內(nèi)和幀獨立的M-JPEG壓縮技術(shù),雖比不上低碼率圖像壓縮標(biāo)準(zhǔn)的H.264,但畫質(zhì)還是比較清晰的,在嵌入式中應(yīng)用比較廣泛。在網(wǎng)絡(luò)傳輸上使用TCP/IP網(wǎng)絡(luò)協(xié)議,定義socket 套接字,通過bind、listen、accept來編程,實現(xiàn)視頻數(shù)據(jù)的網(wǎng)絡(luò)傳輸[2]。
4.2.3 MJPG-Streamer視頻服務(wù)器的搭建及系統(tǒng)測試。本文搭建MJPG-Streamer視頻服務(wù)器,并進行系統(tǒng)測試,具體步驟如下:
①首先下載MJPG-Streamer源碼包,在PC機的Linux 系統(tǒng)下,使用tar 命令解壓。
②在PC機的Linux 系統(tǒng)下安裝交叉編譯器arm-linux-gcc,生成的可執(zhí)行文件可以在ARM9開發(fā)板上運行。
③進入到mjpg-streamer目錄下,將所有目錄下的Makefile文件中的CC=Gcc修改為CC=arm-linux-gcc,使用make編譯,生成uvc-stream、mjpg-streamer、input*.so、output*.so的組件。
④將mjpeg-client/bin/win32-upx/目錄下的客戶端程序viewer.exe,復(fù)制到windows平臺下,可以直接在windows平臺下運行[5]。
⑤將前面所生成的內(nèi)核通過TFTP下載到ARM9開發(fā)板中并啟動,連上USB 攝像頭。
⑥在超級終端上,通過NFS掛載,將input*.so、output*.so文件復(fù)制到ARM9開發(fā)板的/lib/WebCam目錄下,將mjpg-streamer復(fù)制到ARM9開發(fā)板的/sbin/目錄下,然后運行可執(zhí)行文件uvc-stream。
⑦在PC端打開viewer.exe,輸入ARM9開發(fā)板的ip和端口號,再點擊connect,就可以實現(xiàn)監(jiān)控顯示,效果如圖3所示。
5 總結(jié)
本系統(tǒng)以S3C2440A為核心,結(jié)合Linux操作系統(tǒng),搭建MJPG-Streamer視頻服務(wù)器,實現(xiàn)了嵌入式視頻監(jiān)控,但只是基于本地局域網(wǎng)的視頻監(jiān)控,且視頻顯示清晰度及實時性還有待改進,隨著無線網(wǎng)絡(luò)的發(fā)展,還可以利用無線網(wǎng)卡實現(xiàn)實時無線監(jiān)控。
參考文獻:
[1]葛林.基于ARM9和OpenCV的視頻監(jiān)控系統(tǒng)的研究[D].湖北工業(yè)大學(xué),2013.12.
[2]華春夢,劉沖.基于S3C2440嵌入式平臺的USB攝像頭視頻監(jiān)控[J].電腦開發(fā)與應(yīng)用,2015.1.
[3]許敏.基于S3C2410的嵌入式視頻監(jiān)控系統(tǒng)的設(shè)計[J].電腦知識與技術(shù),2014.2.
[4]陳恒鑫,林威,張欽宇.基于MJPG-Streamer的移動視頻監(jiān)控系統(tǒng)設(shè)計[J].計算機測量與控制,2014.5.
[5]李佳林,劉永春.基于S3C2440網(wǎng)絡(luò)視頻采集系統(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2014.1.