王紅亮,馬 軍,曲 皎
(中北大學(xué)電子測(cè)試技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051)
通信技術(shù)、移動(dòng)終端的升級(jí)換代,大數(shù)據(jù)處理技術(shù)的快速發(fā)展帶來社會(huì)生產(chǎn)生活方式的巨大變革。視頻影像娛樂方面人們更追求高清、全高清、超高清分辨率的細(xì)膩畫面[1];軍工產(chǎn)業(yè)方面,高質(zhì)量的影像資料能更好地促進(jìn)工程的順利開展,而此領(lǐng)域面臨著上一代視頻設(shè)備采集存儲(chǔ)設(shè)備的更新?lián)Q代問題。為了解決視頻采集分辨率低,視頻壓縮算法壓縮比低,存儲(chǔ)設(shè)備速率低和容量不夠等問題[2],設(shè)計(jì)了一種全高清視頻壓縮編碼與存儲(chǔ)系統(tǒng),整個(gè)系統(tǒng)外接HDMI 接口的全高清視頻(分辨率為1 920?1 080P@60 frame/s),采用H.264 高壓縮比編碼算法,并實(shí)現(xiàn)壓縮碼流的本地固態(tài)存儲(chǔ)。
綜合考慮開發(fā)周期、開發(fā)難度及實(shí)際需求等因素,本設(shè)計(jì)選用硬件壓縮方案,根據(jù)通用性及易購買性,選用華為海思的Hi3516A 芯片,此芯片可以實(shí)現(xiàn)全高清視頻H.264 三個(gè)檔次的編碼,內(nèi)嵌了ARM處理器,運(yùn)行Linux 操作系統(tǒng)[3],芯片支持多種分辨率及幀頻的視頻輸入。
本系統(tǒng)大容量視頻存儲(chǔ)模塊采用FPGA +FLASH 陣列實(shí)現(xiàn)Hi3516A 芯片壓縮編碼圖像數(shù)據(jù)的存儲(chǔ)。FPGA+FLASH 陣列存儲(chǔ)方案是目前大容量視頻存儲(chǔ)的主流方案[4],利用并行總線技術(shù)和流水線設(shè)計(jì)組成的FLASH 陣列容量大,速度高,后期可根據(jù)實(shí)際應(yīng)用需求進(jìn)行FLASH 陣列的擴(kuò)展,繼續(xù)提高存儲(chǔ)速度和容量[5-6]。
系統(tǒng)總設(shè)計(jì)框圖如圖1 所示,整個(gè)系統(tǒng)包含視頻接口轉(zhuǎn)換模塊、視頻實(shí)時(shí)壓縮編碼模塊和視頻存儲(chǔ)模塊三個(gè)部分,全高清數(shù)字視頻為輸入源,視頻經(jīng)壓縮后存儲(chǔ)在FLASH 中,最后由外部USB 讀數(shù)設(shè)備將壓縮碼流文件上傳至PC 端解碼播放。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
視頻接口轉(zhuǎn)換模塊將HDMI 接口的音視頻混合差分信號(hào)轉(zhuǎn)換成為BT1120 接口的YCbCr4:2:2 格式的視頻以便于Hi3516A 的接收。本著功能模塊化設(shè)計(jì)和儀器通用性設(shè)計(jì)的考慮,視頻接口轉(zhuǎn)換電路由FPGA 控制,將Hi3516A 平臺(tái)自帶的視頻接口預(yù)留出來,在今后系統(tǒng)移植、不同模塊組合時(shí)方便二次開發(fā)。視頻壓縮模塊將BT1120 接口的視頻經(jīng)H.264 編碼壓縮后通過USB2.0 接口將H.264 裸流發(fā)送至視頻存儲(chǔ)模塊,此模塊通過Hi3516A 的MPP(軟件開發(fā)平臺(tái))提供的API 接口以及l(fā)ibusb 庫提供API 接口開發(fā)應(yīng)用程序?qū)崿F(xiàn)。視頻存儲(chǔ)模塊由USB 2.0 接口電路模塊和FLASH 存儲(chǔ)電路模塊兩部分組成,用于讀取USB 2.0 接口的壓縮碼流并存儲(chǔ)在FLASH 陣列中。
視頻壓縮編碼模塊主要以海思的Hi3516A 開發(fā)板為設(shè)計(jì)平臺(tái),完成軟件流程的設(shè)計(jì)。圖2 為Hi3516A 軟件設(shè)計(jì)框圖。
圖2 Hi3516A 軟件設(shè)計(jì)框圖
本系統(tǒng)通過調(diào)用MPP 提供的相關(guān)API 接口完成BT1120 接口視頻的輸入、處理及編碼,H.264 碼流的實(shí)時(shí)傳輸通過Hi3516A 平臺(tái)的USB 2.0 接口實(shí)現(xiàn)。
Hi3516A 軟件中的系統(tǒng)控制主要完成硬件復(fù)位及初始化、公共視頻緩存池的初始化、MPP 初始化及各功能模塊的綁定功能。在視頻輸入之前,需要先進(jìn)行系統(tǒng)初始化任務(wù),具體流程如下。
Hi3516A 內(nèi)部經(jīng)集成視頻捕獲單元VICAP(Video capture),它包含一個(gè)視頻輸入設(shè)備:Dev0,和一個(gè)物理通道:Chn0,Dev0 獲取的圖像經(jīng)Chn0 到達(dá)VPSS 模塊。
視頻輸入程序段流程圖以及相應(yīng)的API 接口如圖4 所示。輸入設(shè)備和輸入通道需要配置的屬性有輸入視頻分辨率,掃描方式,像素格式,目標(biāo)圖像大小等,成功時(shí)配置函數(shù)返回值為0。需注意輸入通道Ch0 配置的目標(biāo)圖像大小不得小于輸入設(shè)備Dev0 配置的圖像大小。至此,啟動(dòng)視頻輸入模塊,開始采集BT1120 接口的視頻數(shù)據(jù)。
圖3 系統(tǒng)初始化程序流程圖
圖4 視頻輸入程序段流程圖及API
VI 模塊獲取的視頻需經(jīng)過VPSS(視頻處理子系統(tǒng))模塊,此模塊完成視頻數(shù)據(jù)的預(yù)處理,包括去隔行、去噪、遮擋、裁剪、縮放等。
VPSS 模塊流程圖以及相應(yīng)的API 如圖5 所示。此模塊主要完成VPSS 組和通道的創(chuàng)建以及VPSS和VI 的綁定。Hi3516A 平臺(tái)支持VPSS 模塊創(chuàng)建一個(gè)組,組接收VI 模塊采集的1 080P 視頻,然后送到VPSS 通道,VPSS 通道可與視頻編碼模塊通道對(duì)接。
圖5 視頻處理程序段流程圖及API
Hi3516A 集成視頻硬件編碼器,支持H.264、H.265、MPEG 等多種編碼算法。本系統(tǒng)編碼模塊創(chuàng)建一個(gè)編碼通道對(duì)接VPSS 通道,完成輸入視頻的H.264 編碼。
VENC 編碼模塊包含碼率控制器(RC)和編碼器(Encoder)。RC 支持三種碼率控制模式,VBR(可變比特率)、FIXQP(固定QP 值)和CBR(固定比特率),本系統(tǒng)選用CBR 模式來實(shí)現(xiàn)平均碼流速率編碼。兼顧輸入視頻的分辨率、幀率和輸出視頻的質(zhì)量要求,本系統(tǒng)設(shè)置為4 096 kbit/s 的碼流速率,輸出幀率設(shè)置為25 frame/s。編碼模塊流程圖以及相應(yīng)的API 接口如圖6 所示。
圖6 視頻編碼程序段流程圖及API
編碼模塊產(chǎn)生的H.264 碼流需通過開辟線程發(fā)送出去。圖7 所示為碼流獲取發(fā)送流程圖及相應(yīng)的API 接口。Hi3516A 多媒體處理器支持多種外部通信接口,本系統(tǒng)選用USB 2.0 接口進(jìn)行通信,它將編碼完成后的碼流發(fā)送至視頻存儲(chǔ)模塊。USB 2.0 的批量傳輸利用libusb 提供的API 接口完成。
圖7 碼流獲取發(fā)送流程圖及API
Hi3516A 平臺(tái)生成的H.264 碼流通過對(duì)接FPGA 平臺(tái)的USB 接口來完成存儲(chǔ)。總體邏輯如圖8 所示,由Sil9135 接口控制模塊、FLASH 陣列控制模塊、USB2.0 接口控制模塊組成。
圖8 FPGA 總體邏輯框圖
視頻接口轉(zhuǎn)換電路以SiL9135A 芯片為核心,將通過HDMI 傳輸?shù)母咔鍞?shù)字視頻轉(zhuǎn)換為BT1120 接口信號(hào)輸入到Hi3516A 平臺(tái),此芯片的配置通過IIC 總線由SiL9135 控制模塊來完成,相關(guān)寄存器如表1 所示。
表1 Sil9135 寄存器配置
USB2.0 接口芯片選用 Cypress 公司的CY7C68013A,此芯片配置為Slave fifo 模式,作為從設(shè)備與FPGA 進(jìn)行通信[7],本系統(tǒng)采用官方提供的從FIFO 模式固件程序。只用到一個(gè)數(shù)據(jù)讀FIFO,將地址線設(shè)置為00,選擇端口2。FPGA 通過異步讀CY7C68013 A 端口2 FIFO 中的數(shù)據(jù)來實(shí)現(xiàn)與接口電路的通信。
USB 讀數(shù)狀態(tài)轉(zhuǎn)換圖如圖9 所示,復(fù)位進(jìn)入IDLE 空閑狀態(tài),當(dāng)檢測(cè)到端口2 狀態(tài)指示信號(hào)FLAGA 為1(端口2 FIFO 非空)時(shí),發(fā)送讀FIFO 指令,流程為順序USB_SLOE 和USB_SLRD 信號(hào)置0,在RD_CMD 狀態(tài)停留8 個(gè)時(shí)鐘周期后USB_SLRD 置1,此時(shí)數(shù)據(jù)異步讀出到緩存FIFO,而后由FLASH控制模塊獲取。
圖9 USB 讀數(shù)狀態(tài)轉(zhuǎn)換圖
本系統(tǒng)選用2 片MT29F256G08AUAAA FLASH作為存儲(chǔ)介質(zhì)。FLASH 控制模塊邏輯如圖10 所示。該模塊設(shè)計(jì)了標(biāo)準(zhǔn)的FIFO 數(shù)據(jù)和控制接口信號(hào)來完成與外部FIFO 的通信,模塊內(nèi)部利用并行總線技術(shù)將兩片F(xiàn)LASH 擴(kuò)展到16bit,并簡(jiǎn)化控制邏輯,使用單總線控制技術(shù),在流水線操作方式下完成兩片芯片的讀寫、擦除操作,大大提高讀寫速率和操作效率。
圖10 FLASH 控制模塊結(jié)構(gòu)圖
利用USB 讀數(shù)設(shè)備將存儲(chǔ)與FLASH 中的碼流數(shù)據(jù)讀出,在PC 端用多媒體軟件VLC 解碼播放,測(cè)試結(jié)果如圖11 所示。
圖11 VLC 播放H.264 文件界面
通過VLC 軟件播放接收到H.264 文件,可以看到視頻播放流暢,無卡頓,且無明顯丟幀或亂碼導(dǎo)致的花屏綠屏。和攝像頭原始圖像相比,如圖12,視頻效果無肉眼可辨差別,說明從視頻獲取到編碼、存儲(chǔ)、回讀,整個(gè)流程工作順利,系統(tǒng)功能良好。
圖12 攝像頭原始圖像
本課題性能測(cè)試包含碼率、壓縮比和視頻質(zhì)量測(cè)試三部分。碼流速率可用迅雷影音查看,在播放H.264 文件過程時(shí),右擊鼠標(biāo),點(diǎn)擊媒體信息可看到基本媒體信息如圖13 所示。
圖13 視頻流基本媒體信息
本課題設(shè)置的H.264 編碼輸出碼率為4 096 kbit/s,從迅雷影音軟件可看到文件類型為H.264 文件,分辨率為1 920?1 080,碼率信息為4 283 kbit/s。測(cè)試多組視頻流,觀測(cè)其碼率,測(cè)試結(jié)果如表2 所示。平均值為4 304 kbit/s,有(4 304-4 096)/4 096≈5%的誤差。
表2 碼率及壓縮比測(cè)試
將上述碼流文件用有“瑞士軍刀”之稱的FFmpeg 軟件解碼成YUV4:2:0 格式的文件[8-10],對(duì)比解碼后YUV 格式文件和壓縮后的H.264 文件大小,計(jì)算其壓縮比,利用如下公式計(jì)算壓縮比:
壓縮比=Y(jié)UV 格式文件:H.264 文件大小
測(cè)試結(jié)果如表2 所示,壓縮比平均值在155 ∶1左右,表明壓縮性能良好。
主要從主觀評(píng)定和客觀評(píng)定兩個(gè)方面來評(píng)定壓縮視頻的質(zhì)量。國際電聯(lián)ITU BT-500 建議在視頻主觀評(píng)價(jià)定義的標(biāo)準(zhǔn)中,將圖像質(zhì)量分為優(yōu)、良、中、差、劣[11],但因主觀測(cè)試評(píng)定主觀性強(qiáng),本課題采用客觀質(zhì)量測(cè)試方法對(duì)圖像質(zhì)量進(jìn)行測(cè)試,通過計(jì)算PSNR 值來進(jìn)行評(píng)估,其含義是峰值信號(hào)與噪聲信號(hào)之比[12],計(jì)算方法為式(1)、式(2):
式中:2n-1 與量化精度相關(guān),n為像素量化精度。MSE(Mean Squared Error)為原始圖像和處理圖像之間的均方誤差,其中1 920 和1 080 分別是圖像寬度值和高度值,X和Y分別是原始圖像和解壓后圖像像素值。
通過MATLAB 計(jì)算壓縮后H.264 文件相對(duì)于解碼后原始YUV 文件的PSNR 值,五個(gè)不同情景下計(jì)算的PSNR 值及其平均值如表3 所示。
表3 不同視頻RSNR 測(cè)試
PSNR 平均值為36.26 dB。通常來說,PSNR 值超過28 dB 時(shí),圖像質(zhì)量的差異不明顯,在35 dB~40 dB 時(shí),肉眼已無法分辨圖像之間的差異,表明本系統(tǒng)壓縮質(zhì)量良好。
本文針對(duì)傳統(tǒng)軍工領(lǐng)域視頻采集存儲(chǔ)設(shè)備分辨率低,存儲(chǔ)時(shí)長等缺陷設(shè)計(jì)了全高清視頻實(shí)時(shí)壓縮編碼與存儲(chǔ)系統(tǒng),從功能和性能的兩方面對(duì)系統(tǒng)測(cè)試的結(jié)果表明,此系統(tǒng)能將1 920?1 080 的全高清視頻實(shí)現(xiàn)150 ∶1 的編碼壓縮比,且壓縮碼流可進(jìn)行達(dá)36 h 時(shí)長存儲(chǔ),很好地實(shí)現(xiàn)了視頻壓縮與存儲(chǔ)的設(shè)計(jì)任務(wù)。另外,此系統(tǒng)可進(jìn)行編碼算法的進(jìn)一步優(yōu)化達(dá)到更好的壓縮質(zhì)量和更小的數(shù)據(jù)量。系統(tǒng)也可從接口等方面擴(kuò)展其應(yīng)用場(chǎng)景及實(shí)用性。