徐繼富,張秋林
(空軍工程大學電訊工程學院,陜西 西安 710077)
進入21世紀,視頻監(jiān)控技術(shù)的應用日趨廣泛。然而,目前的網(wǎng)絡視頻監(jiān)控系統(tǒng)多是以DSP芯片或者ARM9芯片為核心開發(fā)的。基于DSP芯片的視頻監(jiān)控系統(tǒng)雖然在視頻信號處理上優(yōu)勢明顯,但其在智能化控制上的短板極大地限制了它的應用;基于ARM9的監(jiān)控系統(tǒng)雖然能夠克服DSP芯片的不足,但是其在視頻信號處理能力上的不足,使其不得不依靠專業(yè)的多媒體芯片來完成視頻信號的處理,而這無疑將增加制造成本。然而,新一代的ARM11處理器由于其內(nèi)嵌了多媒體處理模塊MFC,使其在視頻監(jiān)控系統(tǒng)的開發(fā)中具有極大的優(yōu)勢。因此,基于ARM11的視頻監(jiān)控系統(tǒng)的研究成為目前視頻監(jiān)控系統(tǒng)研究的熱點。本文介紹的視頻監(jiān)控系統(tǒng)主要是根據(jù)某單位的項目需求而進行的研發(fā)。
監(jiān)控系統(tǒng)包括監(jiān)控前端、監(jiān)控終端和網(wǎng)絡三個部分,監(jiān)控前端是一個運行Linux操作系統(tǒng)的嵌入式系統(tǒng),它通過S3C6410接收攝像頭采集到的數(shù)據(jù),并傳送給硬件編解碼(MFC)模塊,并把得到的經(jīng)過H.264壓縮的數(shù)據(jù)打包發(fā)送到IP網(wǎng)絡上,監(jiān)控終端(PC機)通過網(wǎng)絡接收數(shù)據(jù)包,經(jīng)過解碼實時播放。總體構(gòu)架如圖1所示。

圖1 基于ARM11的視頻監(jiān)控系統(tǒng)
在該網(wǎng)絡視頻監(jiān)控系統(tǒng)中,監(jiān)控前端主要由視頻采集模塊、主控制模塊和網(wǎng)絡傳輸模塊等組成。其硬件框架[1-2]如圖 2 所示。

圖2 硬件結(jié)構(gòu)框圖
本系統(tǒng)中S3C6410處理器用于接收控制攝像頭所獲取的視頻信號,其內(nèi)部集成有用于進行基于H.264壓縮編碼的多媒體編解碼器(MFC)。此外,JTAG主要用于程序的下載;SDRAM用于存取系統(tǒng)運行時的程序;NAND Flash用于存儲固化程序;串口用于調(diào)試程序和打印輸出信息。
系統(tǒng)主芯片采用最新的ARM11處理器S3C6410。Flash為32 Mbyte的NAND型,存放有嵌入式視頻采集前端的根文件系統(tǒng)、啟動代碼和內(nèi)核代碼。并且在Flash管理方面,根文件系統(tǒng)采用的是最新的YAFFS可讀寫文件系統(tǒng)。為了使本系統(tǒng)能夠穩(wěn)定運行,本系統(tǒng)采用2片共64 Mbyte的SDARM,這樣就可流暢地運行Linux系統(tǒng)及應用程序。網(wǎng)卡采用AX88796以太網(wǎng)控制器,該網(wǎng)卡是10/100 Mbit/s自適應通信速率,通過它可實現(xiàn)以太網(wǎng)的物理層和數(shù)據(jù)鏈路層的連接。攝像頭采用市場上普通的模擬攝像頭,通過SAA7113芯片,攝像頭采集的模擬信號將被轉(zhuǎn)化成數(shù)字信號傳送給MFC模塊。
監(jiān)控前端的軟件設計由嵌入式系統(tǒng)構(gòu)建和應用軟件組成。嵌入式系統(tǒng)部分包括Bootloader、Linux內(nèi)核、交叉編譯器、驅(qū)動等,具體構(gòu)架如圖3所示。

圖3 嵌入式系統(tǒng)軟件結(jié)構(gòu)框圖
基本的嵌入式運行環(huán)境由引導程序、Linux內(nèi)核和設備驅(qū)動程序構(gòu)成。應用層軟件通過控制Camera IF接口接收攝像頭(SAA7113)采集的數(shù)據(jù),并將其傳送給硬件編解碼(MFC)模塊;然后把從MFC模塊得到的H.264碼流打包發(fā)送到IP網(wǎng)絡上;監(jiān)控終端通過網(wǎng)絡接收視頻數(shù)據(jù)包,并解碼實時播放。
本系統(tǒng)采用Linux2.6.21作為嵌入式平臺的操作系統(tǒng)。在對Linux內(nèi)核進行裁剪后,保留了本系統(tǒng)所需的NAND Sevice Support、MTD分區(qū)、UDP協(xié)議以及套接字、NFS文件系統(tǒng)、framebuffer等驅(qū)動。通過運用交叉編譯器編譯,即可得到ARM處理器能夠運行的文件。再將鏡像文件通過Bootloader下載到目標板的Dataflash中[3]。
應用層軟件是本系統(tǒng)的核心,主要功能是響應用戶的連接請求、視頻采集、編碼壓縮和數(shù)據(jù)發(fā)送[4]。該程序的實現(xiàn)過程主要包括2個線程:第1個為主線程,第2個線程主要任務是處理用戶的連接。
第1個線程的流程如圖4所示。

圖4 主函數(shù)流程圖
第2個線程的流程如圖5所示。

圖5 用戶線程流程圖
3.2.1 網(wǎng)絡傳輸模塊
網(wǎng)絡傳輸模塊的功能是為了實現(xiàn)H.264視頻碼流的傳輸。現(xiàn)行的網(wǎng)絡通信協(xié)議主要有TCP/IP協(xié)議和UDP協(xié)議。為了提高視頻碼流的傳輸速度和實時性,本設計采用UDP協(xié)議作為C/S模型的網(wǎng)絡通信協(xié)議。在監(jiān)控前端,網(wǎng)絡編程通過socket接口進行,通過listen()函數(shù)和send()函數(shù)完成客戶端的監(jiān)聽、連接的建立和數(shù)據(jù)的發(fā)送等功能[5]。網(wǎng)絡編程過程中用到的socket函數(shù)主要有:
1)int listen(SOCKET s,int backlog)
listen函數(shù)的作用是將制定的套接字設置為偵聽模式。其中,第1個參數(shù)是套接字描述符;第2個參數(shù)(backlog)是等待連接隊列的最大長度。
2)int bind(SOCKET s,const struct sockaddr FAR*name,int namelen)
通過bind函數(shù),將創(chuàng)建的套接字綁定在本地的某個地址或端口上。參數(shù)SOCKET用來指定需要綁定的套接字,而參數(shù)name主要用來指定該套接字的本地地址信息;參數(shù)namelen則用于指定該地址信息結(jié)構(gòu)的長度。
3)int send(SOCKET s,const char FAR*buf,int len,int flags)
send函數(shù)主要借用已建立連接的套接字進行數(shù)據(jù)發(fā)送。參數(shù)SOCKET代表已經(jīng)建立連接的套接字;參數(shù)buf則用于指向一個緩沖區(qū);參數(shù)len是已經(jīng)制定的緩沖區(qū)的長度;參數(shù)flags設定的值一般為0,該參數(shù)的設置值將影響函數(shù)的行為。
4)int recv(SOCKET s,char FAR*buf,int len,int flags)
recv函數(shù)的主要功能是從一個已連接的套接字接收數(shù)據(jù)。參數(shù)SOCKET用于接收數(shù)據(jù)而建立的套接字;參數(shù)buf用于指向一個用來保存數(shù)據(jù)的緩沖區(qū);參數(shù)len表明所指向的緩沖區(qū)的長度;參數(shù)flags通常設置為0。
5)SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR* addrlen)
accept函數(shù)用來接收客戶端發(fā)送的連接請求。參數(shù)SOCKET是套接字描述符;參數(shù)addr是指向一個緩沖區(qū)的指針;參數(shù)addrlen是指向一個整型的指針。
3.2.2 視頻編碼模塊MFC
本文采用MFC模塊進行H.264視頻壓縮編碼,主要原因是多媒體編解碼模塊MFC被集成到S3C6410處理器內(nèi)部。MFC模塊具有高性能的視頻編解碼功能,支持MPEG-4,H.263,H.264 的編解碼[1]。本文采用 H.264 編碼,其工作流程如圖6所示。

圖6 MFC應用程序流程圖
其中,在調(diào)用MFC模塊中要用到的主要語句有:


監(jiān)控終端是一臺運行Windows系統(tǒng)的PC機,主要負責從網(wǎng)絡接收壓縮包,并使用Avcodec進行解碼顯示[6-8],其主程序工作流程如圖7 所示。

圖7 客戶端程序流程圖
終端監(jiān)控打開后,程序首先試圖讀取用戶設定的參數(shù)。得到參數(shù)后,PC機端就會創(chuàng)建套接字,并與監(jiān)控前端建立連接。正確連接后,監(jiān)控終端就會向前端發(fā)送視頻請求,監(jiān)控前端在接收到服務請求之后會將視頻數(shù)據(jù)發(fā)送到PC終端。PC終端在接收到視頻碼流之后通過ffmpeg解碼后顯示。同時,視頻接收端不停地判斷用戶線程是否保持運行,只要用戶線程一直保持運行,客戶端就不停地向監(jiān)控前端請求視頻數(shù)據(jù),PC端就可得到連續(xù)的視頻畫面。
測試環(huán)境為:內(nèi)線采用速率為10 Mbit/s的實驗室局域網(wǎng)Intranet;客戶端采用PC機,主頻為2.7 GHz,內(nèi)存為2 Gbyte;監(jiān)控前端為本文設計的ARM11視頻采集前端。系統(tǒng)中設置采集分辨力為640×480,視頻監(jiān)控效果如圖8所示,視頻播放速度達到了30 f/s(幀/秒),在監(jiān)控移動目標時比較流暢,無抖動現(xiàn)象,達到了設計要求。

圖8 監(jiān)控終端
本文實現(xiàn)了基于ARM11芯片的IP網(wǎng)絡視頻監(jiān)控系統(tǒng)。由于該方案采用了新一代的ARM11處理器和先進的 H.264視頻壓縮技術(shù),使其具有如下優(yōu)點:1)S3C6410微處理器內(nèi)嵌的多媒體處理模塊MFC,使該系統(tǒng)在硬件設計上無須考慮視頻編解碼部分,大大降低了成本,縮短了研發(fā)周期;2)先進的H.264視頻壓縮技術(shù)的采用,使該系統(tǒng)能夠?qū)崿F(xiàn)對視頻數(shù)據(jù)的高度壓縮,大大減少了系統(tǒng)對網(wǎng)絡帶寬資源的占用,非常適用于帶寬資源受限的網(wǎng)絡環(huán)境。
[1]郭巧云,許雪梅,李岸,等.基于ARM11的無線視頻監(jiān)控系統(tǒng)的設計[J].計算機測量與控制,2010,18(8):1786-1789.
[2]唐永彬,楊恢東,墨芹.基于ARM11的嵌入式Web網(wǎng)絡監(jiān)控系統(tǒng)設計[J].電視技術(shù),2011,35(9):122-124.
[3]羅蕾.嵌入式實時操作系統(tǒng)及應用開發(fā)[M].北京:北京航空航天大學出版社,2005.
[4]馮麗芳,孫俊,周俊華,等.基于ARM9的網(wǎng)絡視頻監(jiān)控系統(tǒng)實現(xiàn)[J].電力自動化設備,2006,10(26):95-98.
[5]孫瓊.嵌入式Linux應用程序開發(fā)詳解[M].北京:人民郵電出版社,2007.
[6]張云川,王正勇,卿粼波,等.基于ARM的便攜式視頻解碼終端設計與實現(xiàn)[J].計算機工程,2009,24(35):232-234.
[7]郭盛榮.基于Linux的開放式媒體播放器研究[D].重慶:重慶大學,2006.
[8]林德彬,趙慧民,譚恒良.基于ARM嵌入式局域網(wǎng)視頻監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].電視技術(shù),2006,30(9):88-89.