摘 要: 針對(duì)視頻監(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)模塊(包括視頻前端采集模塊和視頻后端顯示模塊)以及視頻編碼模塊,。測(cè)試結(jié)果表明,,系統(tǒng)實(shí)時(shí)監(jiān)測(cè)性能良好,本地存儲(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ù)量大,占用帶寬多,,這不僅對(duì)網(wǎng)絡(luò)是個(gè)不小的負(fù)擔(dān),,對(duì)圖像本地存儲(chǔ)備份的能力也有很大的影響,所以就需要采取一種高效的壓縮算法對(duì)視頻進(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核對(duì)系統(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ì),同時(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所示,。
(1)輸入接口通過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)核注冊(cè)/dev/Video2和/dev/Video3兩個(gè)設(shè)備,,而當(dāng)內(nèi)核加載FB驅(qū)動(dòng)時(shí),它會(huì)向內(nèi)核注冊(cè)/dev/fb/0,、/dev/fb/1,、/dev/fb/2、/dev/fb/3 4個(gè)設(shè)備,注冊(cè)的設(shè)備都對(duì)應(yīng)了它們所能控制的圖層[8],,對(duì)應(yīng)關(guān)系如表1所示,。
可以通過設(shè)置系統(tǒng)啟動(dòng)參數(shù)來決定VPBE驅(qū)動(dòng)被加載時(shí)會(huì)向內(nèi)核注冊(cè)的設(shè)備,以此決定開啟的圖層以及圖層開啟后受何種設(shè)備控制[9],,例如,,注冊(cè)/dev/fb/3設(shè)備,VID1圖層將被開啟且只受/dev/fb/3設(shè)備控制,。在實(shí)際方案中,,啟動(dòng)參數(shù)指定VPBE向內(nèi)核注冊(cè)/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所示,。
(1)第一路數(shù)據(jù)流
hCapture-->hCapBuf-->hDstBuf(D1:720x576)-->hOutFifo,,用于視頻編碼存儲(chǔ),。
(2)第二路數(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接口對(duì)編解碼算法進(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ù)慕涌趯?duì)數(shù)據(jù)進(jìn)行打包和傳送。
為了得到H.264格式的視頻流,,需要配置alg_server.cfg文件來實(shí)現(xiàn)對(duì)已經(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 測(cè)試結(jié)果
測(cè)試環(huán)境搭建方法如下:
(1)LCD液晶屏連接在以TMS320DM365為主芯片的產(chǎn)品板上,,TMS320DM365主芯片的CPU頻率為216 MHz,,板載Flash為1 GB,板載DDR2為128 MB,。
?。?)本地備份的視頻數(shù)據(jù)文件存儲(chǔ)在SD卡中,,文件格式為H.264,文件大小為6.2 MB,,總時(shí)長(zhǎng)為1 min,,使用VLC播放器播放。
經(jīng)測(cè)試,,視頻監(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雙核模式,,提高了編碼效率以及傳輸效率,通過測(cè)試發(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.