文獻標識碼: A
文章編號: 0258-7998(2012)04-0120-03
可分級視頻編碼[1]SVC(Scalable Video Coding)是H.264標準的擴展,利用分層結構將時域、空域和質量可分級有機地結合在一起。針對不同的網絡環境與終端提供了一種適應性更廣的視頻序列方案。
但是由于網絡環境的復雜性與不確定性,在IP網絡以及無線網絡等易錯信道中,往往易造成碼流數據的錯誤與丟失[2]。由于SVC的特殊分層結構,傳統H.264的單層錯誤隱藏技術并不能完全適用。另外相比于之前的AVC編碼,SVC無論是在結構上還是在壓縮方式和自適應性上都有著不小的提升。因此對于SVC錯誤隱藏的相關研究一直是視頻領域的一個熱點。
1 SVC錯誤隱藏方法
目前SVC的錯誤隱藏方法[3-5]的研究主要基于參考軟件JSVM(Joint Scalable Video Model),分為同層錯誤隱藏和層間錯誤隱藏兩類。
其中同層錯誤隱藏主要有幀拷貝方法FC(Frame Copy)和B幀時間直接方法TD(Temporal Direct)。
層間錯誤隱藏主要有基本層跳過方法BLSkip(Base Layer Skip)、重建基本層和可能的上采樣方法RU(Reconstruction Base Layer and Possibly Upsampling)。
1.1 幀拷貝方法FC
在幀拷貝方法FC中,丟失幀的每一個像素的重建都是從前向參考幀列表的第一幀圖像對應位置復制而來。如果當錯誤隱藏方法支持多環解碼時,則該方法可以同時給基本層和增強層使用,否則只能給當前訪問單元AU(Access Unit)的最高層使用該方法。
1.2 B幀的時間直接方法TD
B幀的時間直接方法TD如圖1所示,如果當前幀的宏塊或者宏塊分割在解碼時被當成TD模式來進行重建,則它的運動矢量通過相鄰的參考幀進行計算。

如果當前編碼宏塊或者宏塊分割在后向參考幀上對應位置的宏塊或者宏塊分割(圖1中的參考幀1),使用與當前編碼宏塊或者宏塊分割相同的前向參考幀(圖1中的參考幀0),則參考幀0與參考幀1會被選作當前編碼宏塊或者宏塊分割的參考幀。前向和后向運動矢量mvL0和mvL1會使用POC從mvCol計算出來。在計算出前向和后向運動矢量之后,運動補償MC(Motion Compensation)將從兩個參考幀得到當前宏塊或者宏塊分割方式的隱藏值(殘差信息假設等于0)。
對于SVC中的基本層和增強層的B幀,該方法可以使用,但是不能直接用于質量增強層。
1.3 基本層跳過方法BLSkip
在該方法中,如果基本層是幀內預測宏塊,則采用基本層的重建值來對增強層進行重建;如果基本層是幀間預測宏塊,則使用基本層的運動和殘差信息作為增強層的運動和殘差信息,生成增強層重建。如果基本層幀正確接收,則該方法可以用到增強層;如果基本層幀沒有正確接收,則需要使用TD的方法恢復基本層的運動矢量,然后再使用BLSkip生成增強層幀。下面對該方法的具體過程進行討論。


3 Opensvcdecoder中錯誤隱藏的設計與實現
3.1 Opensvcdecoder介紹
Opensvcdecoder(簡稱Opensvc)[8]是一個開源的SVC解碼器軟件庫,該項目在2006年7月啟動,致力于將SVC標準進行工程實用化。根據官方的資料顯示,在解碼速度上相比JSVM自帶的解碼模塊,Opensvc有5~14倍的提升,并且可以跨平臺開發。
Opensvc自帶有顯示模塊,入口數據為264碼流序列,解碼的同時可以直接進行播放,使用簡易直接媒體層SDL(Simple Direct Media Layer)進行顯示輸出。
3.2 整合JSVM錯誤隱藏方法的Opensvc的設計
Opensvc中雖然自帶了錯誤檢測與錯誤隱藏模塊,但是由于設計得并不完善,所以實際中對于丟包的情況不能進行很好的處理。基于上一節中對JSVM中三種錯誤隱藏方法的研究和結論,設計了一種opensvc的改進型錯誤隱藏方法,依據判斷基本層是否丟失的情況來選擇合適的算法進行錯誤隱藏。
(1) 當僅丟失增強層時,使用BLSkip方法進行增強層的隱藏;
(2) 當增強層和基本層都丟失時,先使用TD的方法對基本層進行恢復,然后使用BLSkip恢復對應的增強層;
(3) 具體檢測基本層和增強層丟失的方法可以通過統計Nal類型和SliceGap等語法元素實現[4];
(4) 以步驟(1)、步驟(2)為核心思想進行從JSVM向Opensvc的移植;
(5) 開發環境為微軟的Visual Studio 2005,JSVM參考版本為9.8,Opensvc版本為src_1.11;
(6) 整合完成后通過命令行
>Opensvcdecoder.exe -h264 test.264 -layer 16
直接播放最高層數據進行測試。
3.3 具體實驗結果
由于opensvc沒有自帶PSNR的比較器,所以只能通過主觀播放效果對比進行評判。為了測試基本層與增強層都有丟包時的恢復情況,這里只選用所有模擬序列中基本層丟包5%、增強層丟包20%的最嚴重的情況來進行對比。
圖2為Bus序列的恢復結果對比,圖3為Crew序列的恢復結果對比,圖4為Football序列的恢復結果對比。

實際比較中,圖2、圖3、圖4的左圖與右圖均有不同程度的損失。左圖采用整合型EC后圖像會出現輕微的模糊現象與偶爾的搜索塊不匹配,但是不會出現像右圖那樣明顯的塊效應,說明改進型的EC模式有著較為良好的實際效果。
本文介紹了目前SVC所采用的幾種錯誤隱藏的方法,并對其中的三種進行了實驗。在實驗結論的基礎上選取了恢復效果最佳的方法,進行向Opensvcdecoder的整合。最后給出了整合后與整合前的實際效果對比截圖,證明了整合JSVM錯誤隱藏方法的Opensvc確實有更佳的錯誤隱藏效果。
參考文獻
[1] SCHWARZ H, MARPE D, WIEGAND T. Overview of the scalable video coding extension of the H.264/AVC standard[J]. IEEE Transactions on Circuits and Systems for VideoTechnology, 2007,17(9):1103-1120.
[2] CHEN Y, XIE K, ZHANG F,et al. Frame loss error concealment for SVC[C]. Journal of Zhejiang University SCIENCE,also in Proc. Packet Video Workshop' 06, 2006:677-683.
[3] BLESTEL M, RAULET M. Open SVC Decoder[DB/OL][2011-04-07].http://sourceforge.net/projects/opensvcde-coder/files/opensvcdecoder/Release%201.11/src_1.11.tar.bz2/down load.
[4] CHEN Y, BOYCE J, XIE K. Frame loss error concealment for SVC[C]. Joint Video Team(JVT),Doc.JVT-Q046, Oct.2005.
[5] 郭宜.可伸縮視頻編碼的差錯控制方法研究[D]. 安徽:中國科學技術大學,2009.
[6] 張學波.基于H.264/AVC SVC的錯誤隱藏技術研究[D]. 北京:北京師范大學,2010.
[7] GUO Y, LI H, WANG Y K. SVC/AVC loss simulator[M]. JVT-Q069. 2005.
[8] VIERON J, WIEN M, SCHWARZ H. Jsvm 11 software[DB/OL].[2007-06-29].http://wftp3.itu.int/av-arch/jvt-site/2007_06_Geneva/JVT-X203.zip
