姚莉 鄧丹君
摘 要:將網(wǎng)絡(luò)技術(shù)和嵌入式技術(shù)相結(jié)合的遠(yuǎn)程視頻監(jiān)控系統(tǒng)是視頻采集技術(shù)的發(fā)展趨勢(shì),文中提出了一種基于對(duì)等網(wǎng)絡(luò)模型的嵌入式遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計(jì)方案。該方案將嵌入式系統(tǒng)和Web開(kāi)發(fā)技術(shù)相結(jié)合,再利用USB攝像頭作為視頻監(jiān)控系統(tǒng)的終端進(jìn)行圖像采集,并使用網(wǎng)絡(luò)TCP協(xié)議將其遠(yuǎn)程發(fā)送給服務(wù)器終端。相較于傳統(tǒng)的Client/Server網(wǎng)絡(luò)模型,本系統(tǒng)實(shí)現(xiàn)采用對(duì)等網(wǎng)絡(luò)模型,即確定發(fā)送命令的控制程序既可以是客戶端,又可以是服務(wù)端。文中選擇嵌入式開(kāi)發(fā)平臺(tái)ARM系列A8處理器進(jìn)行研究和設(shè)計(jì),并采用PC機(jī)下的Linux系統(tǒng)作為主機(jī)開(kāi)發(fā)環(huán)境。
關(guān)鍵詞:嵌入式;視頻監(jiān)控;網(wǎng)絡(luò)遠(yuǎn)程控制;對(duì)等網(wǎng)絡(luò)
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2016)05-00-03
0 引 言
網(wǎng)絡(luò)遠(yuǎn)程控制(Network Remote Control,NRC)是利用計(jì)算機(jī)網(wǎng)絡(luò)對(duì)遠(yuǎn)程計(jì)算機(jī)進(jìn)行操作的一種控制方式。計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)目前都在高速發(fā)展,現(xiàn)在監(jiān)控系統(tǒng)已經(jīng)發(fā)展到網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[1]。網(wǎng)絡(luò)視頻監(jiān)控具有數(shù)字視頻監(jiān)控和網(wǎng)絡(luò)傳輸技術(shù)的優(yōu)點(diǎn),其具有不受地理位置約束、擴(kuò)展方便簡(jiǎn)單、信息處理較容易等特點(diǎn),可以使遠(yuǎn)程的管理和維護(hù)變成現(xiàn)實(shí),只要是網(wǎng)絡(luò)覆蓋的地方,就能實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控[2]。嵌入式系統(tǒng)向網(wǎng)絡(luò)發(fā)展已成必然趨勢(shì),目前嵌入式系統(tǒng)對(duì)網(wǎng)絡(luò)協(xié)議如TCP/IP協(xié)議和HTTP協(xié)議的支持也越來(lái)越廣泛。
1 系統(tǒng)硬件設(shè)備選擇與配置
系統(tǒng)硬件設(shè)備選擇凌陽(yáng)嵌入式A8教學(xué)實(shí)驗(yàn)系統(tǒng)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。該實(shí)驗(yàn)箱基于ARM CortexTM-A8內(nèi)核的處理器S5PV210,該芯片又名“蜂鳥(niǎo)”(Hummingbird),是三星公司推出的一款適用于智能手機(jī)和平板電腦等多媒體設(shè)備的應(yīng)用處理器[3]。本系統(tǒng)使用了人機(jī)交互模塊的USB接口、多媒體模塊攝像頭接口及通信模塊以太網(wǎng)接口。
1.1 USB攝像頭
攝像頭屬于視頻類設(shè)備。在目前的Linux核心中,視頻部分的標(biāo)準(zhǔn)是Video for Linux(簡(jiǎn)稱V4L)。這個(gè)標(biāo)準(zhǔn)其實(shí)定義了一套接口,內(nèi)核、驅(qū)動(dòng)、應(yīng)用程序以這個(gè)接口為標(biāo)準(zhǔn)進(jìn)行交流。目前的V4L涵蓋了視、音頻流捕捉及處理等內(nèi)容,USB攝像頭也屬于它支持的范疇。
本系統(tǒng)所采用的嵌入式Linux操作系統(tǒng)如果需要使用USB攝像頭則必須在內(nèi)核配置時(shí)添加Video4Linux驅(qū)動(dòng)和對(duì)USB攝像頭驅(qū)動(dòng)模塊的支持。本系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)采用靜態(tài)加載以上驅(qū)動(dòng)。首先進(jìn)入Linux源代碼所在的目錄,在終端輸入make menuconfig命令,在基于Ncurses內(nèi)核配置圖形界面進(jìn)行內(nèi)核選項(xiàng)的配置。選中多媒體設(shè)備選項(xiàng)“Multimedia device->”,進(jìn)入多媒體設(shè)備配置界面,選中“Video For Linux”,加載Video4Linux模塊,就可以使內(nèi)核實(shí)現(xiàn)對(duì)Video4Linux驅(qū)動(dòng)的支持,為視頻采集設(shè)備提供編程接口。在內(nèi)核配置主界面,選中USB支持選項(xiàng)“USB support—>”,選中“USB Multimedia device”選項(xiàng)下的“USB OV511 Camera support”,使內(nèi)核中加入OV511接口芯片的USB數(shù)字?jǐn)z像頭的驅(qū)動(dòng)支持。OV511 USB 攝像頭驅(qū)動(dòng)配置界面如圖1所示。
圖1 OV511 USB 攝像頭驅(qū)動(dòng)配置界面
1.2 開(kāi)啟幀緩沖設(shè)備
幀緩沖(Frame Buffer,F(xiàn)B)是Linux為顯示設(shè)備提供的一個(gè)接口,是把顯存抽象后的一種設(shè)備,它允許上層應(yīng)用程序在圖形模式下直接對(duì)顯示緩沖區(qū)進(jìn)行讀寫操作。由于FB設(shè)備驅(qū)動(dòng)為受限驅(qū)動(dòng),因此必須進(jìn)行設(shè)備開(kāi)啟。本系統(tǒng)開(kāi)發(fā)環(huán)境采用發(fā)行版Linux操作系統(tǒng)Ubuntu10.10,Ubuntu下啟用FB設(shè)備的一般步驟如下所示:
安裝v86d和hwinfo兩個(gè)包查看顯卡是否支持,并設(shè)置本機(jī)支持模式。
修改啟動(dòng)文件/etc/default/grub,如圖2所示。
圖2 修改啟動(dòng)文件圖
修改modules文件/etc/initramfs-tools/modules,如圖3所示。
圖3 修改modules文件
更新以上兩個(gè)文件并重啟系統(tǒng),即可查看到FB設(shè)備,具體如圖4所示。
圖4 查看FB設(shè)備
2 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)軟件由攝像頭驅(qū)動(dòng)模塊、圖像采集模塊、網(wǎng)絡(luò)傳輸模塊和網(wǎng)絡(luò)服務(wù)器模塊組成[4]。攝像頭驅(qū)動(dòng)模塊使得攝像頭為應(yīng)用程序編寫提供系統(tǒng)編程接口。功能主要包括攝像頭設(shè)備信息的獲取與設(shè)置、設(shè)備的打開(kāi)和關(guān)閉、信號(hào)通道選擇、窗口初始化等。圖像采集模塊的作用是使用編程接口獲取攝像頭采集來(lái)的圖像信息并進(jìn)行暫時(shí)存儲(chǔ)。服務(wù)器通過(guò)網(wǎng)絡(luò)傳輸模塊與遠(yuǎn)程監(jiān)控PC機(jī)端進(jìn)行信息交流。
2.1 V4L圖像信息采集流程
V4L圖像信息采集流程分為如下幾步:
(1)打開(kāi)攝像頭設(shè)備
int vd ->fd = open(“/dev/video0”, O_RDWR);
(2)讀video_capability 中的信息,成功后可讀取vd->capability各分量ioctl(vd ->fd, VIDIOCGCAP, &(vd->capability));
(3)讀video_picture中的信息,成功后可讀取圖像的屬性ioctl(vd ->fd, VIDIOCGPICT, &(vd->picture));
(4)初始化channel
int i;
for (i = 0; i < vd ->capability.channels; i++) {
vd ->channel[i].channel = i;
ioctl(vd ->fd, VIDIOCGCHAN,&(vd->channel[i]));}
(5)用mmap(內(nèi)存映射)方式進(jìn)行圖像信息采集
vd ->map = mmap(0, vd->mbuf.size, PROT_READ|PROT_WRITE,MAP_SHARED, vd->fd, 0));
(6)mmap方式下真正做視頻截取的 VIDIOCMCAPTURE對(duì)采集的圖像信息進(jìn)行處理:
ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap));若調(diào)用成功,開(kāi)始一幀的視頻截取,是否截取完畢留給VIDIOCSYNC來(lái)判斷。
ioctl(vd->fd, VIDIOCSYNC, &frame) ;
調(diào)用VIDIOCSYNC等待一幀截取結(jié)束。若成功,表明一幀視頻截取已完成??梢蚤_(kāi)始做下一次VIDIOCMCAPTURE。frame是當(dāng)前截取的幀序號(hào)。
(7)關(guān)閉設(shè)備
close(vd ->fd);
系統(tǒng)的整體圖像信息采集流程如圖5所示。
圖5 圖像信息采集流程圖
2.2 網(wǎng)絡(luò)編程
Linux中的網(wǎng)絡(luò)編程通過(guò)Socket(套接字)接口實(shí)現(xiàn),Socket是一種文件描述符。它有三種類型,本系統(tǒng)采用流式套接字(SOCK_STREAM)。流式套接字可以提供可靠的、面向連接的通訊流,使用TCP協(xié)議保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。基于TCP協(xié)議的服務(wù)器端實(shí)現(xiàn)步驟如下:
(1)創(chuàng)建一個(gè)socket
sockfd=socket(AF_INET,SOCK_STREAM,0);
(2)綁定IP 地址、端口等信息到socket上
bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
(3)設(shè)置允許的最大連接數(shù)n
listen(sockfd,n);
(4)接收客戶端上來(lái)的連接
accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
(5)接收數(shù)據(jù)
recv(new_fd,buffer,strlen(buffer),0);
(6)關(guān)閉網(wǎng)絡(luò)連接
close(sockfd);
基于TCP協(xié)議的客戶端實(shí)現(xiàn)步驟如下:
(1)創(chuàng)建一個(gè)socket
sockfd=socket(AF_INET,SOCK_STREAM,0);
(2)設(shè)置要連接的服務(wù)器IP地址和端口等屬性。
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr=*((struct in_addr *)host->h_addr);
(3)連接服務(wù)器
connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
(4)發(fā)送數(shù)據(jù)
send(sockfd,buffer,strlen(buffer),0);
(5)關(guān)閉網(wǎng)絡(luò)連接
close(sockfd);
以上服務(wù)器端和客戶端的實(shí)現(xiàn)沒(méi)有固化單一功能,即客戶端不必依賴于服務(wù)器的命令。本系統(tǒng)實(shí)現(xiàn)了只要服務(wù)器開(kāi)啟后,服務(wù)器與客戶端之間就可以相互發(fā)送命令實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)墓δ?。即?shù)據(jù)的傳輸方向不是單向地由客戶端發(fā)送給服務(wù)器。并且服務(wù)器與客戶端的程序可以任意選擇在PC機(jī)或者A8機(jī)上安裝啟動(dòng)。
2.3 對(duì)等網(wǎng)絡(luò)模型
對(duì)等網(wǎng)絡(luò)又稱工作組,即網(wǎng)絡(luò)中各設(shè)備的功能相同,無(wú)主從之分,既可作為服務(wù)器端設(shè)定共享資源供網(wǎng)絡(luò)中其他設(shè)備所使用,又可以作為客戶端。對(duì)等網(wǎng)絡(luò)是小型局域網(wǎng)常用的組網(wǎng)方式,在對(duì)等網(wǎng)絡(luò)中沒(méi)有專用的服務(wù)器,也沒(méi)有專用的客戶端[5]。本系統(tǒng)所采用的對(duì)等網(wǎng)絡(luò)模型打破了傳統(tǒng)的C/S網(wǎng)絡(luò)模型中依賴中心服務(wù)器的模式,實(shí)現(xiàn)了發(fā)送命令的控制程序既可以是客戶端,也可以是服務(wù)器端。因此,監(jiān)控端既可以設(shè)定為客戶端也可以設(shè)定為服務(wù)器端。
3 系統(tǒng)實(shí)現(xiàn)
本系統(tǒng)軟件由攝像頭驅(qū)動(dòng)模塊、圖像采集模塊、網(wǎng)絡(luò)傳輸模塊和網(wǎng)絡(luò)服務(wù)器模塊組成。本系統(tǒng)主要功能包括USB攝像頭設(shè)備和FB設(shè)備的啟用、視頻圖像信息采集形成圖片文件、TCP/IP網(wǎng)絡(luò)數(shù)據(jù)傳輸和監(jiān)控端使用FB設(shè)備進(jìn)行圖像顯示等。在網(wǎng)絡(luò)信息接通后,圖6所示為被監(jiān)控端接入U(xiǎn)SB攝像頭設(shè)備后進(jìn)行視頻圖像信息采集顯示。圖7所示為主要源碼文件及監(jiān)控視頻截圖。
4 結(jié) 語(yǔ)
本文主要介紹了在Linux操作系統(tǒng)下使用Cortex-A8教學(xué)實(shí)驗(yàn)箱設(shè)計(jì)實(shí)現(xiàn)的遠(yuǎn)程視頻監(jiān)控系統(tǒng)。本系統(tǒng)實(shí)現(xiàn)了嵌入式設(shè)備驅(qū)動(dòng)加載、視頻圖像信息采集、網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)和傳輸?shù)裙δ?,已?jīng)完成了遠(yuǎn)程監(jiān)控的基本功能。本系統(tǒng)是基于對(duì)等網(wǎng)絡(luò)模型進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)的,即客戶端對(duì)服務(wù)器端沒(méi)有絕對(duì)的依賴,端口的應(yīng)用程序既可以看做是服務(wù)器端也可以看做是客戶端。對(duì)于本系統(tǒng)后續(xù)的研究設(shè)計(jì),仍有可以進(jìn)一步擴(kuò)展和改進(jìn)的地方,例如可以在本系統(tǒng)上擴(kuò)展V4L2接口和MJPG-Streamer的使用可以提高監(jiān)控畫(huà)面的清晰度和流暢度。
參考文獻(xiàn)
[1]楊光. ARM嵌入式遠(yuǎn)程監(jiān)控技術(shù)研究[J].數(shù)字技術(shù)與應(yīng)用, 2013(3):7-9.
[2] 羅孝騫.計(jì)算機(jī)網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控系統(tǒng)的應(yīng)用[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2013(11):5-6.
[3] 溫淑鴻.嵌入式Linux系統(tǒng)原理-基于ARM Cortex-A8處理器[M].北京:北京航空航天大學(xué)出版社,2014.
[4]關(guān)麗敏, 李思慧, 李偉剛.STM32F107VC的嵌入式遠(yuǎn)程監(jiān)控終端設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2014(6):72-75.
[5] 張啟飛,張尉冬,李文娟,等.基于對(duì)等網(wǎng)絡(luò)的面向小文件的云存儲(chǔ)系統(tǒng)[J].浙江大學(xué)學(xué)報(bào)(工學(xué)版),2013,47(1):8-14.