文献标识码: 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