徐繼富,張秋林
(空軍工程大學(xué)電訊工程學(xué)院,陜西 西安 710077)
進(jìn)入21世紀(jì),視頻監(jiān)控技術(shù)的應(yīng)用日趨廣泛。然而,目前的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)多是以DSP芯片或者ARM9芯片為核心開(kāi)發(fā)的?;贒SP芯片的視頻監(jiān)控系統(tǒng)雖然在視頻信號(hào)處理上優(yōu)勢(shì)明顯,但其在智能化控制上的短板極大地限制了它的應(yīng)用;基于ARM9的監(jiān)控系統(tǒng)雖然能夠克服DSP芯片的不足,但是其在視頻信號(hào)處理能力上的不足,使其不得不依靠專業(yè)的多媒體芯片來(lái)完成視頻信號(hào)的處理,而這無(wú)疑將增加制造成本。然而,新一代的ARM11處理器由于其內(nèi)嵌了多媒體處理模塊MFC,使其在視頻監(jiān)控系統(tǒng)的開(kāi)發(fā)中具有極大的優(yōu)勢(shì)。因此,基于ARM11的視頻監(jiān)控系統(tǒng)的研究成為目前視頻監(jiān)控系統(tǒng)研究的熱點(diǎn)。本文介紹的視頻監(jiān)控系統(tǒng)主要是根據(jù)某單位的項(xiàng)目需求而進(jìn)行的研發(fā)。
監(jiān)控系統(tǒng)包括監(jiān)控前端、監(jiān)控終端和網(wǎng)絡(luò)三個(gè)部分,監(jiān)控前端是一個(gè)運(yùn)行Linux操作系統(tǒng)的嵌入式系統(tǒng),它通過(guò)S3C6410接收攝像頭采集到的數(shù)據(jù),并傳送給硬件編解碼(MFC)模塊,并把得到的經(jīng)過(guò)H.264壓縮的數(shù)據(jù)打包發(fā)送到IP網(wǎng)絡(luò)上,監(jiān)控終端(PC機(jī))通過(guò)網(wǎng)絡(luò)接收數(shù)據(jù)包,經(jīng)過(guò)解碼實(shí)時(shí)播放??傮w構(gòu)架如圖1所示。
圖1 基于ARM11的視頻監(jiān)控系統(tǒng)
在該網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中,監(jiān)控前端主要由視頻采集模塊、主控制模塊和網(wǎng)絡(luò)傳輸模塊等組成。其硬件框架[1-2]如圖 2 所示。
圖2 硬件結(jié)構(gòu)框圖
本系統(tǒng)中S3C6410處理器用于接收控制攝像頭所獲取的視頻信號(hào),其內(nèi)部集成有用于進(jìn)行基于H.264壓縮編碼的多媒體編解碼器(MFC)。此外,JTAG主要用于程序的下載;SDRAM用于存取系統(tǒng)運(yùn)行時(shí)的程序;NAND Flash用于存儲(chǔ)固化程序;串口用于調(diào)試程序和打印輸出信息。
系統(tǒng)主芯片采用最新的ARM11處理器S3C6410。Flash為32 Mbyte的NAND型,存放有嵌入式視頻采集前端的根文件系統(tǒng)、啟動(dòng)代碼和內(nèi)核代碼。并且在Flash管理方面,根文件系統(tǒng)采用的是最新的YAFFS可讀寫文件系統(tǒng)。為了使本系統(tǒng)能夠穩(wěn)定運(yùn)行,本系統(tǒng)采用2片共64 Mbyte的SDARM,這樣就可流暢地運(yùn)行Linux系統(tǒng)及應(yīng)用程序。網(wǎng)卡采用AX88796以太網(wǎng)控制器,該網(wǎng)卡是10/100 Mbit/s自適應(yīng)通信速率,通過(guò)它可實(shí)現(xiàn)以太網(wǎng)的物理層和數(shù)據(jù)鏈路層的連接。攝像頭采用市場(chǎng)上普通的模擬攝像頭,通過(guò)SAA7113芯片,攝像頭采集的模擬信號(hào)將被轉(zhuǎn)化成數(shù)字信號(hào)傳送給MFC模塊。
監(jiān)控前端的軟件設(shè)計(jì)由嵌入式系統(tǒng)構(gòu)建和應(yīng)用軟件組成。嵌入式系統(tǒng)部分包括Bootloader、Linux內(nèi)核、交叉編譯器、驅(qū)動(dòng)等,具體構(gòu)架如圖3所示。
圖3 嵌入式系統(tǒng)軟件結(jié)構(gòu)框圖
基本的嵌入式運(yùn)行環(huán)境由引導(dǎo)程序、Linux內(nèi)核和設(shè)備驅(qū)動(dòng)程序構(gòu)成。應(yīng)用層軟件通過(guò)控制Camera IF接口接收攝像頭(SAA7113)采集的數(shù)據(jù),并將其傳送給硬件編解碼(MFC)模塊;然后把從MFC模塊得到的H.264碼流打包發(fā)送到IP網(wǎng)絡(luò)上;監(jiān)控終端通過(guò)網(wǎng)絡(luò)接收視頻數(shù)據(jù)包,并解碼實(shí)時(shí)播放。
本系統(tǒng)采用Linux2.6.21作為嵌入式平臺(tái)的操作系統(tǒng)。在對(duì)Linux內(nèi)核進(jìn)行裁剪后,保留了本系統(tǒng)所需的NAND Sevice Support、MTD分區(qū)、UDP協(xié)議以及套接字、NFS文件系統(tǒng)、framebuffer等驅(qū)動(dòng)。通過(guò)運(yùn)用交叉編譯器編譯,即可得到ARM處理器能夠運(yùn)行的文件。再將鏡像文件通過(guò)Bootloader下載到目標(biāo)板的Dataflash中[3]。
應(yīng)用層軟件是本系統(tǒng)的核心,主要功能是響應(yīng)用戶的連接請(qǐng)求、視頻采集、編碼壓縮和數(shù)據(jù)發(fā)送[4]。該程序的實(shí)現(xiàn)過(guò)程主要包括2個(gè)線程:第1個(gè)為主線程,第2個(gè)線程主要任務(wù)是處理用戶的連接。
第1個(gè)線程的流程如圖4所示。
圖4 主函數(shù)流程圖
第2個(gè)線程的流程如圖5所示。
圖5 用戶線程流程圖
3.2.1 網(wǎng)絡(luò)傳輸模塊
網(wǎng)絡(luò)傳輸模塊的功能是為了實(shí)現(xiàn)H.264視頻碼流的傳輸?,F(xiàn)行的網(wǎng)絡(luò)通信協(xié)議主要有TCP/IP協(xié)議和UDP協(xié)議。為了提高視頻碼流的傳輸速度和實(shí)時(shí)性,本設(shè)計(jì)采用UDP協(xié)議作為C/S模型的網(wǎng)絡(luò)通信協(xié)議。在監(jiān)控前端,網(wǎng)絡(luò)編程通過(guò)socket接口進(jìn)行,通過(guò)listen()函數(shù)和send()函數(shù)完成客戶端的監(jiān)聽(tīng)、連接的建立和數(shù)據(jù)的發(fā)送等功能[5]。網(wǎng)絡(luò)編程過(guò)程中用到的socket函數(shù)主要有:
1)int listen(SOCKET s,int backlog)
listen函數(shù)的作用是將制定的套接字設(shè)置為偵聽(tīng)模式。其中,第1個(gè)參數(shù)是套接字描述符;第2個(gè)參數(shù)(backlog)是等待連接隊(duì)列的最大長(zhǎng)度。
2)int bind(SOCKET s,const struct sockaddr FAR*name,int namelen)
通過(guò)bind函數(shù),將創(chuàng)建的套接字綁定在本地的某個(gè)地址或端口上。參數(shù)SOCKET用來(lái)指定需要綁定的套接字,而參數(shù)name主要用來(lái)指定該套接字的本地地址信息;參數(shù)namelen則用于指定該地址信息結(jié)構(gòu)的長(zhǎng)度。
3)int send(SOCKET s,const char FAR*buf,int len,int flags)
send函數(shù)主要借用已建立連接的套接字進(jìn)行數(shù)據(jù)發(fā)送。參數(shù)SOCKET代表已經(jīng)建立連接的套接字;參數(shù)buf則用于指向一個(gè)緩沖區(qū);參數(shù)len是已經(jīng)制定的緩沖區(qū)的長(zhǎng)度;參數(shù)flags設(shè)定的值一般為0,該參數(shù)的設(shè)置值將影響函數(shù)的行為。
4)int recv(SOCKET s,char FAR*buf,int len,int flags)
recv函數(shù)的主要功能是從一個(gè)已連接的套接字接收數(shù)據(jù)。參數(shù)SOCKET用于接收數(shù)據(jù)而建立的套接字;參數(shù)buf用于指向一個(gè)用來(lái)保存數(shù)據(jù)的緩沖區(qū);參數(shù)len表明所指向的緩沖區(qū)的長(zhǎng)度;參數(shù)flags通常設(shè)置為0。
5)SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR* addrlen)
accept函數(shù)用來(lái)接收客戶端發(fā)送的連接請(qǐng)求。參數(shù)SOCKET是套接字描述符;參數(shù)addr是指向一個(gè)緩沖區(qū)的指針;參數(shù)addrlen是指向一個(gè)整型的指針。
3.2.2 視頻編碼模塊MFC
本文采用MFC模塊進(jìn)行H.264視頻壓縮編碼,主要原因是多媒體編解碼模塊MFC被集成到S3C6410處理器內(nèi)部。MFC模塊具有高性能的視頻編解碼功能,支持MPEG-4,H.263,H.264 的編解碼[1]。本文采用 H.264 編碼,其工作流程如圖6所示。
圖6 MFC應(yīng)用程序流程圖
其中,在調(diào)用MFC模塊中要用到的主要語(yǔ)句有:
監(jiān)控終端是一臺(tái)運(yùn)行Windows系統(tǒng)的PC機(jī),主要負(fù)責(zé)從網(wǎng)絡(luò)接收壓縮包,并使用Avcodec進(jìn)行解碼顯示[6-8],其主程序工作流程如圖7 所示。
圖7 客戶端程序流程圖
終端監(jiān)控打開(kāi)后,程序首先試圖讀取用戶設(shè)定的參數(shù)。得到參數(shù)后,PC機(jī)端就會(huì)創(chuàng)建套接字,并與監(jiān)控前端建立連接。正確連接后,監(jiān)控終端就會(huì)向前端發(fā)送視頻請(qǐng)求,監(jiān)控前端在接收到服務(wù)請(qǐng)求之后會(huì)將視頻數(shù)據(jù)發(fā)送到PC終端。PC終端在接收到視頻碼流之后通過(guò)ffmpeg解碼后顯示。同時(shí),視頻接收端不停地判斷用戶線程是否保持運(yùn)行,只要用戶線程一直保持運(yùn)行,客戶端就不停地向監(jiān)控前端請(qǐng)求視頻數(shù)據(jù),PC端就可得到連續(xù)的視頻畫面。
測(cè)試環(huán)境為:內(nèi)線采用速率為10 Mbit/s的實(shí)驗(yàn)室局域網(wǎng)Intranet;客戶端采用PC機(jī),主頻為2.7 GHz,內(nèi)存為2 Gbyte;監(jiān)控前端為本文設(shè)計(jì)的ARM11視頻采集前端。系統(tǒng)中設(shè)置采集分辨力為640×480,視頻監(jiān)控效果如圖8所示,視頻播放速度達(dá)到了30 f/s(幀/秒),在監(jiān)控移動(dòng)目標(biāo)時(shí)比較流暢,無(wú)抖動(dòng)現(xiàn)象,達(dá)到了設(shè)計(jì)要求。
圖8 監(jiān)控終端
本文實(shí)現(xiàn)了基于ARM11芯片的IP網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)。由于該方案采用了新一代的ARM11處理器和先進(jìn)的 H.264視頻壓縮技術(shù),使其具有如下優(yōu)點(diǎn):1)S3C6410微處理器內(nèi)嵌的多媒體處理模塊MFC,使該系統(tǒng)在硬件設(shè)計(jì)上無(wú)須考慮視頻編解碼部分,大大降低了成本,縮短了研發(fā)周期;2)先進(jìn)的H.264視頻壓縮技術(shù)的采用,使該系統(tǒng)能夠?qū)崿F(xiàn)對(duì)視頻數(shù)據(jù)的高度壓縮,大大減少了系統(tǒng)對(duì)網(wǎng)絡(luò)帶寬資源的占用,非常適用于帶寬資源受限的網(wǎng)絡(luò)環(huán)境。
[1]郭巧云,許雪梅,李岸,等.基于ARM11的無(wú)線視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2010,18(8):1786-1789.
[2]唐永彬,楊恢東,墨芹.基于ARM11的嵌入式Web網(wǎng)絡(luò)監(jiān)控系統(tǒng)設(shè)計(jì)[J].電視技術(shù),2011,35(9):122-124.
[3]羅蕾.嵌入式實(shí)時(shí)操作系統(tǒng)及應(yīng)用開(kāi)發(fā)[M].北京:北京航空航天大學(xué)出版社,2005.
[4]馮麗芳,孫俊,周俊華,等.基于ARM9的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)實(shí)現(xiàn)[J].電力自動(dòng)化設(shè)備,2006,10(26):95-98.
[5]孫瓊.嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解[M].北京:人民郵電出版社,2007.
[6]張?jiān)拼?,王正勇,卿粼波,?基于ARM的便攜式視頻解碼終端設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,24(35):232-234.
[7]郭盛榮.基于Linux的開(kāi)放式媒體播放器研究[D].重慶:重慶大學(xué),2006.
[8]林德彬,趙慧民,譚恒良.基于ARM嵌入式局域網(wǎng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2006,30(9):88-89.