摘 要: 針對視頻監(jiān)控終端設(shè)備中的視頻實(shí)時(shí)顯示、編碼數(shù)據(jù)本地存儲(chǔ)備份等雙重需求,設(shè)計(jì)了一種基于DM365視頻處理芯片、H.264壓縮技術(shù)、嵌入式Linux操作系統(tǒng)的雙碼流視頻監(jiān)控終端設(shè)備。給出了系統(tǒng)的總體軟硬件結(jié)構(gòu),重點(diǎn)闡述了視頻處理子系統(tǒng)模塊(包括視頻前端采集模塊和視頻后端顯示模塊)以及視頻編碼模塊。測試結(jié)果表明,系統(tǒng)實(shí)時(shí)監(jiān)測性能良好,本地存儲(chǔ)的編碼數(shù)據(jù)清晰穩(wěn)定,具有很強(qiáng)的實(shí)用性和廣闊的發(fā)展前景。
關(guān)鍵詞: 視頻監(jiān)控;DM365;ARM
0 引言
隨著網(wǎng)絡(luò)技術(shù)、視頻編解碼技術(shù)、信息處理技術(shù)在安防領(lǐng)域中的應(yīng)用日趨成熟,視頻監(jiān)控系統(tǒng)的發(fā)展也從最初的模擬視頻監(jiān)控系統(tǒng)發(fā)展到了如今的網(wǎng)絡(luò)數(shù)字視頻監(jiān)控系統(tǒng)[1]。以往視頻圖像處理算法主要由DSP處理,但是隨著算法復(fù)雜度的增加及視頻分辨率的提高,傳統(tǒng)DSP逐漸無法勝任這方面的工作[2]。為此,需要新的處理器架構(gòu)來提高視頻算法的并行性與帶寬。當(dāng)前TI公司已經(jīng)推出相關(guān)的異構(gòu)處理器與多核DSP;英偉達(dá)公司推出了最新的SoC芯片Tegra4,其內(nèi)含4個(gè)Cortex.A15和72個(gè)GeForceGPU[3-4]。最新的SoC制程也已經(jīng)達(dá)到28 nm,幾乎取得了相當(dāng)于PC的頻率帶寬。由于視頻的數(shù)據(jù)量大,占用帶寬多,這不僅對網(wǎng)絡(luò)是個(gè)不小的負(fù)擔(dān),對圖像本地存儲(chǔ)備份的能力也有很大的影響,所以就需要采取一種高效的壓縮算法對視頻進(jìn)行編碼,以降低其所占用的網(wǎng)絡(luò)帶寬和存儲(chǔ)空間[5]。近年來,H.264、MJPGE等算法的研究使得網(wǎng)絡(luò)較實(shí)時(shí)傳輸和本地存儲(chǔ)備份成為了可能。最新的H.265壓縮算法的出現(xiàn)大大提高了視頻傳輸效率,但這需要相應(yīng)的處理器能力的提高[6]。
本文所設(shè)計(jì)的多路數(shù)據(jù)流視頻監(jiān)控終端設(shè)備基于TI公司的TMS320DM365芯片,支持雙路不同分辨率大小的數(shù)據(jù)流,分別實(shí)現(xiàn)兩種不同的功能,第一路數(shù)據(jù)流實(shí)現(xiàn)D1(720×576)分辨率大小H.264編碼數(shù)據(jù)的本地存儲(chǔ)備份,第二路數(shù)據(jù)流實(shí)現(xiàn)QVGA(320×240)分辨率大小原始數(shù)據(jù)的實(shí)時(shí)顯示。
1 系統(tǒng)總體設(shè)計(jì)框架
本文采用視頻采集芯片+多核芯片(ARM核+DSP核或編解碼協(xié)處理器組成)的方案來設(shè)計(jì)視頻監(jiān)控終端設(shè)備,這種方案將視頻采集芯片獲得的數(shù)據(jù)接入到多核芯片中,再交由DSP核或編解碼協(xié)處理器完成視頻數(shù)據(jù)的編碼,最終通過ARM核對系統(tǒng)進(jìn)行控制,完成數(shù)據(jù)流的正確傳遞和其他必要操作。這種方案成本較低,性價(jià)比較高。
硬件框架方面,選用了TI公司的基于DaVinci技術(shù)的TMS320DM365芯片作為處理器芯片,以及同為TI公司出品的TVP5151芯片作為視頻前端采集芯片來搭建嵌入式視頻監(jiān)控設(shè)備。
系統(tǒng)硬件框架設(shè)計(jì)圖如圖1所示。
軟件框架方面,采用多線程配合工作的方案進(jìn)行設(shè)計(jì),多線程編程相較于多進(jìn)程編程,它不僅在資源利用率方面有較大的優(yōu)勢,同時(shí)也大大降低了程序員編程的難度,加快了項(xiàng)目軟件的開發(fā)。
2 視頻處理子系統(tǒng)模塊
TMS320DM365芯片上提供了一個(gè)視頻處理子系統(tǒng)(VPSS),用于視頻數(shù)據(jù)的實(shí)時(shí)采集、播放等功能。VPSS內(nèi)部集成了一個(gè)視頻處理前端模塊(VPFE)和一個(gè)視頻處理后端模塊(VPBE),VPFE用來控制接入的外部圖像采集設(shè)備,如圖像傳感器、視頻解碼器等,本系統(tǒng)接入了TVP5151視頻解碼器。VPBE則用來控制接入的顯示設(shè)備,如標(biāo)清的模擬電視顯示器、數(shù)字的LCD液晶顯示屏等,本系統(tǒng)接入了RGB565LCD液晶顯示屏。此外,VPSS還集成了內(nèi)存緩存區(qū)和DMA(直接內(nèi)存訪問)控制器,用來保證有效地利用DDR2或mDDR,控制突發(fā)帶寬。
2.1 驅(qū)動(dòng)配置
2.1.1 VPFE采集驅(qū)動(dòng)的配置
VPFE采集驅(qū)動(dòng)通過標(biāo)準(zhǔn)的V4L2接口將底層硬件的功能暴露給了上層應(yīng)用程序,這樣,應(yīng)用程序就能通過控制V4L2設(shè)備(/dev/Video0)來獲取由連接到VPFE的視頻解碼器(如TVP5151)采集到的一幀原始數(shù)據(jù)。VPFE硬件模塊支持以下兩種不同的數(shù)據(jù)管道[7],如圖2所示。
?。?)輸入接口通過IPIPE接入到SDRAM,所有型號(hào)的SoC都支持這個(gè)通道。
(2)輸入接口通過IPIPE接入到Previewer,并最終從Resizer輸出兩種不同分辨率大小的視頻數(shù)據(jù)到SDRAM,從RSZ-A輸出的是原始分辨率大小的圖像,用于后續(xù)的數(shù)據(jù)編碼,從RSZ-B輸出的是分辨率較小的圖像,用于后續(xù)的實(shí)時(shí)顯示。
為了實(shí)現(xiàn)前文所述的視頻實(shí)時(shí)顯示功能,通過VPFE驅(qū)動(dòng)將VPFE硬件模塊配置成第二種數(shù)據(jù)流通道的采集方式。
2.1.2 VPBE顯示驅(qū)動(dòng)的配置
VPBE顯示驅(qū)動(dòng)由更底層的V4L2(Video for Linux 2)驅(qū)動(dòng)和FB(Frame Buffer)驅(qū)動(dòng)構(gòu)成,當(dāng)內(nèi)核加載V4L2驅(qū)動(dòng)時(shí),它會(huì)向內(nèi)核注冊/dev/Video2和/dev/Video3兩個(gè)設(shè)備,而當(dāng)內(nèi)核加載FB驅(qū)動(dòng)時(shí),它會(huì)向內(nèi)核注冊/dev/fb/0、/dev/fb/1、/dev/fb/2、/dev/fb/3 4個(gè)設(shè)備,注冊的設(shè)備都對應(yīng)了它們所能控制的圖層[8],對應(yīng)關(guān)系如表1所示。
可以通過設(shè)置系統(tǒng)啟動(dòng)參數(shù)來決定VPBE驅(qū)動(dòng)被加載時(shí)會(huì)向內(nèi)核注冊的設(shè)備,以此決定開啟的圖層以及圖層開啟后受何種設(shè)備控制[9],例如,注冊/dev/fb/3設(shè)備,VID1圖層將被開啟且只受/dev/fb/3設(shè)備控制。在實(shí)際方案中,啟動(dòng)參數(shù)指定VPBE向內(nèi)核注冊/dev/Video2設(shè)備和/dev/fb/0設(shè)備,分別開啟了VID0圖層和OSD0圖層,其中VID0圖層受/dev/Video2設(shè)備控制,用于顯示采集到的視頻數(shù)據(jù),而OSD0圖層受/dev/fb/0設(shè)備控制,用于顯示QT等UI交互界面,其余圖層默認(rèn)保持關(guān)閉狀態(tài)。
VID0圖層的數(shù)據(jù)和VID1圖層的數(shù)據(jù)會(huì)依次經(jīng)過VPBE硬件模塊中的OSD部件和ENC部件,最終由DAC模塊輸出模擬信號(hào)或者由LCD控制器輸出數(shù)字信號(hào)[10],數(shù)據(jù)管道如圖3所示。
在前文中已提到,LCD液晶屏被接入到了VPBE模塊,所以VPBE驅(qū)動(dòng)將VPBE硬件模塊配置成視頻數(shù)據(jù)由VID0圖層輸入,并最終通過LCD控制器輸出到LCD液晶屏上。
2.2 應(yīng)用程序設(shè)計(jì)
在VPFE驅(qū)動(dòng)將VPFE硬件模塊配置為雙分辨率數(shù)據(jù)流的前提下,將應(yīng)用層程序設(shè)計(jì)為一路數(shù)據(jù)流用于視頻實(shí)時(shí)顯示,另外一路數(shù)據(jù)流用于視頻編碼,Capture線程數(shù)據(jù)流程圖如圖4所示。
?。?)第一路數(shù)據(jù)流
hCapture-->hCapBuf-->hDstBuf(D1:720x576)-->hOutFifo,用于視頻編碼存儲(chǔ)。
?。?)第二路數(shù)據(jù)流
hCapture-->hCapBuf-->hRzbBuf-->hDisBuf(QVGA:320x240)-->hDisplay,用于視頻實(shí)時(shí)顯示。
hCapBuf緩存用于存放VPFE采集驅(qū)動(dòng)采集到的原始視頻數(shù)據(jù),存放著736×576大小的數(shù)據(jù),hDstBuf緩存中的數(shù)據(jù)用于供后續(xù)視頻編碼存儲(chǔ),存放著D1:720×576大小的數(shù)據(jù),hDisBuf緩存中的數(shù)據(jù)用于供后續(xù)視頻顯示回放,存放著QVGA:320×240大小的數(shù)據(jù),hRzbBuf緩存中的數(shù)據(jù)用于供后續(xù)視頻編碼上傳。
3 視頻編碼模塊
原始視頻數(shù)據(jù)的編解碼需要用到達(dá)芬奇軟件框架的Codec Engine(編解碼引擎)技術(shù)來實(shí)現(xiàn)。Codec Engine定義了一組VISA(Video Image Speech Audio)APIs接口供應(yīng)用程序調(diào)用。DM365的高清視頻協(xié)處理器(HDVICP)封裝了相應(yīng)的編解碼算法,ARM處理器中的應(yīng)用程序可以通過VISA-APIs接口對編解碼算法進(jìn)行調(diào)用。ARM處理器負(fù)責(zé)執(zhí)行應(yīng)用程序,視頻協(xié)處理器負(fù)責(zé)執(zhí)行編解碼算法,這樣不僅大大降低了ARM處理器的CPU占用率,還能提高編解碼的效率。本文采用H.264編碼標(biāo)準(zhǔn)進(jìn)行編碼,需要調(diào)用相應(yīng)的H.264算法實(shí)例。
3.1視頻編碼接口
H.264是一種高性能的視頻編解碼標(biāo)準(zhǔn),繼承了H.263和MPEG1/2/4視頻編碼器的優(yōu)點(diǎn)。H.264標(biāo)準(zhǔn)中定義了兩個(gè)層次:視頻編碼層(VCL)和網(wǎng)絡(luò)抽象層(NAL),VCL負(fù)責(zé)高效的數(shù)字視頻數(shù)據(jù)壓縮,NAL提供適當(dāng)?shù)慕涌趯?shù)據(jù)進(jìn)行打包和傳送。
為了得到H.264格式的視頻流,需要配置alg_server.cfg文件來實(shí)現(xiàn)對已經(jīng)編譯算法的調(diào)用,文件配置如下:
var H264ENC=xdc.useModule(′ti.sdo.codecs.h264enc.ce.H264ENC′);//指定調(diào)用的算法
var myEngine=Engine.create("alg_server",[{name:"h264enc",mod:H264ENC,local:true,groupId:1}]);
//創(chuàng)建引擎實(shí)例
在應(yīng)用程序中能調(diào)用的接口函數(shù)有:VIDENC1_create、VIDENC1_control、VIDENC1_process和VIDENC1_delete,它們分別負(fù)責(zé)編碼實(shí)例的創(chuàng)建、控制、運(yùn)行以及最終的清除。
3.2 應(yīng)用程序設(shè)計(jì)
所設(shè)計(jì)的Video線程基于Capture線程,Capture線程向Video線程輸入一路D1:720×576大小的數(shù)據(jù)流,Video線程如圖5所示。
4 測試結(jié)果
測試環(huán)境搭建方法如下:
?。?)LCD液晶屏連接在以TMS320DM365為主芯片的產(chǎn)品板上,TMS320DM365主芯片的CPU頻率為216 MHz,板載Flash為1 GB,板載DDR2為128 MB。
?。?)本地備份的視頻數(shù)據(jù)文件存儲(chǔ)在SD卡中,文件格式為H.264,文件大小為6.2 MB,總時(shí)長為1 min,使用VLC播放器播放。
經(jīng)測試,視頻監(jiān)控終端設(shè)備能實(shí)時(shí)地顯示攝像頭采集到的視頻畫面,顯示畫面大小為QVGA(320×240),如圖7(a)所示。SD卡里存儲(chǔ)備份的視頻數(shù)據(jù)也成功紀(jì)錄了一段時(shí)間內(nèi)的視頻畫面,分辨率大小為D1(720× 576),如圖7(b)所示。
5 結(jié)論
本文設(shè)計(jì)實(shí)現(xiàn)了基于TMS320DM365硬件平臺(tái)的視頻監(jiān)控終端設(shè)備,該視頻監(jiān)控終端設(shè)備不僅具有數(shù)據(jù)采集功能,而且還集成了本地存儲(chǔ)備份以及原始數(shù)據(jù)實(shí)時(shí)顯示等核心功能。采用TMS320DM365的ARM+DSP雙核模式,提高了編碼效率以及傳輸效率,通過測試發(fā)現(xiàn),實(shí)時(shí)圖像清晰流暢,ARM資源占有率低,可擴(kuò)展性大,滿足系統(tǒng)實(shí)時(shí)性和穩(wěn)定性的要求。
參考文獻(xiàn)
[1] 張偉.視頻監(jiān)控技術(shù)的發(fā)展歷程和方向[J].中國交通信息產(chǎn)業(yè),2007(6):139-142.
[2] 鄭磊.基于嵌入式Linux的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)研究[D].武漢:武漢理工大學(xué),2011.
[3] 劉繼超.基于DM355的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)[D].青島:青島科技大學(xué),2012.
[4] 望重.嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)[D].鎮(zhèn)江:江蘇大學(xué),2010.
[5] 胡攀.基于Linux的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)[D].武漢:武漢理工大學(xué),2012.
[6] 項(xiàng)昌晨,王磊.基于TMS320DM365的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].機(jī)電一體化,2011,17(12):58-63.
[7] Texas Instruments. Davinci Linux VPFE Capture Driver[EB/OL].[2014-12-15].http://www.ti.com/lit/an/sprs566a/sprs566a.pdf.
[8] Texas Instruments, Video Processing Back End(VPBE)[EB/OL].[2014-12-15].http://www.ti.com.cn/cn/lit/ug/sprufg9c/sprufg9c.pdf.
[9] Texas Instruments, LSP 2.10 DaVinci Linux VPBE Frame Buffer Driver[EB/OL]. [2014-12-15]. http://www.ti.com/lit/ug/spruek9/spruek9.pdf.
[10] Texas Instruments, LSP 2.10 DaVinci Linux V4L2 Display Driver[EB/OL]. [2014-12-15]. http://www.ti.com/lit/ug/spruel3/spruel3.pdf.