鄭慶紅
(河北遠東哈里斯通信有限公司,河北石家莊050200)
H.264作為新一代的視頻編解碼標準,與以前的標準(如MPEG-4、H.263等)相比,采用了很多先進的編碼技術,如幀內預測、多模式運動估計和整數變換及量化等,使得H.264編碼器的壓縮效率、圖像的主觀質量和帶寬需求方面都有了顯著提高,成為數字視頻領域中首選的壓縮標準。
隨著對H.264標準的研究不斷深入,高級視頻壓縮技術(AVC)也帶動了相關領域的發展,例如高清視頻會議、流媒體圖像分析和數字水印等[1]。
在軟交換多媒體調度系統中,視頻傳輸系統主要完成媒體流的交換控制和視頻編解碼,實現實時、高分辨率的視頻編解碼是其主要技術難點。
視頻傳輸系統可以劃分為發送端和接收端2個部分。發送端完成視頻源的采集、編碼和碼流發送;接收端完成碼流接收、解碼和視頻顯示。系統框圖如圖1所示。

圖1 H.264視頻傳輸流程
前端視頻模塊支持數字視頻源文件中保存的YUV碼流和攝像頭采集的實時圖像。
對于實時視頻的采集部分,通過Windows支持的VFW(Video For Windows)接口對攝像頭輸入的視頻進行實時捕獲[2],并將其中的視頻原始數據提取出來,通過圖像從RGB到YCbCr色彩空間的轉換矩陣,進行亮色分離后得到直接可以輸入到H.264編碼器的YUV原始視頻流。
H.264編碼模塊作為發送端的核心,主要是根據H.264壓縮協議將輸入的視頻信息進行實時壓縮,編碼模塊借鑒了開源x264編碼器,并在其基礎上做了大量的優化工作以滿足較高分辨率下視頻處理的實時性和流暢性。編碼模塊由于其算法復雜度較高,是整個視頻傳輸平臺的關鍵技術難點。
RTP發送部分負責將編碼器輸出的H.264碼流封裝為RTP包,以UDP為承載,將其在網絡上進行傳輸,RTP接收部分負責從偵聽端口上接收UDP流,并解包提取其中的有效載荷,同時,RTP協議棧還提供RTP包間的同步和排序等功能。
接收端的核心為H.264視頻解碼模塊,該模塊參考FFmpeg進行設計,RTP模塊將接收到的網絡UDP流按照對應的網絡協議進行解包,提取出相應的媒體信息,供視頻解碼器的輸入端解碼。由于H.264解碼算法的復雜度相對較低,經實際測試表明,視頻解碼能力比較容易滿足系統的實時性要求。
由于在大畫面下采用普通的圖形界面GUI方式將像素點逐一繪制到屏幕上的方法,將嚴重影響程序的執行效率,因此,顯示模塊采用Windows下的DirectX工具顯示視頻圖像。
為了滿足視頻處理中的全實時要求,編碼器的編碼速度必須要達到25 fps左右,這樣才能較為流暢地顯示實時圖像,特別是在高分辨率(如640×480、704×576)的情況下,編碼算法的運算量大大增加。對編碼器的性能提出了更高的要求。
由于編碼器采用了Intel推出的SSE2多媒體指令集,因此,指令級的優化已經達到了一定的瓶頸,將工作重點放在算法級和代碼級優化上[3,4],根據H.264算法中對視頻壓縮質量影響不大的高級特性[5,6],進行了算法的刪減和優化。
算法級優化主要包括
①在編碼幀的類型選擇上,去除了B幀部分,因為編碼B幀需要較大的輸入緩存,并且預測算法的復雜度較高;
②在RTP協議棧的傳輸控制下,在編碼之前不通過相關運算來重新排序輸入的視頻幀;
③在圖像的后期處理上,為了簡化計算量,去除率失真優化(RDO),因為其對穩定信道下傳輸的圖像質量校正作用較小;
④在碼率控制方面,采用一級編碼方式來代替專門針對降低碼率提出的二次編碼方式;
⑤在運動估計方面,運動搜索矢量只選擇比較常見的鉆石形和六邊形,關閉非對稱交叉多六邊形網格(UMH)和窮盡搜索(ESA)等低效方式,同時用于輔助運動估計方式的多視角視頻編碼(MVC)也從算法框架中去除;
⑥在圖像輸入量化方面,禁止使用用戶自定義量化矩陣,犧牲靈活性的前提下,減少循環跳轉和矩陣求逆運算的復雜度。
代碼級優化主要包括:
①在計算DCT系數抽取分數中,用查表來代替循環計算非零DCT系數間距;
②用靜態大矩陣代替從數組每次計算生成的量化/反量化矩陣,降低每次迭代運算的開銷;
③將固定量化系數(QP)的流程分支從碼率控制函數中提取出來,使得在VBR模式下不必額外加載碼率控制函數;
④將整數變換的函數指針直接用其指向的函數代替,減少多重尋址。
編碼器輸出的H.264碼流將根據 RTP(Realtime Transport Protocol)協議封裝為RTP包,然后經過網絡傳輸到遠端。網絡傳輸是基于IP協議,所以最大傳輸單元(MTU)最大為1 500 byte,這其中包括至少20 byte的 IP頭,8 byte的 UDP頭,以及12 byte的RTP頭。這樣,頭信息至少要占用40 byte,那么RTP有效載荷的最大尺寸為1 460 byte,為了防止RTP包在IP層被切割,因此,需要控制輸出的H.264碼流中圖像片的大小。
根據RFC3984標準的建議,圖像片輸出大小的控制邏輯可以放在視頻編碼層VCL(Video Coding Layer)實現,也可以在網絡抽象層NAL(NetworkAbstractLayer)實現。
為了提高編碼器輸出碼流的兼容性,采用通過VCL來控制H.264碼流中圖像片的大小,控制流程如圖2所示。

圖2 VCL控制圖像片大小的流程
對于RTP/UDP/IP系統,可以直接將編碼器輸出的NAL單元作為RTP的有效載荷,同時作為RFC3984所支持的基礎封包格式,在與第三方視頻設備進行互聯時,具有良好的兼容性(已經與GrandStream公司的視頻設備實現互通)。
測試采用H.264標準測試模型(JM),標準模型選用不同分辨率、不同紋理、不同運動程度和附帶場景切換的測試序列,能夠反映常見的視頻場景,從而可以較為全面地衡量系統的編碼性能。測試序列的特征如表1所示。

表1 測試序列的特征表
H.264編碼器在不同測試序列下的測試結果表2如示。

表2 不同測試序列對資源的占用關系表
在循環測試系統編碼能力的過程中,由于受測試條件的限制,CPU占用率已達極限,占據了雙核中的一個核的全部處理能力。由表2可以看出,H.264編碼器對于內存占用,跟圖像分辨率有直接關系,圖像分辨率越高內存占用量越大。
編碼速度和傳輸帶寬的需求則是衡量系統編碼器的重要指標,表2數據顯示,優化后的算法對視頻序列的運動特征比較敏感,編碼復雜運動序列所需的時間明顯高于簡單運動序列,平均幀率可以滿足實時性的要求,同時,隨著原始視頻序列的運動場景復雜度的增加,碼率會有明顯上升。
為了衡量H.264編碼器在壓縮過程中對圖像質量的影響,與H.264標準化測試模型輸出的圖像文件進行峰值信噪比(PSNR)比較,限于篇幅,這里只列舉部分測試序列的PSNR對比圖。H.264編碼器與測試模型輸出的圖像平均PSNR對比結果如表3所示。

表3 優化算法與測試模型PSNR對比表
由于測試模型側重于算法的驗證,編碼效率較低,不做任何優化基本不具備實用價值,但是它能較為真實地反映H.264算法對圖像壓縮過程中的熵損失,以此為標準,可以衡量編碼過程中對圖像質量的影響。
由表3可以看出,經過算法優化后,編碼器在提高編碼速度和效率的同時,會造成圖像壓縮質量在一定程度上的下降。
在分辨率為4CIF(704×576)的不同視頻場景下,與標準測試模型相比較,PSNR平均下降約為0.5 dB,尤其在背景紋理比較復雜的圖像壓縮過程中,圖像質量的下降相對較為嚴重,達到0.6 dB,這部分質量的下降主要集中在后景中的細節,而對于圖像中的前景,視頻質量從主觀視覺來看,相差無幾。
通過對編解碼器的算法和代碼級優化,在保證圖像壓縮質量的前提下,顯著提高了視頻壓縮速度,滿足了視頻處理的全實時要求。通過性能比較測試可以看出,該優化算法在可視電話、視頻會議等視頻等系統中具有重要的實用價值。
目前,該優化算法已經應用于某視頻監控項目中,取得了良好的實際效果,對今后跨平臺(如DSP、PPC)的視頻處理以及多媒體業務方向具有積極的參考意義。
[1]章毓晉.圖像處理與分析[M].北京:清華大學出版社,2001.
[2]王仁龍.基于VxWorks和DM642視頻采集壓縮系統的技術研究[J].計算機工程與應用,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視頻編碼新標準及性能分析[J].數字電視與數字視頻,2003,6(2):78-81.
[6]周 怡,吳 昊,方向忠.針對硬件實現的H.264視頻編碼算法改進[J].電子技術應用,2004,7(12):110-112.