姚莉 鄧丹君



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