李來文,陳希明,劉澤源,周 昕,裴永旭,黃楚俊
(哈爾濱理工大學 計算機科學與技術學院,黑龍江 哈爾濱 150080)
本系統采用iTop4412 開發板作為開發平臺,借助Linux 操作系統來實現軟件上的需求,通過網線連接路由器,然后在嵌入式系統上搭建Boa Web(Boa Webserver)服務器,通過移植MJPG-streamer 軟件采集攝像頭數據。用戶只需要通過電腦端瀏覽器或者手機端App 即可查看實時監控畫面。
在iTop4412 上運行定制的Linux 系統,開發板搭載UVC 攝像頭的基礎上,將 Mjpeg-streamer、Boa Web 移植到開發板,根據開發板IP 地址,編寫html 文件、App,最終實現在電腦端和手機App 上隨時查看監控畫面的功能。
系統整體方案設計如圖1 所示。

圖1 系統整體方案
本系統主要利用iTop4412 開發板搭建遠程監控系統。設計任務分為適配硬件、移植軟件、網頁設計、制作App 四個部分。
本系統應用USB2.0 的UVC 攝像頭,通過定制內核,確保攝像頭在開發板上正常運行。
本系統的軟件部分主要包括Linux 操作系統內核的定制,根據需求來添加或者移除相應的驅動。還包括移植Boa Web 服務器及移植MJPG-streamer 視頻流服務器。
搭建輕量級的Web 服務器Boa Web,通過IP 地址訪問服務器時,需要登陸首頁。本監控系統,首頁直接顯示監控畫面、報警器操控按鈕即可。
本遠程監控系統除了提供電腦端瀏覽器訪問之外,還支持手機端瀏覽器及App 訪問方式。手機端瀏覽器訪問與電腦端相同,只需要設計App 即可。打開App 后,點擊開始按鈕,即可在App 中看到監控畫面;點擊返回按鈕,即可停止監控,回到輸入IP 地址和端口的界面。更改IP 地址或端口后,可繼續查看其他攝像頭的監控畫面。
通過Android Studio 進行Android 開發,最終在Android 10 真機上測試,確保App 能夠正常使用。
為確保USB 攝像頭能獲取清晰度較高的視頻采集結果,同時保證嵌入式視頻監控系統的性能更加穩定,必須采用性能較高的處理器作為開發平臺。
本系統主芯片采用Exynos-4412,該CPU 功能強大,性能卓越,適用于要求系統具有高穩定性、高可靠性,以及高效處理和響應的場合。對于嵌入式視頻監控系統而言,為用戶提供滿意效果,保證系統的穩定性和可靠性是前提。對該課題而言,基于Exynos-4412 的芯片是合理選擇,既滿足了設計上的要求,同時兼顧價格的考慮。
USB 攝像頭即插即用,無需獨立電源,絕大多數平臺都支持。與傳統監控攝像頭相比,成本更低,而且品牌、性能眾多,使用者可根據實際需求與資金情況,購買合適的USB 攝像頭產品使用。同時Linux 內核中有V4L2 攝像設備的驅動支持,兼容USB 攝像頭。即只要將V4L2 驅動加入到內核,在開發板上插入USB 攝像頭后,開發板即能正常識別設備,USB 攝像頭正常運行。
鑒于上述特點,本系統選用USB 攝像頭作為視頻采集設備。
本設計的重點,主要是軟件部分的編寫。軟件主要從以下幾個方面進行設計。首先是選用什么樣的操作系統作為開發環境,由于Linux 開源、功能豐富、強大的網絡功能等特點,因此選擇Linux 作為本課題的系統。然后在Linux 操作系統上搭建 Boa Web 服務器、MJPG-streamer,通過服務器將數據傳輸出去,在手機或者電腦上訪問相應網頁或手機APP,就可以實時查看攝像頭捕捉到的視頻畫面。
對于服務器傳輸的視頻流數據,在電腦端可以利用瀏覽器直接訪問IP 地址和端口,所以電腦端不需要編寫代碼。
對于手機端提供兩種方法查看監控。第一種方式是直接通過瀏覽器訪問IP 地址和端口號;第二種就是通過App 直接查看監控畫面。
MJPG-streamer 是一款免費的基于IP 地址的視頻流服務器,它的輸入插件從攝像頭讀取視頻數據,并將視頻數據復制到內存中,有多個輸出插件可將這些視頻數據進行處理,其中最重要的輸出插件是網站服務器插件,它將視頻數據傳送到用戶瀏覽器中,MJPG-streamer 的工作就是將其中的一個輸入插件和多個輸出插件綁定在一起,所有的工作都是通過它的各個插件完成的。
Mjpeg-Streamer 的移植需要jpeg 庫,所以必須首先移植jpeg 庫,在網上下載jpeg 源碼jpegsrc.v8b.tar.gz,拷貝到Ubuntu 目錄下。終端進入剛解壓出來的目錄執行:
./configure --host=arm-none-linux-gnueabi --prefix=/home/user/out_jpeg 命令配置編譯器與安裝目錄。執行make 命令編譯,執行make install 命令將其安裝至指定目錄。
下載mjpg-streamer-r63.tar.gz,并解壓到Ubuntu 的一個目錄下。修改源碼頂層目錄下的Makefile 文件,指定gcc 編譯器,指定動態庫。
修改plugins/input_uvc/makefile 文件,進行如圖2 所示的修改。
修改plugins/output_http/Makefile,進行如圖3 所示的修改。

圖 2 input_uvc 修改

圖 3 output_http 修改

圖4 修改start 文件

圖5 App 程序流程圖
配置完成后make,之后將運行程序需要的依賴庫和可執行程序拷貝到開發板目錄下。
在開發板的根目錄下創建camera 目錄,將input_uvc.so、libjpeg.so.8、mjpg_streamer、output_http.so、start.sh 以及文件夾www,拷貝到開發板的camera 目錄下。其中,input_uvc.so、libjpeg.so.8、output_http.so 是程序運行所需要的依賴庫,start.sh 是執行程序的 shell 腳本,mipg_streamer 是可執行程序。
將USB 攝像頭插入開發板,超級終端查看設備號,之后對start.sh 文件修改,指定攝像頭設備號,如圖4 所示。
Boa Web 服務器是專門為嵌入式平臺開發的輕量級Web 服務器。本設計使用Boa Web 服務器的原因是當用戶通過電腦或手機訪問服務器時,可以直接通過IP 地址查看實時監控。
官網下載BOA 源碼“boa-0.94.13.tar.gz”解壓到Ubuntu 指定目錄下。
解壓后會有名字為boa-0.94.13 的文件夾。進入這個文件夾下的src 文件夾里,運行./configure 生成Makefile編譯文件。
打開剛生成的Makefile 文件,修改其中兩個參數,指定 gcc 編譯器為:arm-none-linux-gnueabi-gcc。
打開compat.h 文件,在第123 行代碼左右找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 一行,改為 #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff。
保存后退出,接著make 編譯,對生成的boa 文件使用命令arm-none-linux-gnueabi-strip boa,進行瘦身。
接下來將boa 文件拷貝到開發板的bin 目錄下;在開發板的etc 目錄下新建boa 文件夾,在根目錄下新建www 文件夾,在www文件夾內新建cgi-bin 文件夾;將boa.conf 拷貝到開發板的etc/boa目錄下;接著將Ubuntu 的etc 目錄下的mime.types 拷貝到開發板的etc 目錄下。進入到開發板/etc/boa/,打開 boa.conf,進行如下修改。
(1)首先將該文件第49 行左右的 Group nogroup 修改為Group root。
(2)其次將該文件第96 行左右的#ServerName www.your.org.here 修改為 ServerName www.your.org.here。
(3)第三將該文件第115 行左右的 DocumentRoot /var/www 修改為 DocumentRoot /www 這里的“/www”就是前面步驟使用mkdir 創建的www 目錄。
(4)最后將該文件第194 行左右的 ScriptA1ias /cgi-bin//usr/1ib/cgi-bin/修改為 ScriptAlias /cgi-bin/ /www/cgi-bin/。
保存后退出。接著運行boa 程序,再運行剛才的start.sh 文件,在電腦瀏覽器直接輸入開發板IP 地址即可查看監控畫面。
安卓App 使用Android Studio 開發,依據系統需要,編寫程序,在真機上進行功能測試,最終完成整個App的開發。整個程序流程如圖5 所示。
本文結合嵌入式技術以及監控系統技術,從實際應用出發,提出了一種基于 ARM9 的嵌入式 Web 視頻監控系統的設計方案,完成了系統的具體實現,有一定的實用價值。