文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)04-0120-03
可分級(jí)視頻編碼[1]SVC(Scalable Video Coding)是H.264標(biāo)準(zhǔn)的擴(kuò)展,利用分層結(jié)構(gòu)將時(shí)域、空域和質(zhì)量可分級(jí)有機(jī)地結(jié)合在一起。針對(duì)不同的網(wǎng)絡(luò)環(huán)境與終端提供了一種適應(yīng)性更廣的視頻序列方案。
但是由于網(wǎng)絡(luò)環(huán)境的復(fù)雜性與不確定性,在IP網(wǎng)絡(luò)以及無(wú)線網(wǎng)絡(luò)等易錯(cuò)信道中,往往易造成碼流數(shù)據(jù)的錯(cuò)誤與丟失[2]。由于SVC的特殊分層結(jié)構(gòu),傳統(tǒng)H.264的單層錯(cuò)誤隱藏技術(shù)并不能完全適用。另外相比于之前的AVC編碼,SVC無(wú)論是在結(jié)構(gòu)上還是在壓縮方式和自適應(yīng)性上都有著不小的提升。因此對(duì)于SVC錯(cuò)誤隱藏的相關(guān)研究一直是視頻領(lǐng)域的一個(gè)熱點(diǎn)。
1 SVC錯(cuò)誤隱藏方法
目前SVC的錯(cuò)誤隱藏方法[3-5]的研究主要基于參考軟件JSVM(Joint Scalable Video Model),分為同層錯(cuò)誤隱藏和層間錯(cuò)誤隱藏兩類(lèi)。
其中同層錯(cuò)誤隱藏主要有幀拷貝方法FC(Frame Copy)和B幀時(shí)間直接方法TD(Temporal Direct)。
層間錯(cuò)誤隱藏主要有基本層跳過(guò)方法BLSkip(Base Layer Skip)、重建基本層和可能的上采樣方法RU(Reconstruction Base Layer and Possibly Upsampling)。
1.1 幀拷貝方法FC
在幀拷貝方法FC中,丟失幀的每一個(gè)像素的重建都是從前向參考幀列表的第一幀圖像對(duì)應(yīng)位置復(fù)制而來(lái)。如果當(dāng)錯(cuò)誤隱藏方法支持多環(huán)解碼時(shí),則該方法可以同時(shí)給基本層和增強(qiáng)層使用,否則只能給當(dāng)前訪問(wèn)單元AU(Access Unit)的最高層使用該方法。
1.2 B幀的時(shí)間直接方法TD
B幀的時(shí)間直接方法TD如圖1所示,如果當(dāng)前幀的宏塊或者宏塊分割在解碼時(shí)被當(dāng)成TD模式來(lái)進(jìn)行重建,則它的運(yùn)動(dòng)矢量通過(guò)相鄰的參考幀進(jìn)行計(jì)算。
如果當(dāng)前編碼宏塊或者宏塊分割在后向參考幀上對(duì)應(yīng)位置的宏塊或者宏塊分割(圖1中的參考幀1),使用與當(dāng)前編碼宏塊或者宏塊分割相同的前向參考幀(圖1中的參考幀0),則參考幀0與參考幀1會(huì)被選作當(dāng)前編碼宏塊或者宏塊分割的參考幀。前向和后向運(yùn)動(dòng)矢量mvL0和mvL1會(huì)使用POC從mvCol計(jì)算出來(lái)。在計(jì)算出前向和后向運(yùn)動(dòng)矢量之后,運(yùn)動(dòng)補(bǔ)償MC(Motion Compensation)將從兩個(gè)參考幀得到當(dāng)前宏塊或者宏塊分割方式的隱藏值(殘差信息假設(shè)等于0)。
對(duì)于SVC中的基本層和增強(qiáng)層的B幀,該方法可以使用,但是不能直接用于質(zhì)量增強(qiáng)層。
1.3 基本層跳過(guò)方法BLSkip
在該方法中,如果基本層是幀內(nèi)預(yù)測(cè)宏塊,則采用基本層的重建值來(lái)對(duì)增強(qiáng)層進(jìn)行重建;如果基本層是幀間預(yù)測(cè)宏塊,則使用基本層的運(yùn)動(dòng)和殘差信息作為增強(qiáng)層的運(yùn)動(dòng)和殘差信息,生成增強(qiáng)層重建。如果基本層幀正確接收,則該方法可以用到增強(qiáng)層;如果基本層幀沒(méi)有正確接收,則需要使用TD的方法恢復(fù)基本層的運(yùn)動(dòng)矢量,然后再使用BLSkip生成增強(qiáng)層幀。下面對(duì)該方法的具體過(guò)程進(jìn)行討論。
3 Opensvcdecoder中錯(cuò)誤隱藏的設(shè)計(jì)與實(shí)現(xiàn)
3.1 Opensvcdecoder介紹
Opensvcdecoder(簡(jiǎn)稱(chēng)Opensvc)[8]是一個(gè)開(kāi)源的SVC解碼器軟件庫(kù),該項(xiàng)目在2006年7月啟動(dòng),致力于將SVC標(biāo)準(zhǔn)進(jìn)行工程實(shí)用化。根據(jù)官方的資料顯示,在解碼速度上相比JSVM自帶的解碼模塊,Opensvc有5~14倍的提升,并且可以跨平臺(tái)開(kāi)發(fā)。
Opensvc自帶有顯示模塊,入口數(shù)據(jù)為264碼流序列,解碼的同時(shí)可以直接進(jìn)行播放,使用簡(jiǎn)易直接媒體層SDL(Simple Direct Media Layer)進(jìn)行顯示輸出。
3.2 整合JSVM錯(cuò)誤隱藏方法的Opensvc的設(shè)計(jì)
Opensvc中雖然自帶了錯(cuò)誤檢測(cè)與錯(cuò)誤隱藏模塊,但是由于設(shè)計(jì)得并不完善,所以實(shí)際中對(duì)于丟包的情況不能進(jìn)行很好的處理?;谏弦还?jié)中對(duì)JSVM中三種錯(cuò)誤隱藏方法的研究和結(jié)論,設(shè)計(jì)了一種opensvc的改進(jìn)型錯(cuò)誤隱藏方法,依據(jù)判斷基本層是否丟失的情況來(lái)選擇合適的算法進(jìn)行錯(cuò)誤隱藏。
(1) 當(dāng)僅丟失增強(qiáng)層時(shí),使用BLSkip方法進(jìn)行增強(qiáng)層的隱藏;
(2) 當(dāng)增強(qiáng)層和基本層都丟失時(shí),先使用TD的方法對(duì)基本層進(jìn)行恢復(fù),然后使用BLSkip恢復(fù)對(duì)應(yīng)的增強(qiáng)層;
(3) 具體檢測(cè)基本層和增強(qiáng)層丟失的方法可以通過(guò)統(tǒng)計(jì)Nal類(lèi)型和SliceGap等語(yǔ)法元素實(shí)現(xiàn)[4];
(4) 以步驟(1)、步驟(2)為核心思想進(jìn)行從JSVM向Opensvc的移植;
(5) 開(kāi)發(fā)環(huán)境為微軟的Visual Studio 2005,JSVM參考版本為9.8,Opensvc版本為src_1.11;
(6) 整合完成后通過(guò)命令行
>Opensvcdecoder.exe -h264 test.264 -layer 16
直接播放最高層數(shù)據(jù)進(jìn)行測(cè)試。
3.3 具體實(shí)驗(yàn)結(jié)果
由于opensvc沒(méi)有自帶PSNR的比較器,所以只能通過(guò)主觀播放效果對(duì)比進(jìn)行評(píng)判。為了測(cè)試基本層與增強(qiáng)層都有丟包時(shí)的恢復(fù)情況,這里只選用所有模擬序列中基本層丟包5%、增強(qiáng)層丟包20%的最嚴(yán)重的情況來(lái)進(jìn)行對(duì)比。
圖2為Bus序列的恢復(fù)結(jié)果對(duì)比,圖3為Crew序列的恢復(fù)結(jié)果對(duì)比,圖4為Football序列的恢復(fù)結(jié)果對(duì)比。
實(shí)際比較中,圖2、圖3、圖4的左圖與右圖均有不同程度的損失。左圖采用整合型EC后圖像會(huì)出現(xiàn)輕微的模糊現(xiàn)象與偶爾的搜索塊不匹配,但是不會(huì)出現(xiàn)像右圖那樣明顯的塊效應(yīng),說(shuō)明改進(jìn)型的EC模式有著較為良好的實(shí)際效果。
本文介紹了目前SVC所采用的幾種錯(cuò)誤隱藏的方法,并對(duì)其中的三種進(jìn)行了實(shí)驗(yàn)。在實(shí)驗(yàn)結(jié)論的基礎(chǔ)上選取了恢復(fù)效果最佳的方法,進(jìn)行向Opensvcdecoder的整合。最后給出了整合后與整合前的實(shí)際效果對(duì)比截圖,證明了整合JSVM錯(cuò)誤隱藏方法的Opensvc確實(shí)有更佳的錯(cuò)誤隱藏效果。
參考文獻(xiàn)
[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] 郭宜.可伸縮視頻編碼的差錯(cuò)控制方法研究[D]. 安徽:中國(guó)科學(xué)技術(shù)大學(xué),2009.
[6] 張學(xué)波.基于H.264/AVC SVC的錯(cuò)誤隱藏技術(shù)研究[D]. 北京:北京師范大學(xué),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