3 G網(wǎng)絡(luò)的移動(dòng)機(jī)器人遠(yuǎn)程監(jiān)控系統(tǒng)
視頻數(shù)據(jù)傳輸通過(guò)Socket實(shí)現(xiàn),且直接在服務(wù)器設(shè)備端與Web客戶端之間進(jìn)行傳輸,通過(guò)視頻流服務(wù)器實(shí)現(xiàn)對(duì)視頻的開(kāi)關(guān)控制。由于視頻傳輸是連續(xù)的過(guò)程,所以客戶端和服務(wù)器端都通過(guò)線程來(lái)實(shí)現(xiàn)發(fā)送與接收。接收線程由函數(shù)pthread_create((servers[id].threadID),NULL,server thread,&(servers[id]))創(chuàng)建。
視頻的采集和傳輸是在兩個(gè)線程中實(shí)現(xiàn)的,它們共享一個(gè)緩沖池。這兩個(gè)線程都是在視頻采集服務(wù)器端的程序啟動(dòng)時(shí)創(chuàng)建并運(yùn)行的。其中采集視頻圖像的線程不斷通過(guò)攝像頭采集現(xiàn)場(chǎng)圖像,經(jīng)過(guò)JPEG壓縮后存放到緩沖池中,而傳輸視頻數(shù)據(jù)的線程創(chuàng)建一個(gè)Socket來(lái)監(jiān)聽(tīng)等待遠(yuǎn)程客戶的連接請(qǐng)求。當(dāng)有客戶發(fā)送連接請(qǐng)求并建立連接后,就通過(guò)該連接向遠(yuǎn)程客戶發(fā)送視頻數(shù)據(jù),而發(fā)送的視頻數(shù)據(jù)就是從緩沖池中獲取的。也就是說(shuō),在視頻采集服務(wù)器端,視頻數(shù)據(jù)傳輸所需要的一切都已經(jīng)準(zhǔn)備好,就等著客戶的請(qǐng)求,一旦建立連接,就可以發(fā)送視頻數(shù)據(jù),從而實(shí)現(xiàn)較快的速度和較高的效率。
視頻采集和傳輸?shù)墓ぷ髁鞒虉D如圖2所示。本文引用地址:http://cafeforensic.com/article/148051.htm
2.2 遠(yuǎn)程控制的實(shí)現(xiàn)
為了監(jiān)控界面能被通用瀏覽器打開(kāi),需要移植Web服務(wù)器Boa。Boa服務(wù)器是一款小型開(kāi)源的嵌入式Web服務(wù)器,交叉編譯后的可執(zhí)行代碼大小約為60 KB,在Linux3.0.1內(nèi)核下運(yùn)行時(shí)占用的內(nèi)存大小約為1.7 MB。其功能較為強(qiáng)大,支持身份認(rèn)證、CGI動(dòng)態(tài)Web技術(shù)等。它不像傳統(tǒng)的Web服務(wù)器那樣為每個(gè)訪問(wèn)連接開(kāi)啟一個(gè)進(jìn)程,只能依次完成用戶的請(qǐng)求,即單進(jìn)程響應(yīng)多路請(qǐng)求,因此,Boa在同等硬件條件下相對(duì)于其他Web服務(wù)器表現(xiàn)出更快的速度,節(jié)省更多的資源。
通用網(wǎng)關(guān)接口(CGI)是用于Web服務(wù)器與外部應(yīng)用程序之間信息交互的標(biāo)準(zhǔn)接口。CGI可以使外部程序處理客戶端傳來(lái)的表單和數(shù)據(jù),并對(duì)此作出某種反應(yīng)。這種反應(yīng)可以是HTML文件、圖片等可以在瀏覽器窗體上出現(xiàn)的任何數(shù)據(jù),也可以是對(duì)服務(wù)器端硬件資源的控制。
調(diào)用CGI程序的方法主要有兩種:
①GET方法,CGI程序從環(huán)境變量QUERY_STRING中獲得數(shù)據(jù);
②POST方法,Web服務(wù)器通過(guò)STDIN向CGI程序傳輸數(shù)據(jù),數(shù)據(jù)量超過(guò)1024字節(jié)時(shí)采用此方法。
本系統(tǒng)采用GET方法。
在串口應(yīng)用程序中,數(shù)據(jù)的獲取通過(guò)以下代碼實(shí)現(xiàn):
……
char*data;
data=getenv(“QUERY STRING”);
……
評(píng)論