摘 要:視頻監(jiān)控正朝著嵌入式、網(wǎng)絡(luò)化、無線化的方向發(fā)展。嵌入式視頻監(jiān)控系統(tǒng)已成當(dāng)今數(shù)字視頻研究的熱點之一,如何加強視頻監(jiān)控實時性和準(zhǔn)確性是視頻監(jiān)控技術(shù)中的主要重點。本系統(tǒng)采用FFmpeg作為編碼工具,以ARM平臺為基礎(chǔ),結(jié)合嵌入式技術(shù)、視頻壓縮編碼技術(shù)、網(wǎng)絡(luò)傳輸技術(shù),設(shè)計一個低成本、高性能、易普及的嵌入視頻監(jiān)控系統(tǒng)。
關(guān)鍵詞:視頻監(jiān)控;FFmpeg;H.264
1 系統(tǒng)總體框架
視頻監(jiān)控以視頻編解碼技術(shù)、計算機網(wǎng)絡(luò)技術(shù)、數(shù)字信號處理技術(shù)和嵌入式系統(tǒng)為主要核心技術(shù)。本系統(tǒng)把從攝像機采集的模擬視頻信號通過視頻編碼器直接轉(zhuǎn)換成視頻流,并通過計算機網(wǎng)絡(luò)傳輸。具備視頻編碼處理、網(wǎng)絡(luò)通信、系統(tǒng)控制等強大功能,直接支持網(wǎng)絡(luò)視頻傳輸和網(wǎng)絡(luò)管理,使得監(jiān)控范圍達到前所未有的廣度。
本系統(tǒng)采用“采集端-服務(wù)端-接收端“的C/S架構(gòu),硬件平臺采用ARM嵌入式處理器和攝像頭,操作系統(tǒng)基于嵌入式Linux[1]。整個系統(tǒng)分成分為三個部分,分別為采集端、服務(wù)端、接收端。采集端將采集得到的視頻數(shù)據(jù)經(jīng)過處理,轉(zhuǎn)換成H.264格式。通過網(wǎng)絡(luò)在服務(wù)端進行轉(zhuǎn)發(fā),在接收端將視頻顯示出來,系統(tǒng)總體框架如圖1。
圖1 視頻監(jiān)控系統(tǒng)框架圖
采集端負責(zé)采集攝像頭數(shù)據(jù)并使用FFmpeg進行H.264的視頻編碼[2]。通過網(wǎng)絡(luò)向服務(wù)器發(fā)送視頻數(shù)據(jù)。服務(wù)器端負責(zé)接收來自采集端的視頻數(shù)據(jù),然后接收客戶端的視頻請求,向客戶端發(fā)送視頻數(shù)據(jù)。接收端為用戶客戶端,負責(zé)接收服務(wù)器視頻數(shù)據(jù)并且播放或者保存文件。
采集端是一個基于ARM的嵌入式系統(tǒng),操作系統(tǒng)使用Linux操作系統(tǒng),視頻編碼使用FFmpeg和H264提供的程序庫。采集端系統(tǒng)架構(gòu)如圖2。
圖2 采集端系統(tǒng)框架圖
本系統(tǒng)的視頻采集使用linux的video4linux2編程接口[3],而視頻編碼由FFmpeg+H264共同完成。在使用FFmpeg編碼之前,首先需要對FFmpeg庫進行初始化,注冊所有的編解碼器以及文件格式,設(shè)置編碼器碼率、幀速率、編碼像素格式等參數(shù),然后尋找編碼器并打開,打開編碼器之后才可以進行編碼[4]。使用FFmpeg編碼流程如圖3。
本系統(tǒng)中的網(wǎng)絡(luò)傳輸功能是一大重點。采集端將原始攝像頭視頻數(shù)據(jù)進過編碼后,以網(wǎng)絡(luò)方式傳輸?shù)椒?wù)器上。在使用網(wǎng)絡(luò)傳輸前需要對本機的網(wǎng)絡(luò)進行初始化。以下是部分初始化網(wǎng)絡(luò)程序[5]。
int sockfd = 0;
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
/*設(shè)置sockaddr_in結(jié)構(gòu)體中的相關(guān)參數(shù)*/
addr.sin_family = AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr= inet_a
ddr(SERVERIP);
/*創(chuàng)建socket*/
sockfd=socket(AF_INET,SOCK_STREAM,0);
/*調(diào)用connect函數(shù)主動發(fā)起對服務(wù)器的連接*/
if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) == -1){
perror("connect");
exit(1);
}
網(wǎng)絡(luò)連接的初始化完成,一旦connect函數(shù)連接服務(wù)器成功,就可以隨時與服務(wù)器進行數(shù)據(jù)收發(fā)。
至此,采集端已經(jīng)完成了一幀視頻數(shù)據(jù)的采集、壓縮、網(wǎng)絡(luò)傳輸這三個主要的過程。而視頻監(jiān)控的整個過程就是以上步驟的重復(fù)進行。正是由采集端傳輸?shù)囊粠粠曨l數(shù)據(jù),最終傳送到客戶端,不斷顯示圖像,達到視頻監(jiān)控效果。
2 結(jié)束語
本系統(tǒng)采用ARM嵌入式系統(tǒng)實現(xiàn)了視頻監(jiān)控中的視頻采集、編碼和傳輸三個重要功能。與眾多的視頻傳輸設(shè)計相比,本設(shè)計采用了現(xiàn)今業(yè)內(nèi)最常用的H.264視頻編解碼技術(shù)。具有一定的前沿性和比較高的市場價值。
參考文獻
[1]嵌入式Linux應(yīng)用開發(fā)標(biāo)準(zhǔn)教程(第二版)[M].北京:人民郵電出版社,2009.
[2]FFMPEG[Z].http://www.ffmpeg.com/[2012/9/28].
[3]Video4Linux2[Z].http://en.wikipedia.org/wiki/Video4Linux[2008/3/1].
[4]X264[Z].http://www.videolan.org/developers/x264.html[2005/12/12].
[5]UNIX網(wǎng)絡(luò)編程 卷1:套接字聯(lián)網(wǎng)API(第三版)[M].北京:人民郵電出版社,2010.
作者簡介:譚石堅(1981,5-),男,籍貫:廣東,碩士,主要研究方向是嵌入式系統(tǒng)設(shè)計,視頻編解碼,網(wǎng)絡(luò)安全等。