陳 鵬,陳文藝,楊 輝,李 昂
(1.西安郵電大學(xué)通信與信息系統(tǒng)學(xué)院,陜西西安 710061;2.西安郵電大學(xué)物聯(lián)網(wǎng)與兩化融合研究院,陜西西安 710061)
隨著嵌入式視頻設(shè)備的廣泛應(yīng)用,尤其是基于TI公司達(dá)芬奇視頻處理技術(shù)的DM365芯片在網(wǎng)絡(luò)攝像機(jī)(IP Camera)視頻監(jiān)控方面的成功運(yùn)用,使得DM36x芯片相比其他同類芯片在功耗、擴(kuò)展性、編碼效率、畫質(zhì)等方面的性能均具有一定優(yōu)勢(shì)[1]。特別是DM368芯片的推出,實(shí)現(xiàn)了包括H.246編解碼在內(nèi)。多格式的1080P/30 fip·s-1壓縮且在畫質(zhì)和編碼方面也有了進(jìn)一步的提升。目前在醫(yī)療領(lǐng)域,大部分視頻處理設(shè)備體積龐大并對(duì)PC機(jī)的依賴性較強(qiáng),攜帶不便。而基于DM36x芯片具有擴(kuò)展性強(qiáng)、接口豐富的特點(diǎn),通過外接USB移動(dòng)硬盤,既保證了便攜性的要求,又實(shí)現(xiàn)了大容量數(shù)據(jù)存儲(chǔ)的需要,使得這種醫(yī)用高清DVR系統(tǒng)在國(guó)內(nèi)醫(yī)用領(lǐng)域具有廣闊的發(fā)展前景。
本系統(tǒng)在IP Camera方案的基礎(chǔ)上,以TI公司基于達(dá)芬奇技術(shù)的TMS320DM365處理器為核心,其可無縫連接外接數(shù)字?jǐn)z像頭,也可通過A/D轉(zhuǎn)換外接模擬攝像頭,將采集到的視頻圖像數(shù)據(jù)經(jīng)系統(tǒng)前端處理及H.264、MPEG4、JPEG等標(biāo)準(zhǔn)壓縮后,通過以太網(wǎng)接口傳送到TCP/IP網(wǎng)絡(luò)或通過USB接口存儲(chǔ)到本地設(shè)備中,從而完成用戶通過遠(yuǎn)程PC主機(jī)上的客戶端軟件對(duì)1 280×1 024分辨率每秒30幀視頻的實(shí)時(shí)觀看,以及USB移動(dòng)硬盤的掛載,并將某一時(shí)間段內(nèi)的視頻數(shù)據(jù)以文件的形式保存在本地移動(dòng)硬盤中。
系統(tǒng)架構(gòu)如圖1所示,在TI公司基于達(dá)芬奇技術(shù)的TMS320DM365處理器IP Camera方案的基礎(chǔ)上,通過外接 MT9P031數(shù)字?jǐn)z像頭或模擬攝像頭,完成DM365下1 280×1 024分辨率圖像的每秒30幀視頻采集、壓縮編碼和網(wǎng)絡(luò)傳輸;使用SAMSUNG的500 GB USB移動(dòng)硬盤作為存儲(chǔ)設(shè)備,通過USB移動(dòng)硬盤的掛載實(shí)現(xiàn)大容量視頻錄像的本地存放;用戶可遠(yuǎn)程登錄本機(jī)的Web服務(wù)器網(wǎng)頁(yè),利用VLC視頻播放器播放本機(jī)實(shí)時(shí)拍攝視頻圖像或回放本地硬盤存儲(chǔ)的視頻錄像。
圖1 系統(tǒng)架構(gòu)
系統(tǒng)以驅(qū)動(dòng)的角度,通過1 280×1 024分辨的實(shí)現(xiàn)過程,分析并完成了視頻處理前端中對(duì)各硬件的控制。
在DM365的片上系統(tǒng)中,視頻處理前端(VPFE)是整個(gè)系統(tǒng)中最重要的模塊之一,其是由多個(gè)硬件模塊完成對(duì)數(shù)字視頻圖像的采集與處理,而各硬件模塊工作方式通過寄存器配置。VPFE由以下部分組成:圖像傳感器接口(ISIF)、圖像管道接口(IPIPEIF)、圖像管道(IPIPE)和硬件3A統(tǒng)計(jì)發(fā)生器(H3A)。除上述外設(shè)之外,還有一個(gè)緩沖器,以確保對(duì)DDR2帶寬的有效充分使用[2]。在對(duì)圖像的采集與處理中,本文主要用到了ISIF模塊和IPIPE模塊,如圖2所示。
圖2 ISIF和IPIPE模塊
ISIF模塊主要向圖像傳感器和數(shù)字視頻源提供接口,其實(shí)現(xiàn)的功能包括選擇像素?cái)?shù)據(jù)位寬、色彩空間轉(zhuǎn)換、黑電平補(bǔ)償及A-law/DPCM壓縮等;IPIPE模塊則主要完成對(duì)RAW數(shù)據(jù)的白平衡處理、彩色插值(CFA),即RGB顏色還原、伽馬校正、RGB轉(zhuǎn)YUV、邊緣增強(qiáng)、色度抑制以及尺寸變換等操作[3]。以RGB轉(zhuǎn)YUV為例,此操作是為了視頻數(shù)據(jù)的存儲(chǔ)及H.264編碼傳輸?shù)男枨?。YUV是一種色彩空間的表示方式,通過亮度信號(hào)Y和色度信號(hào)UV來表示色彩。視頻處理前端通過內(nèi)部硬件電路處理可直接將RGB數(shù)據(jù)轉(zhuǎn)換為YUV的偏移形式Y(jié)CbCr格式數(shù)據(jù),其轉(zhuǎn)換過程滿足
對(duì)不同分辨率的輸入視頻,各硬件模塊寄存器設(shè)置不同,原IPCamera方案中不支持1 280×1 024分辨率格式。
視頻處理前端是通過配置寄存器的硬件方式對(duì)圖像進(jìn)行采集與處理的,需有相應(yīng)的驅(qū)動(dòng)來實(shí)現(xiàn)。針對(duì)上述各種硬件驅(qū)動(dòng)是在用戶空間實(shí)現(xiàn),由此開發(fā)人員在實(shí)現(xiàn)不同分辨率的輸入視頻時(shí)無需修改內(nèi)核空間的程序。該種通過用戶空間驅(qū)動(dòng)的實(shí)現(xiàn)過程,如圖3所示。
圖3 用戶空間驅(qū)動(dòng)實(shí)現(xiàn)過程
(1)打開相關(guān)硬件設(shè)備,獲得相關(guān)硬件配置參數(shù)。因涉及到的參數(shù)較多,故為了有效管理各參數(shù),除采用合理的數(shù)據(jù)結(jié)構(gòu)外,所有與分辨率相關(guān)的參數(shù)均是在UIset_config()函數(shù)下進(jìn)行設(shè)置的,如下所示:
imgsConfig→sensorMode=DRV_IMGS_SENSOR_MODE_1 280×1 024;;//對(duì)攝像頭分辨率模式配置;
imgsConfig→sensorFps=30;//對(duì)攝像頭幀率配置;
isifConfig→sensorMode=imgsConfig→sensor-Mode;//對(duì)isif分辨率模式配置;
ipipeConfig→sensorMode=imgsConfig→sensor-Mode;//對(duì)ipipe分辨率模式配置;
ipipeConfig→captureYuvFormat=DRV_DATA_FORMAT_YUV420;;//對(duì)YUV格式配置。
(2)進(jìn)行使能操作,啟動(dòng)各硬件設(shè)備。
(3)對(duì)相關(guān)硬件寄存器進(jìn)行設(shè)置。除攝像頭內(nèi)部寄存器的配置是通過I2C進(jìn)行操作的,其他模塊均是通過相關(guān)sensorMode參數(shù)調(diào)用其配置文件,并最終通過CSL_HwSetup()函數(shù)對(duì)寄存器進(jìn)行真正配置。
(4)取消使能操作,關(guān)閉相應(yīng)的硬件設(shè)備。
由此說明,實(shí)現(xiàn)1 280×1 024分辨率每秒30幀的視頻圖像只需在UIset_config()函數(shù)下對(duì)相應(yīng)模塊分辨率模式配置和幀率配置作出修改即可。
由于IP Camera方案中只支持SD存儲(chǔ),所以為了實(shí)現(xiàn)本系統(tǒng)中大容量數(shù)據(jù)存儲(chǔ)和便攜性的要求,需外接USB移動(dòng)硬盤。系統(tǒng)的CPU集成了OTG規(guī)范的主機(jī)控制器,OTG是USB2.0規(guī)范的補(bǔ)充,其適用于具有主機(jī)功能和更小體積的便攜式設(shè)備,同時(shí)使外設(shè)可在主機(jī)和設(shè)備之間相互轉(zhuǎn)換[4]。DM365上OTG接口原理圖,如圖4所示。
圖4 OTG接口原理圖
本文要實(shí)現(xiàn)在DM365開發(fā)板上使用USB移動(dòng)硬盤,其屬于大容量存儲(chǔ)設(shè)備類[6],在Linux系統(tǒng)下,USB移動(dòng)硬盤被作為一個(gè)SCSI設(shè)備[7],且需使DM365的內(nèi)核支持FAT和NTFS文件系統(tǒng)。因此,在內(nèi)核主目錄下執(zhí)行make menuconfig命令分別對(duì)SCSI device support、USB support以及File systems進(jìn)行配置,如圖5(a)~圖5(c)所示。將配置好的內(nèi)核用交叉編譯器arm_v5t_le-編譯成內(nèi)核壓縮文件uImage,同文件系統(tǒng)一并燒寫到DM365開發(fā)板上運(yùn)行,再接USB移動(dòng)硬盤,打印結(jié)果如圖5(d)所示,則說明硬盤掛載成功。
圖5 USB配置和顯示結(jié)果
CMOS采集到的RAW數(shù)據(jù)經(jīng)視頻處理前端輸出YUV格式數(shù)據(jù),并在協(xié)處理器中進(jìn)行H.264及MPEG4壓縮編碼。流媒體傳輸模塊和存儲(chǔ)模塊則將編碼后的視頻以流的方式實(shí)時(shí)的傳送至客戶端的播放器或存儲(chǔ)在本地硬盤。
圖6 實(shí)時(shí)傳輸和本地存儲(chǔ)結(jié)構(gòu)圖
獲得采集的視音頻編碼流主要接口是GetAVData()函數(shù),其形式為:int GetAVData(unsigned int field,int serial,AV_DATA*ptr)。
其中第1個(gè)參數(shù)代表要獲取的編碼流形式,是音頻流、JPEG視頻流或MPEG4視頻流等;第2個(gè)參數(shù)指的是幀序列號(hào);第3個(gè)參數(shù)表示獲取的編碼流存放結(jié)構(gòu)體AV_DATA指針。以下是AV_DATA結(jié)構(gòu)體的數(shù)據(jù)結(jié)構(gòu):
Typedef struct_av_data
{
unsigned int serial;//幀序列號(hào)
unsigned int size;//幀長(zhǎng)
河北銷售圍繞加油站3.0時(shí)代的建設(shè)要求,在服務(wù)中注重跨界合作,聯(lián)合不同領(lǐng)域的服務(wù)廠家,提供更加便捷的服務(wù)。目前,已與上汽汽車合作成立“車享家”,在加油站即可完成汽車檢測(cè)維修保養(yǎng)等“后汽車服務(wù)”;在便利店與正大食品合作,提供快餐業(yè)務(wù);與當(dāng)?shù)劂y行合作,開展加滿減、加夠減活動(dòng),為顧客節(jié)約省錢。
unsigned int width;//幀的寬度
unsigned int height;//幀的高度
unsigned int frameType;//幀類型
unsigned int timestamp;//時(shí)間戳
unsigned int temporal Id;//臨時(shí)id
int ref_serial[FMT_MAX_NUM];//記錄的參考幀序列號(hào)
unsigned char*ptr;//獲取的數(shù)據(jù)域
}AV_DATA。
本系統(tǒng)通過基于Live555的開源項(xiàng)目,實(shí)現(xiàn)了對(duì)傳輸模塊的支持,平臺(tái)視頻流直播部分通過 wisstream實(shí)現(xiàn)。在Live555官網(wǎng)上有wis-stream的代碼下載,將其修改,并在framedsource中加入了GetAVdata接口,從而實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)觀看[8]。
此外,存儲(chǔ)模塊也是通過GetAVdata接口實(shí)現(xiàn)視頻流的本地存儲(chǔ),其是一個(gè)獨(dú)立的進(jìn)程,實(shí)現(xiàn)過程如圖7所示。
圖7 存儲(chǔ)模塊實(shí)現(xiàn)過程
(1)av_register_all()負(fù)責(zé)初始化libavcodec庫(kù),并注冊(cè)所有的編解碼器和格式。
(2)guess_format()根據(jù)文件名自動(dòng)獲取輸出文件格式,默認(rèn)為mpeg。
(3)av_alloc_format()分配輸出媒體內(nèi)容。
(4)av_set_parameters()設(shè)置輸出參數(shù),若無參數(shù),則仍會(huì)被調(diào)用,以提醒用戶輸入?yún)?shù)。
(5)open_video()打開視頻編解碼器并分配必要的編碼緩存,默認(rèn)分配的緩存約為200 kB。
(6)write_video_frame()向輸出媒體文件寫入一個(gè)包,該包會(huì)包含一個(gè)視頻幀和相應(yīng)的文件格式,這一視頻幀就是通過GetAVData接口得到的。
(7)close_video()和av_free()關(guān)閉每個(gè)編解碼器,并釋放資源。
Web服務(wù)器用于與客戶端瀏覽器進(jìn)行通信,響應(yīng)客戶端的連接請(qǐng)求,并將系統(tǒng)的各項(xiàng)參數(shù)傳輸至客戶端瀏覽器中并以網(wǎng)頁(yè)的形式呈現(xiàn)給用戶。由此,用戶在Web服務(wù)器網(wǎng)頁(yè)界面使用存儲(chǔ)命令,系統(tǒng)內(nèi)部就會(huì)通過調(diào)用存儲(chǔ)模塊的應(yīng)用程序Appro_avi_save,將編碼后的視頻流以文件的形式保存在相應(yīng)路徑的媒體文件中,即USB移動(dòng)硬盤所掛載的目錄下。
在客戶端下用VLC實(shí)時(shí)觀看1 280×1 024分辨率視頻,如圖8所示。
圖8 VLC實(shí)時(shí)觀看1 280×1 024分辨率視頻
本文基于TI公司達(dá)芬奇技術(shù)的TMS320DM365處理器IPCamera方案,設(shè)計(jì)了一種醫(yī)用高清DVR系統(tǒng),能對(duì)1 280×1 024分辨率每秒30幀的視頻圖像進(jìn)行實(shí)時(shí)視頻采集、網(wǎng)絡(luò)傳輸和播放,并通過外接移動(dòng)硬盤實(shí)現(xiàn)大容量視頻錄像及回放功能,滿足了便攜式醫(yī)療視頻設(shè)備對(duì)高分辨率和大容量視頻的存儲(chǔ)與播放要求。此外,也為下一階段基于DM368處理器實(shí)現(xiàn)更高性能的高清DVR系統(tǒng)研發(fā)打下了基礎(chǔ)。
[1]馬洪蕊,蔣心曉,劉紹南.嵌入式視頻應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[M].北京:北京航空航天大學(xué)出版社,2011.
[2]Texas Instruments.LSP2.10 Davinci linux drivers data manual[M].Tex USA:Texas Instruments 2007.
[3]Texas Instruments.Video processing front end(VPFE)[M].Tex USA:Texas Instruments,2007.
[4]仲偉峰,李全利,徐軍.基于ARM的嵌入式USB主機(jī)系統(tǒng)設(shè)計(jì)[J].哈爾濱理工大學(xué)學(xué)報(bào),2010,15(6):42-46.
[5]龔躍玲,汪玲彥.基于STM32的USB OTG數(shù)據(jù)通信的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2011,30(10):32 -34,37.
[6]季春志.基于Linux平臺(tái)USB視頻設(shè)備驅(qū)動(dòng)技術(shù)的研究與實(shí)現(xiàn)[D].合肥:合肥工業(yè)大學(xué),2009.
[7]張義棟,孫未.Linux下USB大容量存儲(chǔ)設(shè)備驅(qū)動(dòng)分析與實(shí)現(xiàn)[J].電子世界,2013(1):9-11.
[8]王雅,陳文藝,葉欣.基于DM365的嵌入式監(jiān)控平臺(tái)研究[J].保密科學(xué)技術(shù),2013(2):33 -38.