基于ARM的移動視頻監(jiān)控系統
摘要: 將嵌入式Linux和無線網絡引入到視頻監(jiān)控系統,闡述了系統的硬件組成;介紹了USB無線網卡驅動實現的過程;從嵌入式Linux開發(fā)環(huán)境的搭建、嵌入式流媒體服務器的設計和動態(tài)網頁的設計等方面介紹了軟件系統的具體實現過程;對動態(tài)網頁設計所涉及到的雙緩沖技術進行了詳細介紹。實現結果表明,該系統具有可靠性高、體積小、成本低和使用便利等特點,適用于移動視頻監(jiān)控等實際場合。
Abstract:
Key words :
摘要:將嵌入式Linux和無線網絡引入到視頻監(jiān)控系統,闡述了系統的硬件組成;介紹了USB無線網卡驅動實現的過程;從嵌入式Linux開發(fā)環(huán)境的搭建、嵌入式流媒體服務器的設計和動態(tài)網頁的設計等方面介紹了軟件系統的具體實現過程;對動態(tài)網頁設計所涉及到的雙緩沖技術進行了詳細介紹。實現結果表明,該系統具有可靠性高、體積小、成本低和使用便利等特點,適用于移動視頻監(jiān)控等實際場合。
傳統的視頻監(jiān)控系統一般采用PC服務器的C/S(Client/Server)結構,視頻服務器由計算主機和許多存放視頻的磁盤陳列組成,專門用于視頻的存儲和傳輸。流式傳輸采用的是邊接收邊播放的原則,這需要將多媒體的編、解碼和傳輸技術很好地結合在一起。目前多媒體的編解碼技術如MPEG-4,H.264等,可以以較小的帶寬開銷來實現較高質量的視頻傳輸,然而目前的傳輸技術卻無法滿足移動視頻監(jiān)控的需求,因為設備的移動速度和所在位置都會嚴重影響到傳輸。傳統流媒體系統體積大、成本高、可靠性低且移植性差,不能滿足這種特殊場合的應用要求。
針對傳統監(jiān)控技術的不足,本文提出了基于ARM的移動觀頻監(jiān)控的設計與實現,設計了一種專門功能、結構簡單的流媒體服務器;采用Boa作為Web服務器,并通過瀏覽器來監(jiān)控,實現跨平臺監(jiān)視;采用雙緩沖技術,確保用戶能夠得到較好、較穩(wěn)定的播放質量;利用USB無線網卡實現無線上網,免去布線的煩惱,方便地實現了移動視頻監(jiān)控的功能。
1 系統硬件設計
硬件平臺是整個系統運作的基礎。本系統主要由流媒體服務單元、USB無線網卡、無線路由、攝像頭和監(jiān)控端組成。流媒體服務單元是整個系統的核心,主要由嵌入式Linux、嵌入式處理器和外圍器件組成。
嵌入式處理器采用Intel XScale結構的PXA27嵌入式微處理器,最高主頻可達* MHz;加入wireless MMX技術,大大提升了多媒體處理能力;加入Intel SpeedStep動態(tài)管理電源技術,在保證CPU性能的情況下,最大限度地降底移動設備的功耗。在處理器豐富資源的基礎上,本系統擴展了64 MB Nand FLASH,64 MB SDRAM,16 MB Nor FLASH,4個USB主接口以及一個從接口。USB一主接口接攝像頭,用于采集視頻數據;USB一主接口接無線網卡,用于發(fā)送視頻數據。無線網卡采用了TCP/IP、NETBEUI傳輸協議,傳輸速率為11 Mb/s,5.5 Mb/s,2 Mb/s,1 Mb/s。其最大覆蓋范圍為35~100 m(室內)、100~300 m(室外),能較好地滿足移動視頻監(jiān)控的要求。本系統硬件組成圖如圖1所示。
以PXA270為核心接收攝像頭采集到的視頻數據,經過編碼后通過無線網卡發(fā)送,再經由無線路由接入以太網,用戶通過Internet接收到視頻信息。
2 USB無線網卡驅動
在Linux系統中,提供了主機側和設備側視角的USB驅動框架。從主機側角度而言,需要編寫的USB驅動程序包括主機控制器驅動和設備驅動兩大類。主機控制器驅動程序屬于USB驅動程序的核心,這部分在Linux內核源碼中已經有很好的支持。本節(jié)將重點介紹USB無線網卡設備驅動的實現。
2.1 USB驅動的注冊和注銷
usb_ids描述了這個USB驅動所支持的USB設備列表。
2.2 探測和斷開函數
在編寫USB無線網卡設備驅動時,很重要的一步是probe()和disconnect()函數,即探測和斷開函數,它們分別在設備被插入和拔出的時候被調用,用于初始化和釋放硬件資源。
2.3 USB請求塊(URB)
USB無線網卡本身的驅動部分的讀寫等操作流程有其特殊性,即以USB請求塊(URB)來貫穿始終。URB是USB主機與無線網卡設備通信的電波。
3 系統軟件設計
基于ARM的移動視頻監(jiān)控的軟件設計包括嵌入式Linux系統開發(fā)環(huán)境的搭建與移動視頻監(jiān)控軟件設計兩大部分。
3.1 基于ARM的嵌入式Linux開發(fā)平臺
本方案采用了Linux嵌入式操作系統,以Linux2.6.24為基礎進行裁減定制自己的內核,在編譯內核時保留必須的文件系統、存儲器、串口、USB、以太網驅動,將攝像頭、USB無線網卡驅動以模塊的形式編譯,以減少編譯后內核的大小。Bootloader采用blob,燒寫blob后利用tftp協議實現Linux內核和文件系統在Flash上的燒寫。在Redhat 9安裝Arm-linux-gcc。建立交叉編譯環(huán)境,實現流媒體服務器和Boa在PAX270上的搭建。鑒于現在燒寫技術已經很成熟,故不詳細討論。
3.2 移動視頻監(jiān)控軟件的設計
移動視頻監(jiān)控軟件完成的主要功能有:設計流媒體服務器采集并傳輸攝像頭拍攝的視頻信息;構建嵌入式Web服務器Boa;動態(tài)網頁的設計以及流媒體服務器、web服務器與瀏覽器之間的通信等任務。因此系統軟件框架如圖2所示。
3.2.1 流媒體服務器的設計
流媒體服務器主程序用于開放某個視頻服務器端口,并不斷*端口,如有連接請求則建立連接,建立后流媒體服務進程將不斷向端口提供采集到的視頻數據流同時也接收客戶端發(fā)送過來的視頻調節(jié)命令參數。流媒體服務器主程序流程圖如圖3所示。
(1)采集視頻數據
系統是在嵌入式Linux系統平臺上采用Video4Linux編程來采集視頻的。一般攝像頭是直接讀視頻設備,采集到視頻數據并存在文件中。對文件進行操作,這樣程序運行效率會很低。本系統摒棄這種方法,采用mmap(內存映射)方式截取視頻數據。mmap()系統調用使得進程之間通過映射同一個普通文件實現共享內存。普通文件被映射到進程地址空間后,進程可以向訪問普通內存一樣對文件進行訪問,不必再調用read(),write()等操作。采用共享內存通信的一個顯而易見的好處是效率高,因為進程可以直接讀寫內存,而不需要任何數據的拷貝。
(2)傳輸視頻數據
本系統通過網絡傳輸視頻數據,用套接字(Socket)編程實現。
(3)采集線程與傳輸線程同步
流媒體服務器的設計有個關鍵點:保證連續(xù)不斷的視頻流。針對這一點,本系統采用多線程編程,采集和傳輸并行執(zhí)行。用互斥量和標志位來實現采集線程和傳輸線程的同步。
采集數據時給互斥量加鎖,直到當前幀采集完并填充完當前幀頭結構體才解鎖互斥量,再開始傳輸。同理,傳輸當前幀時采集線程等待,直到當前幀傳輸完。采集完兩幀數據傳輸第二幀。傳輸完成后,采集完第三幀傳輸第三幀。依此循環(huán),采集完第N幀傳輸第N幀。此時實際只傳輸了第2幀到第N幀,即N-1幀。
用戶的視覺反應需要時間,此丟棄第一幀的設計思想并不會使畫面失真。反而連續(xù)不斷的視頻流傳輸到客戶端為用戶能夠獲得良好的視頻質量打下了基礎。
采集線程:
3.2.2 動態(tài)網頁的設計
嵌入式Web服務器是Web服務器簡化后的專用系統。本系統選用適合嵌入式系統的Boa Web服務器。Boa是一個單任務的HTTP服務器,支持能夠實現動態(tài)Web技術的Java Script技術,源代碼開放,性能高。同時服務器本身所占空間很小,因而十分適用于嵌入式系統。
鑒于Boa移植技術已經很成熟,故不詳細討論。
Applet是能夠嵌入到一個HTML頁面中,且可通過Web瀏覽器下載和執(zhí)行的一種Java類。它是Java技術容器(container)的一種特定類型。Applet可以通過網絡傳輸,由瀏覽器自動裝載并執(zhí)行。這恰恰非常符合本系統的要求,因此選用Applet來很好地實現動態(tài)網頁,打開網頁就可以看到視頻數據,方便快捷。
(1)設計流程
Applet不能單獨運行,需要嵌入在網頁中借助瀏覽器的解釋。必須要創(chuàng)建一個HTML文件來告訴瀏覽器需裝載什么以及如何運行它。其執(zhí)行順序如下:
?、贋g覽器裝入URL;
?、跒g覽器裝入HTML文檔;
?、蹫g覽器裝入Applet類;
?、転g覽器運行Applet。
本系統Java Applet實現三個功能:視頻數據通過Socket傳送到客戶端顯示;將客戶端調節(jié)視頻帶參數發(fā)送到服務器;將客戶端點擊的運動控制參數發(fā)送到服務器。其中init和start函數在Applet開始執(zhí)行時調用,通過start創(chuàng)建2個線程:用于socket通信;提供用戶界面顯示視頻和相應用戶操作。用戶界面設計用到Sun的SwingWorker類庫。
(2)雙緩沖技術
雙緩沖技術主要應用于屏幕閃爍現象的消除。在一幀圖像的繪制過程中,如果一幀圖像的繪制時間大于屏幕的刷新時間,就會造成視覺上不連貫的效果。繪制時可在內存中建立兩個圖形緩沖區(qū),其中一個緩沖區(qū)(前臺)用于存放顯示的當前幀,并在屏幕上顯示;同時在另一個緩沖區(qū)中完成下一幀的繪制。因為畫面的繪制過程是在用戶不可見的情況下進行,自然也就消除了這種閃爍現象。
為了保證用戶的觀看質量,本系統在動態(tài)網頁的設計中引入這種雙緩沖技術。采用Java語言中component類的一個可用于創(chuàng)建圖形緩沖區(qū)的方法createImage(int width,int height),其參數為繪制區(qū)域的大小。該方法返回一個大小為繪制區(qū)域的Image對象。調用該對象的getGraphics()方法得到一個GraphiCS對象,將它視為后臺的Graphics對象。此后,可調用Graplaics類的各種繪圖方法,以繪制所需的畫面。此時,所有的操作都是在后臺的Image對象中進行的,并沒有顯示到屏幕上。當繪制完成后,再調用前臺Graphics對象的drawlmage(Image img,int x,int y,ImageObserver observer)方法將已準備好的Image顯示到屏幕上。其中Image參數就是createImage方法所返回后臺的Image對象,ImageObserver參數是與前臺Graphics對象相關的Component對象或其派生類對象。
4 系統測試
在PXA270上搭建Boa,將Java Applet小程序編譯后生成的.class執(zhí)行文件、HTML腳本index.html及相關文件拷貝到/var/www/下。將編譯好的流媒體服務器的二進制文件下載到PXA270上。加載攝像頭和USB無線網卡驅動,運行boa,再運行流媒體服務器。在PC端打開瀏覽器輸入PXA270的IP地址,就可以看到網頁監(jiān)控的畫面,畫面清晰且視頻流暢,如圖4所示。
5 結 語
本文充分利用多媒體技術和嵌入式技術各自的特點,介紹了一種用ARM實現移動視頻監(jiān)控的方法,給出了軟硬件設計結構及USB無線網卡驅動的具體實現過程。設計了流媒體服務器,搭建了Boa作為Web服務器及實現了動態(tài)網頁。利用USB無線網卡免去了布線的煩惱;利用B/S結構使得可以通過瀏覽器來監(jiān)控,實現跨平臺監(jiān)視;利用雙緩沖技術,實現較高的視頻質量。基于ARM的移動視頻監(jiān)控系統使得操作簡單,攜帶方便,可靠性高,成本低,具有良好的開發(fā)及應用前景。
此內容為AET網站原創(chuàng),未經授權禁止轉載。