SVC入门知识和JSVM基础实验

分类: 视频安全 |
文章转载自:罗索实验室 [http://www.rosoo.net/a/201001/8436.html]
对SVC的学习已近开展了一段时间,一直没有进行系统记录,而且探索SVC解码的开源项目也需要有更多的知识积累。所以,从现在开始陆续开展有记录的SVC探索,这次行动不再以周为学习单位,而要求更为灵活高效的安排擦略,基本要考察JSVM和SVC各重要方向的实验和论文,为SVC解码开源项目的后续发展做准备。 1. SVC基础知识
关于SVC的基本意义,可以参看【1】【2】【3】中的论述。SVC(scalable video coding)的可分级视频编码概念,简而言之,就是把视频序列分成不同的部分并赋予不同的等级,这样的思想已经渊源流传,并非H.264/SVC所独创。2007年由ITU推出的H.264/SVC标准,继承了H.264的高效压缩性,随着网络应用的普及,SVC的灵活码流适应性和对不同终端产品的匹配性,显得尤为重要。
SVC对分级的策略是从时间,空间和质量上,对视频序列进行分级编码(如下图)
下面,将详细描述一下SVC怎么在这些方向进行分级的:
(1)时间分级(Temporal
Scalability)
时间分级就是给序列的视频帧分配不同的重要等级,以便于在实际应用中按重要程度显示帧(或在恶劣网络条件下主动放弃低等级的帧)。其实现方式是采用如下图所示的hierarchical B结构。可以按照具体应用来设计分等级的B帧结构,然后组织起一个个GOP,再架构成整个编码序列。由于H.264/AVC中允许进行参考帧管理,使得时间分级可以直接利用这一特性得以实现。 (2)空间分级(Spatial
Scalability)
空间分级的用于形成不同的图像(帧)分辨率,在实际应用中可以给不同显示屏幕的终端设备提供适配的画面,以达到提高带宽使用率的目的。具体的变现如上面的图,是在不同的分辨率序列层中进行预测,利用去相关性节省码流。在SVC中,除了提供传统的层间intra预测(Inter-layer
intra prediction),还提供层间宏块模式与运动预测(Inter-layer macroblock mode and
motion prediction)和层间残差预测(Inter-layer residual
prediction),这三种模式可以充分利用图像的时间和空间相关性进行分级编码,
在【1】中提到一个SVC设计的重要特性,每个空间增强层可以在单一的运动补偿环中解码。在对一个目标帧的解码中,其空间参考帧需要重建自己层间预测相关的intra-coded宏块和残差块,并对自己的运动矢量进行解码,运动补偿和对帧间预测的去方块滤波仅在目标帧中进行。
(3)质量分级(Quality
Scalability)质量分级往往可以被认为是一种特殊(解析度相同)的空间分级编码,因此传统的coarse-grain quality scalable coding (CGS,粗粒度质量分级编码)很容易被想到,而在实际应用中,还发展了medium-grain quality scalability (MGS,中等粒度质量分级编码),下面将分别描述他们: i. CGS CGS有类似空间分级中层间预测,但是无需有上采样的过程,为了更好的视频质量需要呈现更多的图像纹理,因此,在质量分层的层间预测中,对纹理的提纯通常通过采用更小量化步长的重新量化。为了减少计算复杂性,用于层间intra预测的参考帧deblocking被忽略,而且层间intra预测和层间残差预测将在DCT系数阶段被直接处理。 ii. MGS
由于CGS对码率控制不能灵活处理,一种叫MGS的衍生方式被提出采用,MGS可以灵活的权衡漂移(draft,运动补偿预测循环中的编解码不同步)和层次预测的编码效率。下面的图,蓝色的表示用于基础质量序列,红色表示较好质量的序列,可以根据策略灵活组合他们之间的参考关系。
其中上图(c)(d)就是MGS的灵活方式。以(d)来说,就是对有黑色标注的Key
picture,用基础质量图像做参考,而对非Key picture使用较好质量的图像做参考,一旦增强层丢包,则可能造成drift,drift被控制在两个Key
picture之间。
对于质量分级,SVC还支持两个特性,Partitioning
of transform coefficients和SVC-to-AVC
rewriting,前者提供用slice来分散增强层变换系数的方法,以便于同一增强层数据被分散到几个包中,后者提供了SVC-》AVC的转码便利。
至此,SVC的基础入门概念就描述完了,下面将要开始看看怎么使用JSVM来做分层编解码实验。
2.
JSVM基础实验
(1)编码实验
******************************************************************
# Scalable H.264/AVC Extension Configuration File
OutputFile
FrameRate FramesToBeEncoded GOPSize BaseLayerMode SearchMode SearchRange #=================== LAYER
DEFINITION ==================
NumLayers LayerCfg LayerCfg
******************************************************************
文件
******************************************************************
# Layer Configuration File
#================= INPUT / OUTPUT ==================== SourceWidth SourceHeight FrameRateIn FrameRateOut InputFile ReconFile SymbolMode
******************************************************************
文件
******************************************************************
# Layer Configuration
File
#============================== INPUT / OUTPUT
===============
SourceWidth SourceHeight FrameRateIn FrameRateOut InputFile ReconFile SymbolMode
InterLayerPred
UseESS
ESSCropWidth ESSCropHeight ESSOriginX ESSOriginY ESSChromaPhaseX 0 ESSChromaPhaseY 0 ESSBaseChromaPhaseX 0 ESSBaseChromaPhaseY 0
******************************************************************
本实验将编码双层的SVC文件,分别包含352x288和176x144两个分辨率,需要注意的是这里需要输入的是两个分辨率对应的YUV文件,在开发实际应用中,将是对输入的高分辨率视频按需求进行下采样得到相应低分辨率的输入码流。理解上面的配置文件可以阅读JSVM的“SoftwareManual.doc”。
以下是实验结果
*****************************初始实验结果********************
JSVM 9.15 Encoder
profile & level
info:
===================== DQ= DQ= 16: AU AU AU AU AU AU AU |