嵌入式視頻監(jiān)控系統設計方案
2.3 視頻流網絡傳輸的實現
本系統視頻的網絡傳輸是基于面向連接的TCP協議來實現。TcP/IP協議數據傳輸可分為3個階段:建立連接,傳輸數據,斷開連接[6]。首先服務器通過socket()函數創(chuàng)建套接字,使用bind()函數將創(chuàng)建好的套接字與端口綁定,然后調用listen()函數使服務器處于監(jiān)聽狀態(tài),等待客戶端應用程序的連接請求??蛻舳藨贸绦蛲ㄟ^打開一個socket即套接字,來使用TCP服務。當服務器接收到用戶的連接請求后,服務器調用accept()函數建立雙方連接,響應客戶的請求,并創(chuàng)建新線程,該線程負責把數據發(fā)送給用戶。
3 嵌入式Web服務器的設計
目前,B/S模式的網絡結構因其具有先進的開發(fā)技術、優(yōu)越的可管理性和可維護性,以及模式簡單方便等優(yōu)點而成為最流行的應用方式"]。本系統采用的正是該結構,因而用戶通過嵌入式Web服務器,使用IE瀏覽器即可遠程訪問嵌入式設備,實現對現場的遠程監(jiān)。
Boa是Linux支持web服務器之一,它是一個單任務的http服務器,具有代碼結構簡單、支持動態(tài)CGI、“p服務,并且源代碼開放等優(yōu)點,因而特別適合在嵌入式系統中用做web服務器n]。從網上下載其源代碼Boa—o.94.13.tar.gz,其在本系統上的移植主要包括2個部分:src下的文件修改和config文件修改。
boa—o.94.13/src文件的修改:首先設置boa—o.94/Makefile文件中的編譯器變量:CC=/arm一1inux-gcc,CPP一/arnl_linux—gcc_E;并修改編譯方式:LDFLAGS=一g—static。然后在文件compat.h中找到宏定義#defineTIMEz0NELOFFSET(foo)foo##一>tm—gmtoff并修改為#define TIMEZONE一0FFSET(foo)f00->tm—gmtoff。接著便可在boa—o.94/src/下執(zhí)行make進行編譯,從而得到的可執(zhí)行程序為boa,使用串口將其下載到目標機上,完成移植。
boa—O。94/boa.conf文件的修改,由于boa必須以root身份啟動,所以將User nobody修改為User mot,Groupnogroup修改為Group r00t,即賦予管理員權限;修改服務器名字,即將ServerName www.your.org.here修改為serverName sm2440;修改DocumentRoot/var/www為
DocumentRoot/home/web,即設置HTML文檔的主目錄為/home/web;最后指明nime.types文件位置為Mime—Types/etc/milne.types;其他采用默認設置即可。最后將boa-0.94/boa.conf拷貝到/etc/boa/目錄下,配置好Web服務器,就可以進行遠程訪問了。
4 實現客戶端視頻數據接收應用程序
本系統的web客戶端采用Java Applet為用戶提供一個管理人口和顯示界面,Java Applet程序嵌入于HTML文檔并能在標準的瀏覽器中顯示運行,這種方式不用專門的開發(fā)軟件與網絡接口,是基于web網絡應用程序的理想選擇。本系統需要在顯示頁面中嵌入播放器程序實時播放前端獲取的監(jiān)控視頻。其中視頻數據接收是客戶端軟件設計的關鍵,其實現如下:
首先建立網絡通信,即創(chuàng)建套接字,輸入輸出流。然后分配接收緩沖區(qū),即:byte[]buffer—new byte[5 12*1024];
之后讀取圖像的頭信息,并確認圖像數據的正確性,即:int n=in.r∞d(bu“er,O,HDRLEN);
其中HDRLEN為信息頭長度,設置為50 B大小,通過對頭信息中包含的約定字符進行判斷,以確定是進一步接收圖像數據,還是重新接收頭信息。如果能正確讀取圖像頭信息,就證明此次接收的視頻數據流是正確的,接著就可以把頭信息后的圖像數據寫入緩沖區(qū),供播放顯示:
n=HDRLEN;
r—in.read(buffer,n,buffer.1ength-n);由于視頻流緩沖區(qū)內接收的幅靜態(tài)圖像數據包含了圖像頭信息,因此需要將圖像數據拷貝到另一緩沖區(qū)內,以獲得單獨的圖像數據:
byte[]buffeLimage=new byte[n];.
for(int i一0;in;i++)
buffer.image[i]=buffer[i+HDRLEN]I
接著從緩沖區(qū)buffer-image中讀人數據:
BufferedImage imagedata=
Imagel0.read(new ByteArrayInputStream(buffer—image)),
ImageIcon image—icon=new Image Icon(imageedate m-label.set Icon(image—icon),
系統通過循環(huán),實現不斷讀取,顯示圖像數據,用戶便可從主頁面上獲取前端采集到的實時視頻監(jiān)控數據,畫面流暢,無明顯延時和畫面停滯現象,達到監(jiān)控目的。
5 結束語
目前,嵌入式產品方興未艾口”。本文提出的這套嵌入式視頻監(jiān)控系統設計方案,采用性價比很高的ARM處理器與開源操作系統Linux相結合,具有高穩(wěn)定性、低成本、低功耗等諸多優(yōu)點,并且基于B/S模式,直接接入以太網,大量節(jié)省電纜開銷,即插即用,實現跨平臺監(jiān)控,為用戶提供了極大便利。本系統很好地體現了智能化、集成化、網絡化、跨平臺等優(yōu)點,可廣泛用于智能家居、智能交通、工廠等制造單位及需實時監(jiān)控場所。
評論