鄭慶紅
(河北遠(yuǎn)東哈里斯通信有限公司,河北石家莊050200)
H.264作為新一代的視頻編解碼標(biāo)準(zhǔn),與以前的標(biāo)準(zhǔn)(如MPEG-4、H.263等)相比,采用了很多先進(jìn)的編碼技術(shù),如幀內(nèi)預(yù)測、多模式運(yùn)動(dòng)估計(jì)和整數(shù)變換及量化等,使得H.264編碼器的壓縮效率、圖像的主觀質(zhì)量和帶寬需求方面都有了顯著提高,成為數(shù)字視頻領(lǐng)域中首選的壓縮標(biāo)準(zhǔn)。
隨著對(duì)H.264標(biāo)準(zhǔn)的研究不斷深入,高級(jí)視頻壓縮技術(shù)(AVC)也帶動(dòng)了相關(guān)領(lǐng)域的發(fā)展,例如高清視頻會(huì)議、流媒體圖像分析和數(shù)字水印等[1]。
在軟交換多媒體調(diào)度系統(tǒng)中,視頻傳輸系統(tǒng)主要完成媒體流的交換控制和視頻編解碼,實(shí)現(xiàn)實(shí)時(shí)、高分辨率的視頻編解碼是其主要技術(shù)難點(diǎn)。
視頻傳輸系統(tǒng)可以劃分為發(fā)送端和接收端2個(gè)部分。發(fā)送端完成視頻源的采集、編碼和碼流發(fā)送;接收端完成碼流接收、解碼和視頻顯示。系統(tǒng)框圖如圖1所示。
圖1 H.264視頻傳輸流程
前端視頻模塊支持?jǐn)?shù)字視頻源文件中保存的YUV碼流和攝像頭采集的實(shí)時(shí)圖像。
對(duì)于實(shí)時(shí)視頻的采集部分,通過Windows支持的VFW(Video For Windows)接口對(duì)攝像頭輸入的視頻進(jìn)行實(shí)時(shí)捕獲[2],并將其中的視頻原始數(shù)據(jù)提取出來,通過圖像從RGB到Y(jié)CbCr色彩空間的轉(zhuǎn)換矩陣,進(jìn)行亮色分離后得到直接可以輸入到H.264編碼器的YUV原始視頻流。
H.264編碼模塊作為發(fā)送端的核心,主要是根據(jù)H.264壓縮協(xié)議將輸入的視頻信息進(jìn)行實(shí)時(shí)壓縮,編碼模塊借鑒了開源x264編碼器,并在其基礎(chǔ)上做了大量的優(yōu)化工作以滿足較高分辨率下視頻處理的實(shí)時(shí)性和流暢性。編碼模塊由于其算法復(fù)雜度較高,是整個(gè)視頻傳輸平臺(tái)的關(guān)鍵技術(shù)難點(diǎn)。
RTP發(fā)送部分負(fù)責(zé)將編碼器輸出的H.264碼流封裝為RTP包,以UDP為承載,將其在網(wǎng)絡(luò)上進(jìn)行傳輸,RTP接收部分負(fù)責(zé)從偵聽端口上接收UDP流,并解包提取其中的有效載荷,同時(shí),RTP協(xié)議棧還提供RTP包間的同步和排序等功能。
接收端的核心為H.264視頻解碼模塊,該模塊參考FFmpeg進(jìn)行設(shè)計(jì),RTP模塊將接收到的網(wǎng)絡(luò)UDP流按照對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議進(jìn)行解包,提取出相應(yīng)的媒體信息,供視頻解碼器的輸入端解碼。由于H.264解碼算法的復(fù)雜度相對(duì)較低,經(jīng)實(shí)際測試表明,視頻解碼能力比較容易滿足系統(tǒng)的實(shí)時(shí)性要求。
由于在大畫面下采用普通的圖形界面GUI方式將像素點(diǎn)逐一繪制到屏幕上的方法,將嚴(yán)重影響程序的執(zhí)行效率,因此,顯示模塊采用Windows下的DirectX工具顯示視頻圖像。
為了滿足視頻處理中的全實(shí)時(shí)要求,編碼器的編碼速度必須要達(dá)到25 fps左右,這樣才能較為流暢地顯示實(shí)時(shí)圖像,特別是在高分辨率(如640×480、704×576)的情況下,編碼算法的運(yùn)算量大大增加。對(duì)編碼器的性能提出了更高的要求。
由于編碼器采用了Intel推出的SSE2多媒體指令集,因此,指令級(jí)的優(yōu)化已經(jīng)達(dá)到了一定的瓶頸,將工作重點(diǎn)放在算法級(jí)和代碼級(jí)優(yōu)化上[3,4],根據(jù)H.264算法中對(duì)視頻壓縮質(zhì)量影響不大的高級(jí)特性[5,6],進(jìn)行了算法的刪減和優(yōu)化。
算法級(jí)優(yōu)化主要包括
①在編碼幀的類型選擇上,去除了B幀部分,因?yàn)榫幋aB幀需要較大的輸入緩存,并且預(yù)測算法的復(fù)雜度較高;
②在RTP協(xié)議棧的傳輸控制下,在編碼之前不通過相關(guān)運(yùn)算來重新排序輸入的視頻幀;
③在圖像的后期處理上,為了簡化計(jì)算量,去除率失真優(yōu)化(RDO),因?yàn)槠鋵?duì)穩(wěn)定信道下傳輸?shù)膱D像質(zhì)量校正作用較小;
④在碼率控制方面,采用一級(jí)編碼方式來代替專門針對(duì)降低碼率提出的二次編碼方式;
⑤在運(yùn)動(dòng)估計(jì)方面,運(yùn)動(dòng)搜索矢量只選擇比較常見的鉆石形和六邊形,關(guān)閉非對(duì)稱交叉多六邊形網(wǎng)格(UMH)和窮盡搜索(ESA)等低效方式,同時(shí)用于輔助運(yùn)動(dòng)估計(jì)方式的多視角視頻編碼(MVC)也從算法框架中去除;
⑥在圖像輸入量化方面,禁止使用用戶自定義量化矩陣,犧牲靈活性的前提下,減少循環(huán)跳轉(zhuǎn)和矩陣求逆運(yùn)算的復(fù)雜度。
代碼級(jí)優(yōu)化主要包括:
①在計(jì)算DCT系數(shù)抽取分?jǐn)?shù)中,用查表來代替循環(huán)計(jì)算非零DCT系數(shù)間距;
②用靜態(tài)大矩陣代替從數(shù)組每次計(jì)算生成的量化/反量化矩陣,降低每次迭代運(yùn)算的開銷;
③將固定量化系數(shù)(QP)的流程分支從碼率控制函數(shù)中提取出來,使得在VBR模式下不必額外加載碼率控制函數(shù);
④將整數(shù)變換的函數(shù)指針直接用其指向的函數(shù)代替,減少多重尋址。
編碼器輸出的H.264碼流將根據(jù) RTP(Realtime Transport Protocol)協(xié)議封裝為RTP包,然后經(jīng)過網(wǎng)絡(luò)傳輸?shù)竭h(yuǎn)端。網(wǎng)絡(luò)傳輸是基于IP協(xié)議,所以最大傳輸單元(MTU)最大為1 500 byte,這其中包括至少20 byte的 IP頭,8 byte的 UDP頭,以及12 byte的RTP頭。這樣,頭信息至少要占用40 byte,那么RTP有效載荷的最大尺寸為1 460 byte,為了防止RTP包在IP層被切割,因此,需要控制輸出的H.264碼流中圖像片的大小。
根據(jù)RFC3984標(biāo)準(zhǔn)的建議,圖像片輸出大小的控制邏輯可以放在視頻編碼層VCL(Video Coding Layer)實(shí)現(xiàn),也可以在網(wǎng)絡(luò)抽象層NAL(NetworkAbstractLayer)實(shí)現(xiàn)。
為了提高編碼器輸出碼流的兼容性,采用通過VCL來控制H.264碼流中圖像片的大小,控制流程如圖2所示。
圖2 VCL控制圖像片大小的流程
對(duì)于RTP/UDP/IP系統(tǒng),可以直接將編碼器輸出的NAL單元作為RTP的有效載荷,同時(shí)作為RFC3984所支持的基礎(chǔ)封包格式,在與第三方視頻設(shè)備進(jìn)行互聯(lián)時(shí),具有良好的兼容性(已經(jīng)與GrandStream公司的視頻設(shè)備實(shí)現(xiàn)互通)。
測試采用H.264標(biāo)準(zhǔn)測試模型(JM),標(biāo)準(zhǔn)模型選用不同分辨率、不同紋理、不同運(yùn)動(dòng)程度和附帶場景切換的測試序列,能夠反映常見的視頻場景,從而可以較為全面地衡量系統(tǒng)的編碼性能。測試序列的特征如表1所示。
表1 測試序列的特征表
H.264編碼器在不同測試序列下的測試結(jié)果表2如示。
表2 不同測試序列對(duì)資源的占用關(guān)系表
在循環(huán)測試系統(tǒng)編碼能力的過程中,由于受測試條件的限制,CPU占用率已達(dá)極限,占據(jù)了雙核中的一個(gè)核的全部處理能力。由表2可以看出,H.264編碼器對(duì)于內(nèi)存占用,跟圖像分辨率有直接關(guān)系,圖像分辨率越高內(nèi)存占用量越大。
編碼速度和傳輸帶寬的需求則是衡量系統(tǒng)編碼器的重要指標(biāo),表2數(shù)據(jù)顯示,優(yōu)化后的算法對(duì)視頻序列的運(yùn)動(dòng)特征比較敏感,編碼復(fù)雜運(yùn)動(dòng)序列所需的時(shí)間明顯高于簡單運(yùn)動(dòng)序列,平均幀率可以滿足實(shí)時(shí)性的要求,同時(shí),隨著原始視頻序列的運(yùn)動(dòng)場景復(fù)雜度的增加,碼率會(huì)有明顯上升。
為了衡量H.264編碼器在壓縮過程中對(duì)圖像質(zhì)量的影響,與H.264標(biāo)準(zhǔn)化測試模型輸出的圖像文件進(jìn)行峰值信噪比(PSNR)比較,限于篇幅,這里只列舉部分測試序列的PSNR對(duì)比圖。H.264編碼器與測試模型輸出的圖像平均PSNR對(duì)比結(jié)果如表3所示。
表3 優(yōu)化算法與測試模型PSNR對(duì)比表
由于測試模型側(cè)重于算法的驗(yàn)證,編碼效率較低,不做任何優(yōu)化基本不具備實(shí)用價(jià)值,但是它能較為真實(shí)地反映H.264算法對(duì)圖像壓縮過程中的熵?fù)p失,以此為標(biāo)準(zhǔn),可以衡量編碼過程中對(duì)圖像質(zhì)量的影響。
由表3可以看出,經(jīng)過算法優(yōu)化后,編碼器在提高編碼速度和效率的同時(shí),會(huì)造成圖像壓縮質(zhì)量在一定程度上的下降。
在分辨率為4CIF(704×576)的不同視頻場景下,與標(biāo)準(zhǔn)測試模型相比較,PSNR平均下降約為0.5 dB,尤其在背景紋理比較復(fù)雜的圖像壓縮過程中,圖像質(zhì)量的下降相對(duì)較為嚴(yán)重,達(dá)到0.6 dB,這部分質(zhì)量的下降主要集中在后景中的細(xì)節(jié),而對(duì)于圖像中的前景,視頻質(zhì)量從主觀視覺來看,相差無幾。
通過對(duì)編解碼器的算法和代碼級(jí)優(yōu)化,在保證圖像壓縮質(zhì)量的前提下,顯著提高了視頻壓縮速度,滿足了視頻處理的全實(shí)時(shí)要求。通過性能比較測試可以看出,該優(yōu)化算法在可視電話、視頻會(huì)議等視頻等系統(tǒng)中具有重要的實(shí)用價(jià)值。
目前,該優(yōu)化算法已經(jīng)應(yīng)用于某視頻監(jiān)控項(xiàng)目中,取得了良好的實(shí)際效果,對(duì)今后跨平臺(tái)(如DSP、PPC)的視頻處理以及多媒體業(yè)務(wù)方向具有積極的參考意義。
[1]章毓晉.圖像處理與分析[M].北京:清華大學(xué)出版社,2001.
[2]王仁龍.基于VxWorks和DM642視頻采集壓縮系統(tǒng)的技術(shù)研究[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(11):216-218.
[3]ITU-T Recommendation.H.264 Advanced Video Coding for Genetic Audiovisual Services[S],2005.
[4]HUANG Yu-wen,CHEN Tung-chen.Analysis Fast Algorithm and VLSI Architecture Design for H.264/AVC Intra Frame Coder[J].IEEE Transactions on Circuits and Systems for Video Technology,2005,15(3),378-401.
[5]王 篙,薛 全,張 穎,等.H.264視頻編碼新標(biāo)準(zhǔn)及性能分析[J].數(shù)字電視與數(shù)字視頻,2003,6(2):78-81.
[6]周 怡,吳 昊,方向忠.針對(duì)硬件實(shí)現(xiàn)的H.264視頻編碼算法改進(jìn)[J].電子技術(shù)應(yīng)用,2004,7(12):110-112.