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