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

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

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

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

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

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

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


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

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

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