Cortex-A8和H.264的無線視頻監控系統設計
引言
本文引用地址:http://www.j9360.com/article/201610/307931.htm隨著現代科學技術和居民生活水平的提高,以及人們對安全問題的日益重視,視頻監控系統在緊急救援和安防系統中得到了廣泛應用。無線技術的發展解決了傳統有線的布線復雜,網絡結構不靈活等技術問題。無線技術對于特殊監控環境有著很好的親和性,且移動通信網和無線局域網的快速建設為視頻監控系統的設計提供了技術支持,其中無線局域網WLAN的組建快捷、靈活性強、受環境限制小、方便網絡重組和擴展。
國際電信聯盟對于視頻編碼壓縮制定了H.264/AVC視頻編碼壓縮標準,H.264加強了對IP、移動網絡的丟包、誤碼情況處理,保證了在不同信道中進行傳輸的視頻圖像質量。隨著H.264編碼技術的提出與應用,大大提高了視頻數據的壓縮率,減少傳輸時所用的網絡帶寬,并促進了無線網絡的發展,同時H.264編碼的網絡傳輸提取層設計,可以使視頻數據在不同網絡里進行傳輸且適應性良好。
嵌入式芯片功能的增強和開源Linux操作系統的成熟使得基于嵌入式系統的視頻監控系統具有更好的穩定性和實時性,結合無線網絡技術使系統具有成本低、組網便捷和實際應用性強等優點,可以廣泛地應用于民用與工用安防系統。
本文將WiFi技術、圖像壓縮技術與基于嵌入式視頻監控系統相結合,采用嵌入式ARM Cortex—A8高性能處理器芯片SP5V210和Linux操作系統,將COMS攝像頭采集的視頻流經H.264編碼壓縮后由無線WiFi網絡傳輸到監控端,通過PC監控端的FFMPEG模塊和SDL播放模塊完成監控視頻數據的實時顯示。
1 視頻監控系統框圖設計
系統采用ARM Cortex—A8內核的SP5V210芯片作為視頻采集端的中央處理器,該處理器運行穩定時主頻可達1 GHz,具有MMU功能、64位內部總線架構、可擴展的DRAM內存接口、1 G的NAND Flash和DDR2、3通道I2C總線接口、4個USB接口、4路HS-MMC/SD/SDIO/接口等。同時其內部集成MFC視頻編解碼器,支持多格式編解碼包含MPEG-4/H.264編碼,且Cortex-A8處理器應用NEON信號處理擴展指令集提高了H.264和MP3等媒體編碼效率。工作流程為:首先OV3640攝像頭采集圖像信息并通過I2C總線與SP5V210處理器通信,處理器通過內部集成的MFC多格式編碼器將圖像信息進行H.264編碼壓縮,視頻圖像再基于USB無線網卡構建的WLAN網絡和實時傳輸協議RTP發送給視頻監控PC客戶端,由客戶端進行解碼和顯示。系統的軟件結構包含應用層程序、設備驅動程序和嵌入式Linux操作系統。系統工作時會先執行Bootloader引導加載程序進行硬件設備初始化并引導加載Linux 2.6.35內核,再加載設備驅動程序(包括攝像頭驅動、WiFi驅動、Nand Flash驅動等),最后為用戶區應用層程序的執行,其中包含視頻采集模塊、H.264編解碼模塊、WiFi無線傳輸模塊和RTP實時傳輸協議模塊。系統整體框圖如圖1所示。

2 視頻采集端和無線傳輸設計
2.1 視頻數據采集
在視頻采集端,原始視頻數據的采集是通過OV3640圖像傳感器模塊完成,該攝像頭支持300萬像素并支持輸出YUV420圖像數據,SP5V210處理器通過I2C總線訪問與修改OV3640內部寄存器來控制攝像頭功能。
在Linux操作系統中,通過應用Video4Linux(V4L)來實現視頻采集設備的各種功能。在Linux內核中定義了視頻設備的統一接口V4L,由統一的API接口庫函數控制視頻設備各種功能。其中,V4L2是V4L的升級版,具有更好的兼容性和擴展性。V4L2采集視頻信息的流程為:通過ope nVideo()函數先打開視頻采集設備文件;初始化設備信息包括獲得視頻設備支持的功能屬性和設置其采集視頻格式;向內核申請幀緩存內存空間,并將其映射到用戶空間,開始發送采集信號;讀取視頻緩存幀數據,可以根據需求進行數據的處理;發送采集停止信號,釋放內存映射,關閉視頻設備。數據采集流程如圖2所示。

2.2 H.264編碼壓縮
視頻圖像畫面用4:2:0格式存儲,每幀的數據大小為1.2 Mb,對于25~30 fps的實時硬件編碼,其碼流將達到了30~36 Mbps,無線網絡帶寬和存儲空間難以承受,需采用H.264壓縮編碼技術將大數據量的視頻數據進行壓縮。SP5V210內部集成了多格式的視頻編解碼器(MFC),支持H.264的硬件編解碼且速度最高可達到30 fps,可以很好地滿足系統對視頻數據壓縮和處理速度的要求。采用MFC硬件編解碼模塊完成視頻數據編解碼的程序時,既可以調用MFC編解碼中的API庫函數,又可以采用MFC中的I/O接口函數,MFC編解碼中的底層驅動接口封裝實際上就是API庫函數。SP5V210的MFC編解碼軟件架構如圖3所示。

通過硬件編解碼模塊MFC的API接口函數實現H.264視頻編碼壓縮,具體的流程為:
①建立H.264編碼器實例,設置MFC編碼器的參數并對其進行初始化設置。
②獲取編碼器的輸入緩沖區地址,讀取視頻數據,發送到編碼器的輸入緩沖空間。
③進行H.264壓縮編碼,獲取編碼后的輸出緩沖區,并對編碼數據進行相應處理。
④判斷編碼是否結束,結束則釋放編碼器的資源,編碼器關閉,否則進入第2步循環運行。
2.3 視頻數據無線傳輸
系統的傳輸網絡是通過USB無線網卡構建無線局域網的方式完成,利用無線的信道來傳輸編碼后的視頻數據,WiFi(Wireless Fidelity)通信網絡標準分別支持IEEE802.11g、IEEE 802.11b和IEEE 802.11a協議,具有傳輸速率高(11~54 MDps)、安裝便捷和受環境限制小等優點。
USB無線網卡通過USB接口與SP5V210通信,需要完成USB設備、無線網卡設備的驅動和移植,無線網卡設備驅動為應用層提供協議棧接口,在下層通過USB總線訪問無線網卡設備寄存器。無線網卡在Linux操作系統上的移植,先要下載對應驅動工具包并將其復制到根目錄下完成驅動,通過串口工具輸入Scan-wifi進行搜索無線網絡信號,再通過start-wifi命令打開無線網絡并建立連接。
無線網絡傳輸視頻數據時,必須要遵循約定的網絡傳輸協議。一般常用的網絡傳輸協議有RTP/RTCP、TCP/IP和UDP,本系統中視頻數據的傳輸是基于RTP/RTCP實時傳輸協議的,RTP/RTCP協議實現的開源庫有JRTPLIB、LIBRTP、ORTP等,本文采用基于C++的開源庫JRTPLIB,支持Linux和Windows操作系統平臺,且操作便捷,封裝性好。為了實現基于RTP/RTCP實時傳輸協議的視頻數據傳輸,先要完成JRTPLIB的交叉編譯和到Linux系統平臺移植等工作。
采用JRTPLIB開源庫中的接口函數完成無線視頻數據傳輸的具體流程如下:
①初始化并生成RTP會話。采用JRTPLIB開源庫傳輸視頻數據前,要先創建一個RTPSession實例用來代表RPT會話,并利用RTPSession Par ams對象設置時間戳的單位,再調用RTPSession實例中的成員函數Create()生成RPT會話并同時初始化。
②設置接收端目標地址。在生成RTP會話后傳輸視頻數據前,首先調用RTPSession實例中的成員函數AddDestination()來設置數據發送時的目標地址(接收端地址)。在RTP協議中可以根據需要設置指定多個目標地址于同一會話中,其中函數SetDefaultPayloadType(96)用于設定RPT負載H.264編碼數據;voidClearDestinations()用于清除所有的地址;函數DeleteDestination()為刪除指定地址。
③發送視頻數據到目標地址。設置好數據發送目標地址之后,使用RTPSession實例中成員函數SendPacket(),將編碼好的H.264數據包發送到一個或多個目標地址。由于每一幀視頻的數據量較大,RTP數據包以分片傳輸方式傳輸以保證視頻數據的可靠性。SendPacket()函數中,mark為1代表該RTP包為完整包,為0代表分割包。
④RTP會話結束。調用BYEDestroy()函數結束此次RTP會話。
3 視頻監控PC客戶端設計
接收端將分片數據包重新組裝成為幀,得到H.264格式的壓縮編碼視頻,交付給視頻監控PC客戶端處理,這里視頻監控PC客戶端的主要功能為視頻數據的重新解壓、播放顯示和處理等。系統采用FFMPEG方案和SDL技術來實現監控視頻數據的解壓和顯示。
3.1 視頻數據解壓
FFMPEG是一套開源的音頻流和視頻流方案,支持音視頻編解碼等功能,為免費軟件。FFMPEG方案的開發與使用是在Linux系統平臺下的,但隨著發展現已支持Windows等多種操作系統。FFMPEG方案支持H.264、MPEG4、3GP等多種常見格式的視頻編解碼,功能全面且性能強大。系統采用FFMPEG方案主要完成客戶端對已編碼視頻數據的接收和視頻解碼工作。
在Windows下安裝好FFMPEG開源庫開發環境,再進行視頻數據的解碼工作,其中FFMPEG庫中的主要功能函數和數據結構有:
①AVCodecContext()結構體,用于編碼器參數信息描述,如視頻的采樣率、視頻的寬和高等信息;
②AVPacket()結構體,緩沖解碼前視頻數據;
③AVFrame()結構體,存儲視頻數據解碼后的數據幀;
④av_resister_all()功能函數,用來注冊全部解碼器;
⑤avcodec_find_decoder(),搜索解碼器,如H.264格式解碼器;
⑥avcodec_decode_video(),解碼接收到的視頻幀;
⑦avcodec_alloc_frame(),新建AVFrame結構體。
3.2 視頻播放顯示
SDL是一個跨平臺的多媒體開源開發庫,支持多媒體播放器、游戲開發等,可以運行在多種操作系統上(如Windows、Linux等),兼容性良好。SDL開源庫包含音頻、視頻和視窗管理等多個子系統。本文采用SDL開源庫中的視頻子系統,其主要功能是將FFMPEG解碼后的視頻數據進行顯示與播放。
SDL開源庫將解碼后的視頻數據轉化成對應的YUV格式,在屏幕上顯示其各個分量,完成視頻的輸出。SDL開源庫中的主要的數據結構體和功能函數為:SDL_Overlay()結構體,為YUV格式圖像信息的覆蓋結構;SDL_Surface()結構體,為SDL中圖像信息顯示的基本區域;SDL_Init()功能函數,作用是初始化SDL中圖像特性;SDL_CreateYUVOverlay()功能函數,創建SDL_Overlay()結構,設置尺寸參數等;SDL_Display YUVOverlay()函數,用來播放監控視頻圖像,即SDL_Overlay()結構體中存儲的圖像信息。
通過FFMPEG和SDL技術中的主要結構體以及功能函數完成接收端的視頻解碼和播放任務,主要的工作流程如圖4所示。

結語
本文設計了一種基于Cortex-A8的無線視頻監控系統,采用高性能的ARM Cortex—A8芯片SP5V210、300萬像素的COMS攝像頭、USB無線網卡以及PC機完成了系統的硬件搭建,利用低碼流和容錯能力強的H.264壓縮編碼技術進行視頻數據編碼,滿足了無線傳輸要求,且基于RTP /RTCP網絡傳輸協議提高了視頻傳輸的實時性。在視頻監控PC客戶端應用開源的FFMPEG和SDL技術實現了監控視頻圖像的解碼和播放。
本系統具有良好的擴展性,根據需求可擴展為多路無線視頻監控,用于人體識別、智能報警等。該系統可以高效穩定運行,布防便捷,攜帶方便,靈活行強,成本低,提高了視頻監控系統的實時性,在緊急救援和民工業安防系統上具有良好的應用前景。
評論