文獻標識碼: A
文章編號: 0258-7998(2015)01-0025-03
0 引言
隨著互聯網、多媒體及自動控制技術的飛速發展,視頻應用的需求也越來越大。近幾年來,圖像處理技術已在智能樓宇、交通監控、智能家居、汽車電子以及航空航天等諸多領域得到了廣泛的應用。芯片技術的發展及嵌入式技術的日趨成熟,使得視頻監控系統越來越小型化、集成化和網絡化[1]。
目前,視頻監控仍存在一些問題。諸如監控區域太窄,一套系統無法完成對多個區域的同時監測;非網絡化,大多數監控系統仍然采用模擬信號傳輸,導致系統布線復雜,無法輕易擴容,成本高。諸多問題無法滿足實際需求[2]。
本文立足于解決實際問題,設計了一套集嵌入式技術、網絡技術及TI達芬奇技術為一體的多通道視頻監控系統。利用該系統,可實現對多個關鍵區域的實時遠程視頻監控。系統采用單芯片完成了多通道實時圖像采集、壓縮處理和網絡傳輸,節省成本,管理方便。
1 系統總體設計
系統以DM6467為核心,嵌入式Linux作為操作系統平臺,通過TVP5158采集多路視頻數據并進行壓縮處理,采用TCP/IP協議將壓縮處理后的視頻數據發送至監控中心。監控中心接收網絡數據并實時解析,通過H.264解碼后實時顯示。系統總體方案如圖1所示。
本系統主要由視頻處理前端與監控中心構成。視頻處理前端由處理器、攝像頭及TVP5158組成。監控中心由PC構成。系統運行后,監控中心可實時配置視頻處理前端信號參數,如圖像分辨率、通道數等。為了滿足系統需求,在不影響視覺觀看下的指標設計如下:
(1)1-4通道圖像實時采集和壓縮處理(基于H.264協議),圖像制式包括PAL(720×576)和NTSC(720×480);
(2)實時傳輸幀率不小于15幀/s;
(3)系統時延不大于0.5 s。
2 系統硬件設計
系統主要分為信號采集平臺和監控中心兩大部分。監控中心在PC上完成。信號采集平臺主控芯片采用TI公司達芬奇處理器TMS320DM6467,同時還包括SRAM、Nand Flash、TVP5158以及多種外圍接口。Flash中存放有一級引導文件ubl、U-boot、Linux內核、文件系統、驅動程序以及應用程序等。SRAM作為系統運行內存,TVP5158完成對多通道模擬信號的采集。外圍接口中,串口負責應用程序調試;以太網接口完成對視頻信號和控制信息的傳輸;主控制器通過I2C接口對TVP5158進行參數配置,同時通過VPIF接口接收TVP5158傳回的視頻信號[3]。
信號采集平臺主要實現對1~4通道視頻圖像的采集、實時圖像壓縮、網絡傳輸、心跳檢測、參數接收等功能。采集平臺硬件結構如圖2所示。
3 系統軟件設計
系統軟件主要包括采集端和監控中心解碼軟件。系統軟件結構如圖3所示,采集端包括信號采集子程序、圖像壓縮子程序、網絡傳輸子程序、心跳探測及參數配置子程序。監控中心包括網絡接收子程序、圖像解碼子程序、實時顯示子程序、心跳探測及參數配置子程序。
3.1 視頻采集模塊設計
采集端基于Montavista公司Linux-2.6.10操作系統,采用V4L2進行視頻數據采集。TVP5158與DM6467間采用VPIF接口無縫傳輸。為了讓數據采集更加便捷,對V4L2驅動與I2C驅動進行二次封裝。同時,為了提高數據傳輸效率,減少CPU開銷,將底層EDMA驅動也封裝在其中。面向應用層,3個接口被抽象為一個MCVIP接口[4-5]。MCVIP驅動框架如圖4所示。
采用MCVIP驅動完成視頻信號采集流程如圖5所示。其步驟如下:
(1)打開設備。連接各模塊,開啟設備電源,通過open()函數依次打開dev_i2c、video0和video1 3個設備描述符。
(2)參數初始化。初始化主要包括對TVP5158、圖像制式、通道數、內存區域等進行設置。
(3)圖像采集。MCVIP底層采用V4L2獲取圖像數據。采用如下方式可完成圖像數據的采集。
調用二次封裝后的V4L2函數接口MCVIP_v4l2GetBuf(hndl, &v4l2Buf),抓取一幀圖像,并存放在v4l2Buf起始的內存區域中。
由于TVP5158將多通道數據打包為BT.656格式,需要MCVIP_demuxRun()函數對該格式進行解析,獲取各通道數據。
抓取處理完成后,通過MCVIP_ v4l2PutBuf()函數釋放本次讀取數據所用的緩沖區,以便循環利用。
3.2 視頻壓縮模塊設計
視頻壓縮模塊采用一組壓縮線程來完成。系統為4個通道分別開辟一個壓縮線程,并采用達芬奇技術提供的DVSDK開發包完成H.264圖像壓縮。
Codec Engine(CE)是達芬奇技術的核心,負責完成ARM與DSP之間的通信及管理工作。在各個壓縮線程中,調用Engine_open()函數創建各自的CE。
創建圖像壓縮任務,通過Venc1_create(hEngine, H264ENC_NAME, & params, &dynParams)函數告知DSP需要執行哪一段代碼。其中,params與dynParams結構體分別存儲有圖像的分辨率、圖像數據大小等參數。DSP Server收到指令后,對參數進行解析,并創建一個process()實現壓縮任務。
在壓縮任務創建完成后,即可從隊列中獲取一幀原始圖像數據,并進行色彩轉換,最終調用Venc1_process()函數完成一幀圖像的壓縮[6]。
壓縮后的圖像數據將送到壓縮線程與網絡發送線程之間的緩沖隊列中,供網絡模塊調用及數據發送[6]。壓縮線程處理流程如圖6所示。
3.3 傳輸模塊設計
數據傳輸主要在局域網中進行。為了提高傳輸效率,圖像數據采用面向無連接的UDP協議進行傳輸。心跳信息及控制信息采用TCP協議傳輸,保障了心跳及控制信息傳輸的可靠性。傳輸模塊流程圖如圖7所示。
基于Linux和Windows的網絡傳輸主要依靠socket套接字完成。發送端通過sendto()將圖像數據發送到監控中心,接收端對協商好的端口進行監聽,并調用recvfrom()函數接收網絡數據。
為了讓監控中心實時掌握采集端運行狀態,采集端設計心跳包,定時向監控中心報告呼吸狀態。若監控中心連續2 min沒有收到心跳信息,則斷定網絡出現故障或采集端發生異常,并報警告知用戶。
由于壓縮線程與傳輸線程之間需要訪問同一個緩沖隊列,為了線程安全,采用互斥量對該臨界區進行控制。壓縮線程需要將數據送入到隊列中時,使用pthread_mutex_ lock函數對該臨界區加鎖,訪問完成后調用pthread_mutex_unlock函數釋放該區域供傳輸模塊訪問[7]。傳輸模塊訪問該區域時處理流程同上。通過互斥量,使得同一時間只有一個線程在訪問該段內存空間,保障了內存訪問的安全性。
3.4 顯示模塊設計
本系統中,顯示模塊采用的集成開發環境是Microsoft Visual C++6.0,實現4路視頻數據的接收和實時顯示。顯示模塊軟件由兩個子模塊組成:ActiveX控件模塊和實時播放模塊,ActiveX控件模塊作為軟件的核心部分,是集圖像解碼、圖像播放為一體的功能模塊。主程序調用ActiveX控件提供的接口函數將視頻數據傳入控件中,控件使用ffmpeg對視頻數據進行解碼,然后顯示。實時播放模塊由4個ActiveX控件和兩個按鈕組成,兩個按鈕的功能分別為開啟和停止。點擊開啟按鈕,準備接收數據,當網絡中有數據時,接收并解碼和顯示。顯示模塊的工作流程如圖8所示。
4 系統測試
系統測試環境包括信號采集板、監控中心PC、4路安防攝像頭、電源、網線等。
將串口線、網線及電源等接口連接好,啟動開發板。運行監控中心顯示軟件,設定通道數、圖像制式等信息。參數配置完成后,點擊開始后采集端開始采集并傳輸視頻信號。
圖9是監控中心實時解碼顯示效果圖。經過長時間測試,圖像時延約為0.3~0.5秒,監控中心可實時播放1~4路視頻信號,圖像幀率最差為每通道22幀/s。測試表明,在多通道同時工作時,傳輸幀率和系統時延均滿足預期設計指標。
5 結束語
本文設計了一種基于達芬奇技術的視頻監控系統,實現了1~4通道實時視頻采集、壓縮、網絡傳輸及圖像解碼和顯示。經長時間和多次測試,系統運行穩定,能夠連續對多個區域進行監控。同時,可針對不同應用領域,稍加改進便可投入使用,具有一定的應用價值。
參考文獻
[1] 信師國,劉慶磊,劉全賓.網絡視頻監控系統現狀和發展趨勢[J].信息技術與信息化,2010(1):23-25.
[2] 陳宗成,鄧華秋.基于ARM11的嵌入式視頻傳輸系統的實現[J].電視技術,2013,37(9):210-213.
[3] 姚春蓮,郭克友,阮秋琦,等.基于DM6467的視頻處理軟件設計與優化[J].北京交通大學學報:自然科學版,2013,37(5):162-167.
[4] 盧俊.基于Davinci平臺的視頻服務器軟件系統的設計與實現[D].武漢:華中科技大學,2013.
[5] 文武,吳勇,張杰.基于TMS320DM6467的視頻采集系統設計[J].電視技術,2011,35(17):39-41.
[6] 施現偉.基于ARM11的遠程視頻監控系統設計[D].哈爾濱:哈爾濱理工大學,2013.
[7] 陳榮軍,余祥云,譚洪舟.基于S3C6410的遠程無線環境監測系統設計[J].電子技術應用,2014,40(5):143-146.