王越,龐振營,王帥,范先星
(重慶理工大學a.計算機科學與技術學院;b.電子信息與自動化學院,重慶400054)
嵌入式無線視頻監控系統的設計與實現
王越a,龐振營a,王帥b,范先星a
(重慶理工大學a.計算機科學與技術學院;b.電子信息與自動化學院,重慶400054)
以搭載S3C2440微處理器的ARM9開發板為硬件平臺,使用USB免驅攝像頭作為視頻圖像采集設備,通過Linux內核提供的統一接口V4L2實現視頻圖像的采集。系統使用MJPEG算法壓縮技術實現視頻數據的編解碼,使用無線WiFi技術將視頻數據傳輸給客戶端。嵌入式設備終端采集視頻數據軟件是基于Linux開源的MJPG-streamer軟件,針對本系統的需要進行了重新編寫,并使用多線程技術。PC機端的監控管理平臺是基于Qt和OpenCV開發的一款具有友好圖形用戶界面的客戶端軟件。同時,在手機移動端基于Android開發了一款易安裝、易操作的APP客戶端。實驗結果表明:該系統運行穩定,在視頻監控客戶端能獲得清晰流暢的視頻流數據。
嵌入式;Linux;視頻監控;V4L2
視頻監控是對人們無法直接、即時觀察的場所提供實時、形象、真實的被監控對象的畫面作為即時處理或事后分析的一種手段[1]。隨著經濟建設的發展,無論是在銀行金融行業,還是在公司樓宇、倉儲管理等行業,視頻監控技術都發揮著不可替代的作用[2]。傳統有線視頻監控系統需要復雜的網絡布線,并且無法在手機移動端隨時隨地查看監控效果。本文克服了傳統有線視頻監控系統中存在的不足,設計并實現了在PC客戶端和手機APP客戶端均能通過無線WiFi實時監控的嵌入式無線視頻監控系統,并獲得了較好的監控效果。
系統主要包括基于ARM硬件平臺的無線視頻監控終端[3-4]、PC機Windows系統下的Qt客戶端和手機移動端的APP客戶端。無線視頻監控終端使用以S3C2440微處理器芯片為核心的ARM9開發板為硬件平臺,并搭載所需的Linux操作系統。首先,使用開發板上連接的USB免驅攝像頭采集視頻數據,然后將采集到的數據傳輸到ARM開發板,由開發板上服務器端的圖像采集處理軟件對數據進行處理,最后通過開發板上連接的USB無線網卡發出的無線WiFi信號將視頻數據傳輸給客戶端。PC機Windows下的監控管理平臺是基于Qt和OpenCV開發的一款具有友好圖形用戶界面的客戶端,能實現實時監控、實時視頻錄像等功能;手機移動端是基于Android開發的一款易操作的APP客戶端,能實現實時監控、實時錄像、拍照等功能。二者通過特定客戶端連接無線視頻監控終端的無線WiFi后,均能獲得清晰流暢的視頻流數據,系統穩定性較好。無線視頻監控系統框圖見圖1。
本系統選用jz2440開發板作為無線視頻監控系統設計的硬件平臺。jz2440開發板是以S3C2440微處理器為核心的開發平臺。S3C2440處理器是具有ARM920T內核的一款16/32-bit RISC處理器,指令執行效率最高可達300 MIPS。該處理器內帶16 Kb指令緩存和16 Kb數據緩存,并采用12 MHz的系統外部時鐘源。系統存儲擴展了512 MB的NAND Flash(K9F1208U0M芯片)和64 MB的SDRAM(K4S561632E芯片)[5],其快速的數據處理能力和豐富的存儲空間為系統高效穩定地運行提供了硬件保障[6-7]。
運行在硬件平臺之上的Linux系統主要包括4個層次[8]:引導加載程序(Bootloader)、Linux內核、根文件系統、應用程序。

圖1 無線視頻監控系統框圖
2.1U-boot移植
在嵌入式操作系統中,Bootloader是連接操作系統和硬件平臺的橋梁,它在系統上電時開始運行,初始化硬件設備,準備軟件環境,最后調用操作系統內核。U-boot(universal boot loader)是遵循GPL條款的開放源代碼項目,為Bootloader中較為流行、功能強大的引導加載程序[9]。U-boot移植需要修改與開發板相關的配置文件和底層接口文件,然后才可以在目標開發板上運行。限于篇幅,移植過程本文省略。
2.2Linux內核移植
開發板使用linux-3.4.2內核版本,需要修改內核中的時鐘頻率使其支持系統外部時鐘源,修改網卡驅動使其支持網絡功能,以及修改MTD設備分區使其可以掛接文件系統等。
2.3NFS啟動根文件系統
新內核具備了網絡功能后,可通過設置開發板U-boot控制界面命令行參數自動從NFS啟動系統或者從NAND Flash啟動系統后手動掛接NFS文件系統。本文考慮方便性,選擇前者。
啟動開發板至U-boot控制界面,設置U-boot的環境變量,使開發板從網絡文件系統(NFS)啟動。本文使用的開發板IP為192.168.2.17,PC端虛擬機VMware中Linux有線網卡IP為192.168.2.30,NFS目錄為/work/nfs_root/fs_mini _mdev_new,在U-boot控制界面進行如下設置:
set ipaddr 192.168.2.17
set bootcmd'nfs 32000000 192.168.2.30:/ work/nfs_root/uImage_new_wifi;bootm 32000000'
set bootargs console=ttySAC0,115200 root=/ dev/nfs nfsroot=192.168.2.30:/work/nfs_root/fs_ mini_mdev_new ip=192.168.2.17
在完成視頻監控系統所需的設備硬件平臺的搭建和底層Linux系統的設計后,接下來繼續在嵌入式設備上構建一個視頻監控服務器,以實現視頻數據的采集和傳輸功能。
3.1服務器端視頻數據采集
視頻服務器軟件從USB免驅攝像頭獲取視頻數據,并將采集到的視頻數據使用MJPEG算法壓縮技術進行數據處理,然后通過無線方式發送給客戶端。服務器端采集視頻軟件是基于Linux開源的MJPG-streamer軟件,針對本系統的需要進行了重新編寫。該軟件使用多線程技術,輸入線程實現采集視頻數據功能,輸出線程用來響應來自客戶端用戶的請求,并向用戶發送視頻數據。重新編寫后的服務器軟件使用Linux內核向應用程序提供訪問音頻、視頻的統一接口V4L2,以實現視頻圖像的采集。V4L2接口采集視頻數據的工作流程見圖2。
3.2服務器端視頻數據傳輸
傳統有線視頻監控系統中的數據傳輸需要復雜的網絡布線,并且無法隨時隨地地保證移動端視頻監控的效果[10]。本系統克服了傳統有線視頻監控系統的不足,使用無線方式實現數據的傳輸。
為了實現無線數據傳輸,將開發板外接的USB無線網卡設置為AP(access point)工作模式,產生供客戶端連接的WiFi無線信號,并設置DHCP等服務使開發板每次連接上USB無線網卡后都能自動分配無線IP和自動設置網關。同時,為連接到開發板服務器端的客戶端分配一個識別IP,用于區分不同的客戶端。當攝像頭采集到視頻數據后,服務器端將通過無線網絡通信的方式將攝像頭采集到的視頻數據傳輸給連接至服務器的客戶端。

圖2V4L2接口采集視頻數據的工作流程
在Linux中,網絡通信是基于Socket編程實現的。服務器端通過Socket建立一個通信連接端口,客戶端通過此端口與服務器建立連接,并進行通信。服務器與客戶端之間的通信傳輸過程描述如下[11]:服務器端先調用Socket()函數創建一個套接字,接著調用bind()函數給套接字綁定一個端口號,然后再調用listen()函數監聽客戶端用戶請求;如果客戶端有connect()請求,服務器端則調用accept()函數與之建立TCP可靠連接,二者通過send()函數和recv()函數進行網絡數據通信。具體的TCP網絡通信流程見圖3。
完成開發板上視頻監控服務器端的搭建后,即可實現視頻數據的采集和TCP協議無線網絡傳輸。由于在客戶端通過網頁顯示視頻流延遲明顯,實時傳輸效果差,故在PC機的Windows系統下基于Qt和OpenCV開發了一款可移植性好、可操作性強的客戶端,實現實時監控、實時視頻錄像等功能。在手機移動端基于Android系統開發了一款易安裝、易操作的手機APP客戶端,實現實時監控、拍照、實時視頻錄像等功能。

圖3 服務器與客戶端TCP網絡通信流程
4.1PC客戶端實現
OpenCV是開源的計算機視覺庫[12],包含一系列C函數和少量C++類庫,可實現圖像處理和計算機視覺方面的很多通用算法。本文主要采用OpenCV中廣泛使用的圖形交互和媒體接口High-GUI庫對圖像和視頻進行讀寫處理。
Qt是用C++編寫,支持多操作系統平臺的應用程序開發框架[13]。Qt與其他GUI開發工具最大的不同在于它自行定義了信號與槽這種通信機制,該通信機制獨立于標準的C/C++語言。在傳統的GUI工具包中,窗口部件一般通過指向某個函數指針的回調函數來響應它們所觸發的每個動作。但是,在Qt中信號與槽取代了這些復雜的函數指針,使得編寫的這些通信程序更為明了。信號可以與槽進行單個連接,也可以將多個信號與單個槽進行連接,還可以將單個信號與多個槽進行連接。系統調用connect()函數將信號與槽連接起來。當信號被某一對象發射后,與其相關聯的槽將被立刻執行,類似普通的函數調用。當槽函數執行結束后,系統將調用disconnect()函數斷開發射者中的信號與接收者中的槽函數之間的關聯。
4.1.1PC端客戶端界面設計
Qt Creator是用Qt開發的輕量級跨平臺集成開發環境。它包含了一套用于創建和測試基于Qt應用程序的高效工具,包括高級的C++編輯器、上下文感知幫助系統、可視化調試器、源代碼管理工具、項目和構件管理工具[13]。本文使用Qt Creator設計用于接收視頻數據的客戶端。
在Windows操作系統下,打開Qt Creator創建一個工程,在Qt Creator的Design模式下編輯客戶端界面。在主編輯界面放置2個Line Edit:一個用于輸入服務端IP,另一個用于輸入服務端Port;5個Push Button分別用于連接、斷開服務器,開始、停止錄制視頻和關閉客戶端;2個Label分別用于顯示視頻數據和當前狀態。
4.1.2視頻圖像顯示過程分析
在服務器端使用TCP協議傳輸視頻數據,故在客戶端也應使用TCP協議來建立網絡連接和實現視頻數據傳輸。Qt中自帶的QTcpSocket類提供TCP套接字并實現TCP連接。在QTcpSocket類下創建1個tcpSocket對象,調用tcpSocket->connectToHost()連接至服務器。服務器端接受客戶端連接請求后,與客戶端建立TCP連接,并調用send()函數將攝像頭采集到的視頻數據通過無線網絡以幀為單位傳輸給客戶端。在客戶端用connect()函數將readyRead()信號與read()槽函數進行連接。當緩沖區有數據要讀的時候,會觸發readyRead()信號,從而自動調用read()槽函數讀取視頻數據。PC客戶端視頻圖像顯示流程如圖4所示。
4.2手機APP客戶端實現
Android是以Linux為基礎的開源的移動設備操作系統,目前廣泛應用于智能手機和平板電腦[14]。本研究基于Android[15]開發了一款手機APP客戶端,用來實現實時監控、實時錄像、拍照、瀏覽圖片等功能。
1個Android應用通常會包含多個Activity,但只有1個Activity會作為程序的入口。在Android中,通常使用Intent作為連接不同組件的通信載體。

圖4 PC客戶端視頻圖像顯示流程
在本系統中,當打開App客戶端時會首先執行FlashActivity作為程序的入口。在FlashActivity的界面布局文件flash.xml中放置2個EditText,一個用于填寫服務器的IP,另一個用于填寫服務器Port。1個Button按鈕用于與服務器建立連接。連接成功后,執行startActivity(new Intent(FlashActivity.this,MainActivity.class)),啟動MainActivity進入視頻監控主界面。在MainActivity的界面布局文件main.xml中使用相對布局RelativeLayout進行UI布局。在Palette的Custom Views文件夾下創建一個本系統中使用名為MjpegView的View,并將MjpegView放置在main.xml中,同時放置與RadioGroup一起使用的一組RadioButton。RadioGroup有OnCheckedChangeListener事件,而對于該事件的處理則使用onCheckedChanged()方法。在該方法中,根據RadioButton所分配的值來判斷是執行拍照、錄像還是瀏覽等操作。手機APP客戶端視頻監控流程如圖5所示。
測試在整個產品開發過程中占有非常重要的地位,通過測試能檢測出系統及其穩定性是否符合要求。本系統的ARM開發板有線網卡IP設置為192.168.2.17,PC機Windows系統有線網卡IP設置為192.168.2.10。因為開發板設置為網絡文件系統(NFS)啟動,所以VMWare虛擬機中Linux系統的有線網卡IP設置為192.168.2.30,三者在同一網段。

圖5 手機APP客戶端視頻監控流程
5.1啟動視頻監控系統的服務器端
根據系統需求,對MJPG-streamer軟件進行重新編寫。將編寫后的文件通過CuteFTP軟件上傳到VMWare虛擬機中Ubuntu系統下的任一文件夾里,然后執行make命令,生成可執行文件mjpg_ streamer。使用命令sudo cp mjpg_streamer/work/ nfs_root/fs_mini_mdev_new/bin/將該可執行文件拷貝到開發板所使用的網絡文件系統中。
啟動開發板,使用SecureCRT終端仿真軟件登陸到開發板,連接USB攝像頭和USB無線網卡。經過之前的設置,USB無線網卡已工作在AP模式下。只要連接上USB無線網卡,開發板就會自動發出WiFi無線信號“CQUT_B204”,如圖6所示。
在終端使用命令#cd bin進入到bin目錄。在bin目錄下,使用#ls命令可以查看拷貝過來的可執行文件mjpg_streamer。輸入“#./mjpg_streamer”命令并回車,可以看到串口終端顯示出的視頻設備、視頻像素大小、幀格式、端口號等信息,并等待客戶端的連接。
5.2啟動視頻監控系統的客戶端
在PC機windows下,通過無線網卡連接“CQUT_B204”。打開Qt Creator軟件,點擊菜單欄Build下的Run,程序自動編譯后開始運行,并彈出連接服務器界面。輸入服務器IP和服務器Port,點擊“連接”按鈕連接到服務器。

圖6 AP模式下的WiFi信號
在手機移動端,打開WiFi,連接“CQUT_ B204”。打開預先安裝好的APP客戶端軟件,輸入服務器IP和服務器Port,點擊“連接”按鈕連接到服務器。
成功連接服務器后,服務器與客戶端建立TCP連接,并將攝像頭采集到的數據通過無線網絡傳輸給客戶端??蛻舳丝蓪崟r、穩定地顯示視頻流數據,并根據需要進行視頻拍照、視頻錄像、瀏覽圖片等操作。PC客戶端、手機客戶端與服務器視頻數據的傳輸效果見圖7、8。

圖7 PC客戶端與服務器的視頻數據傳輸效果

圖8 手機客戶端與服務器的視頻數據傳輸效果
本系統使用V4L2接口技術完成USB攝像頭視頻圖像的采集,利用MJPEG算法壓縮技術實現視頻數據的編解碼,通過TCP網絡實時無線傳輸視頻數據,并設計了分別適用于PC機和手機移動端的客戶端。測試結果表明,系統能實時、穩定地傳輸視頻流數據,對現場視頻圖像具有較好的監控效果。存在的不足之處:系統還不能實現對監控現場音頻的支持,也無法遠程操控攝像頭進行任意角度的視頻監控,還需要在本系統的基礎上做進一步研究開發。
[1]牛溫佳,劉銀龍.移動網絡視頻監控系統[M].北京:電子工業出版社,2013.
[2]陳峰,趙欣.基于QT和嵌入式的視頻監控系統[J].通信技術,2011(10):109-111.
[3]唐人財,劉連浩.基于嵌入式Linux遠程圖像監控系統的設計[J].計算機與現代化,2010(11):31-34.
[4]汪洋,鄭連清.基于網絡的校區視頻監控設計與實現[J].重慶理工大學學報:自然科學版,2011(10):82 -85.
[5]韋東山.嵌入式Linux應用開發完全手冊[M].北京:人民郵電出版社,2012.
[6]王溢琴.基于嵌入式的智能家居之視頻監控系統設計[J].計算機測量與控制,2014,22(11):3623-3626.
[7]毛劍飛.基于改進的H.264的視頻監控系統[J].計算機系統應用,2014,23(4):84-90.
[8]張愛芹.基于ARM的嵌入式視頻交通系統平臺研究[D].重慶:重慶理工大學,2009.
[9]李軍,張華春.U-Boot及Linux2.6在S3C2440A平臺上的移植方法[J].電子器件,2008(10):1667-1670.
[10]劉艷嬌.基于嵌入式Linux的無線視頻監控系統設計與實現[D].黑龍江:哈爾濱工程大學,2012.
[11]趙克佳.UNIX程序設計教程[M].北京:清華大學出版社,2002.
[12]于仕琪,劉瑞幀.學習Open CV[M].北京:清華大學出版社,2012.
[13]陳爽.Linux與Qt程序設計[M].北京:清華大學出版社,2011.
[14]鄭海洲.基于Android平臺的嵌入式視頻監控系統設計[J].自動化儀表,2013,34(9):30-33.
[15]楊飛,黃國宏.基于Android智能終端的移動視頻監控系統研究[J].計算機技術與發展,2013,23(2):195-198.
(責任編輯楊黎麗)
Design and Implementation of Embedded Wireless Video Monitoring System
WANG Yuea,PANG Zhen-yinga,WANG Shuaib,FAN Xian-xinga
(a.College of Computer Science and Engineering;b.College of Electronic Engineering and Automation,Chongqing University of Technology,Chongqing 400054,China)
This system was equipped with S3C2440 ARM9 microprocessor development board for the hardware platform and the Linux system was built on the platform.Using the USB camera-free drive as a video capture device,using the Linux kernel to provide a uniform interface for V4L2 video image capture and the algorithm of MJPEG to compress and decode the video data,and transmit these to client through WiFi technology.Server-side MJPG-streamer video data acquisition software was based on Linux open source software and this system needed to be overhauled and used multithreading technology.The client that based on Qt and OpenCV has a friendly graphical user interface and is easily installed and operated APP client based on Android for mobile phone.The experimental results show that the system runs stably and both clients can get a clear and smooth video streaming data.
embedded;Linux;video monitoring;V4L2
TP393
A
1674-8425(2015)04-0067-06
10.3969/j.issn.1674-8425(z).2015.04.013
2015-01-02
重慶市科技攻關計劃項目(cstc2009AC2068)
王越(1961—),男,重慶人,博士,教授,主要從事嵌入式技術、數據挖掘、數據庫技術研究;龐振營(1987—),男,河南商丘人,碩士研究生,主要從事嵌入式技術研究。
王越,龐振營,王帥,等.嵌入式無線視頻監控系統的設計與實現[J].重慶理工大學學報:自然科學版,2015(4):67-72.
format:WANG Yue,PANG Zhen-ying,WANG Shuai,et al.Design and Implementation of Embedded Wireless Video Monitoring System[J].Journal of Chongqing University of Technology:Natural Science,2015(4):67 -72.