0 引言
在國內外市場上,視頻監控主要有模擬視頻監控和數字視頻監控。前者技術發展已經非常成熟,在實際工程應用中得到廣泛應用,但只適合于小范圍的區域監控,而且系統的擴展能力差,已經不能適應社會發展的需要。后者又可分為基于PC 機的視頻監控系統和基于嵌入式的視頻監控系統。嵌入式視頻監控系統與PC 視頻監控系統相比,具有體積小、功耗低、性能穩定的特點,很適合于在銀行、學校等公共場所的安全監控。采用USB 攝像頭作為視頻采集設備的嵌入式視頻監控系統,更由于其價格低廉、通用性好且接口標準而備受青睞。
本系統基于 ARM9 處理器和嵌入式Linux 操作系統,利用USB 接口攝像頭實現數字圖像采集任務,同時直接將數據以視頻服務器方式發送到網絡,用戶可以直接通過Web 瀏覽器進行遠程實時監控。
1 硬件平臺設計
1.1 微處理器模塊
平臺采用 ATMEL 公司的AT91RM9200 處理器,AT91RM9200 是基于ARM920T 內核的低功耗32 位RISC 微處理器,其主頻為180MHz,處理速度快,功能強,性價比高,能很好滿足嵌入式Linux 系統的需求,還集成了包括USB2.0 主機端口和設備端口以及10/100MBase-T 以太網接口。在此基礎上,配置了64M 的Nand Flash 用作存儲設備,2×32M的32 為SDRAM。處理器通過USB 接口連接攝像頭,通過以太網接口連接網絡。系統硬件平臺功能如圖1 所示。
圖 1 監控系統硬件
1.2 USB 主設備模塊
AT91RM9200 片內集成的USB 主機端口集成一個跟集線器,并在下游端口集成收發器,它提供幾個半雙工高速串行通信端口,速率為12Mbit/s,最多可連接127 個USB 器件。本系統外擴一個USB 主機端口來支持USB 攝像頭的訪問。
系統采用的是應用廣泛的選用羅技快看酷訊版攝像頭進行數據采集,這種攝像頭可以實現硬件JPEG 編碼,視頻數據由攝像頭采集,一旦主控制器獲得視頻數據請求,則通過USB接口讀取其緩存的數據,并對圖像數據進行壓縮編碼,然后基于socket 編程來發送這些壓縮后的數據到服務器。
1.3 以太網接口模塊
AT91RM9200 的在片以太網卡端口和網絡物理層芯片DM9161E 的MII 接口通信。片內以太網卡通過DMA 通道進行數據的發送,不影響AT91RM9200 的正常運行。首先正確設置傳送控制寄存器和傳送地址寄存器的傳送數據塊字節數、數據塊存儲首地址等參數,隨后依次從指定數據存儲區地址讀取1024b 數據,送入內部發送緩沖器中,由MAC 對數據進行封裝發送,同時記錄已傳送字節數,直到數據塊發送完畢。當發送完一組數據后,發出DMA中斷請求,由AT91RM9200 進行相應的處理。整個網絡子系統電路由AT91RM9200 控制和調度。
2 嵌入式Linux 開發環境的建立
2.1 交叉編譯鏈的建立
嵌入式開發與普通開發有個顯著的不同是,普通開發是在本機開發、調試,本機運行,而嵌入式由于資源有限,不能直接在嵌入式目標機上運行開發工具,因此嵌入式開發一般采用交叉編譯方式,即在開發主機上編譯目標機上運行的程序。交叉編譯鏈可以自己制作,也可以通過網絡下載別人已制作好的交叉編譯鏈直接使用。本系統所用交叉編譯鏈版本是3.4.3。
2.2 配置并編譯內核
系統選用開源的 Linux 2.6.14 版內核作為操作系統,以交叉編譯方式編譯,即在普通PC機上運行Fedora 8 環境下,用交叉編譯鏈編譯在ARM 9 機器上運行的Linux 內核。內核用tftp 方式下載到開發板,然后解壓自引導。具體操作如下:
(1) 給內核補丁,下載Linux2.6.14 內核源碼linux-2.6.14.tar.bz2 和AT91RM9200 補丁2.6.14-at91.patch.gz,然后:
3 視頻采集的實現
3.1 USB 攝像頭驅動
Linux 對于視頻采集設備的支持,是通過Video4Linux(V4L)實現的,V4L 為視頻應用程序提供了一套統一的API 函數,視頻應用程序通過標準的API 接口實現與內核和驅動的通信,實現視頻設備的各種功能。對于USB 接口攝像頭,驅動程序實現了基本的I/O 接口函數open、close、read、write,實現了內存映射功能函數mmap 和控制函數ioctl,并對于中斷進行了處理。
Linux 中視頻采集的實現,可以用read()函數直接讀取數據,也可以用mmap()函數通過內存映射工作。內存映射方式直接將設備地址映射到內存地址空間,使用方便,效率更高,因此本系統采用內存方式獲取視頻數據。
本系統的設備控制函數ioctl 實現的主要設備控制命令有獲得攝像頭信息VEDIOCGCAP,判斷獲取圖片是否成功VEDIOSYNC,讀取圖片相關信息VEDIOCGPIC,以及獲取圖片VEDIOGETPIC。
3.2 視頻數據采集
本系統數據采集程序也是基于 V4l 編寫應用程序,其基本流程首先通過open 系統調用打開攝像頭設備,如果成功則繼續通過ioctl 函數命令(參數VEDIOCGCAP)獲取攝像頭相關信息,ioctl 函數命令(VEDIOGETPIC)獲取圖像數據。
4 遠程監控的實現
4.1 BOA 服務器的建立
Web 服務器在本方案中采用了Linux 系統中常用的Boa,Boa 是一種非常小巧的Web服務器,其可執行代碼只有大約60KB 左右。Boa 支持CGI,速度快和安全性好,很適合嵌入式系統使用。使用時只需用已建好的交叉編譯鏈編譯,然后修改配置文件boa.cONf,為Boa 創建需要的目錄/var/www/、/var/log/boa/acces_log 和/var/log/boa/error_log,以及將通用mime.types 拷貝到/etc 目錄下,即完成了BOA 的配置。
4.2 遠程視頻服務的實現
遠程視頻服務基于 servfox/開源軟件包,servfox 流媒體服務器使用V4L 完成原始視頻圖像的獲取,然后把視頻圖像以MJPEG 的方式壓縮,通過TCP 協議向網絡發送。
復制 spcaview 軟件包的目錄http-java-applet 到Boa 的Web 服務器目錄下,啟動boa 服務,再運行命令,#servfox –s 640x480 –w 7070.
即已完成視頻服務器的建立,在和ARM 開發板連接的PC 機瀏覽器上,輸入開發板的IP 地址和Boa 服務器目錄下的網頁即可觀看攝像頭所采集的信息。
5、結論
本文設計實現的嵌入式Linux 的網絡視頻監控系統,是一種低成本的網絡視頻監控方案,而且可以直接連入以太網,通過瀏覽器即可觀看,畫面流暢,簡易方便,具有廣泛的應用價值。