



H.264/SVC编码后视频质量域的可伸缩性由MGS来体现,通常为了提供较好粒度的量化系数,将视频帧图像中宏块的变换系数以Zig-Zag形式进行扫描,从直流分量开始,直到最高阶高频分量。将不同数量的变换系数存放在不同的MGS NAL单元中,从而构成不同质量层的NAL数据。在JSVM(Joint Scalable Video Model)平台中,通过设置配置文件中 MGSVectorX 矢量的值,来指定不同质量层获得的变换系数, MGSVectorX 的形式如下:
式中,MGSVector0的值为第1层质量层中变换系数的个数;MGSVector1为第2层质量层中变换系数的个数,依此类推。对于4×4的图像块, MGSVectorX 中所有元素之和等于16。
H.264/SVC视频流在不同网络带宽环境下提取不同失真大小的子流,以合适的码率适应网络带宽约束下信道的传输。H.264/SVC的可伸缩性可以在给定网络带宽 B 的条件下,通过丢弃一些质量层的MGS NAL单元数据来实现。
JSVM采用如下规则来处理:若某层的码率刚好等于 B ,则提取该层子流作为输出;若某层的码率比 B 小,但接近于 B ,且该层为最高层,则提取该层子流作为输出;若比该层更高的一层为MGS层且该层的码率大于 B ,则通过截断更高一层中的部分NAL单元数据,使剩余的码率接近于 B ,作为提取的子流输出。因此,可以看出,通过设置合适的MGS质量层大小,可以提高H.264/SVC的可伸缩性。
在JSVM平台H.264/SVC编码后的流中,对于每一个认证单元的质量层MGS数据包,通常生成的NAL单元较大,在进行RTP打包时无法将其封装在一个RTP数据包中,需要对每个空域层的MGS质量层的NAL单元进行分段处理。若将编码后的流中单个NAL单元分段成较小块的数据进行传输,则视频流应对不同网络带宽情况的灵活性增强,这是因为其可以提供更多不同比特率的子流。但随着分段后数据块的增加,若对每个数据块进行哈希认证,必将增加认证负载,从而浪费一定的网络带宽资源。因此,选择合适的分段数据块大小,可以在视频流的灵活性与认证负载之间实现有效的权衡。
在围绕认证负载方面的研究中,具有代表性的有信息率认证优化方法 [22] (该方法针对H.264/AVC视频格式,采用视频发送端重传机制来实现认证负载优化,但无法实现可伸缩视频认证且重传机制不利于视频实时传输应用)、网络资源调度与视频认证结合的认证方法 [23] (该方法针对AVC视频格式,综合考虑了网络带宽资源约束、视频延迟限制等条件,寻找具有不同安全级别的最优视频认证图)、针对H.264/SVC视频格式的认证负载优化方法 [24] (该方法的优点在于考虑了网络带宽分布对认证分组的影响,缺点在于没有考虑单个分组大小的上下界,控制不好网络丢包情况的影响,且没有分析不同层次质量层数据对图像恢复质量的影响,分组认证的有效性有待提高)。
通过对H.264/SVC质量层数据结构的分析可以得知,不同的质量层数据在接收端解码时,对图像恢复质量具有不同的影响,如较低层的MGS数据相对于较高层的MGS数据,对图像质量精细化程度的影响较强,因为其存放的变换系数是帧数据中能量较大的信息。因此,可以在网络丢包情况的影响下,采用更多的分组或比特信息来保证较低层MGS数据的安全。在构建目标优化函数时,对于具有不同影响的MGS数据,将其认证长度作为一个目标优化项,以提高分组认证的有效性。优化认证方法的同时应考虑网络带宽分布情况对分组认证的影响,以提高视频应对不同带宽子信道认证传输的有效性。
对每一个认证单元帧单独进行认证负载的优化,令认证单元帧中MGS数据共有 N 字节,即{ d 1 , d 2 ,…, d i ,…, d N },采用最小化认证负载方法将该质量层比特数据划分为 I 个大小不等的分组,即{ x 1 ,…, x i ,…, x I },分别进行哈希认证。因此,该帧引入的认证负载大小为 I × S 比特,其中 S 为单个分组认证所需要的哈希值大小。考虑到H.264/SVC在处理不同带宽信道情况下传输的灵活性,通常将丢弃一些高层MGS数据包以适应所需要传输信道的带宽,因此所设计的认证优化方法应该使得在对MGS数据进行认证时,不会降低H.264/SVC可伸缩编码的灵活性,即对于某些信道的认证后的编码子流,接收端所获取的MGS数据应该能够全部进行有效认证,不会因为在分组认证后丢弃了某些数据包而造成无法对所获取的数据实现认证。
令传输认证单元帧所需要的时间为 t ( f ), t ( f )的取值与视频编码的帧速率有关。传输MGS数据中的1字节所需要的网络带宽消耗为 b ,相应的关系为
式中,size(1)表示1字节MGS数据的大小。当认证单元帧传输了 i 字节MGS数据时,所需要的网络带宽消耗为 b i ,相应的关系为
对于每个MGS数据,采用 S 字节进行哈希认证,则认证所需要的网络带宽消耗为 s ,则
式中,size( S )表示 S 字节MGS数据的大小。当对质量层分组数据 x i 进行认证时,所引入的代价主要有两个方面:认证信息所需要的网络带宽消耗和分组认证对流可伸缩性的降低。后者主要体现在当对流按照网络带宽限制进行子流提取时,丢弃的一些质量层数据包可能导致接收端获取的MGS数据无法实现认证,因为该部分被丢弃的数据包和接收的无法认证的数据包进行了分组统一认证。考虑信道带宽分布,如某接收端的信道带宽范围为[ b i , b j ],若分组认证后认证单元帧所需带宽为 b i -1 ,则该接收端的带宽浪费为 b i , b i +1 ,…, b j 。因此,最优认证负载方法将综合考虑各个接收端的带宽情况,寻求最佳的分组认证策略。该分组认证策略的代价函数为
式中,
p
(
x
)为网络带宽分布概率密度函数;
为第
i
个分组的字节数;
N
为认证单元数据字节长度;
l
为分组内数据序号;
B
i
-1
为前
i
−1个质量层分组所需要的网络带宽,即
代价函数中等号右侧的第三项表示对不同重要性MGS数据分组长度的限制,即若该分组位于较低层的MGS数据部分,则相应的分组长度较小;反之,若该分组位于较高层的MGS数据部分,则相应的分组长度较大。考虑到约束项的计算方便及实际认证效果,采用线性衰减函数对其进行控制。
通过寻找合适的分组数目
I
及每组大小集合
来获取代价函数的极小值,则基于质量层的认证负载优化问题为
式(2-7)的直观解释是当对质量层MGS数据采用分组认证后,所获得的可提取子流的速率应尽量位于较高概率的网络带宽分布区间内,以减少分组过程中造成的网络带宽消耗,提高可伸缩流的灵活性。
该问题的两个待优化参数为分组数目、分组大小集合。其中,分组数目 I 与信道剩余带宽有关。若信道允许的最大带宽小于认证单元帧全部质量层MGS数据传输需要的网络带宽( b AU ),则此时无法直接对流进行认证,需要先丢弃一些较高层的MGS数据后再进行认证。令流认证单元中被丢弃的较高层MGS数据大小为 D ,则该部分所带来的代价为
被丢弃的较高层MGS数据不需要添加认证信息,因此代价函数为
对于每个质量层分组单元大小,考虑到对质量域NAL数据进行RTP打包的方便,通常避免对NAL数据进行分割,即分组单元大小应该为可用NAL数据包大小 U 的整数倍,将分组认证的单元数据用NAL数据包进行封装,令分组单元大小与 U 之比为 r ,即
则 r 的取值范围为{1,2,…, p }, p 为正整数且取值不应过大。若 p 取值过大,则在存在网络丢包的情况下,分组单元中某个NAL数据包丢失会造成较低的有效认证比例,因为该分组中其他NAL数据包将无法实现认证。因此选择合适大小的 p 可以提高认证的有效性。
根据选定的参数 p 可以确定分组数目的下界 I τ ,即
分组数目的上界 I υ 为
式中,运算符
表示向下取整,此时认证负载优化问题为
该认证负载优化问题根据不同子信道上带宽分布情况,来获取具有最小认证负载的认证方法,若实际网络环境中带宽的最大值为 B ,小于认证单元帧所有质量层MGS数据传输需要的网络带宽 b AU ,则将超出最大信道容量的流直接丢弃,因此可以确定 D 的取值为
式中, s × I 是认证负载信息所带来的网络带宽消耗,此时被丢弃的流所带来的代价为零。对于式(2-13)的约束条件1,考虑到分组计算过程的方便,对将要采取分组的数据进行末尾补零操作,使得 N − D 为 U 的整数倍,而分组后最后一个分组数据中的补充数据并不参与认证和传输。
对于式(2-13)中的优化参数的求解,一种有效的方法是先确定分组数目,再确定每个分组所应包含的最优数量的MGS数据。当分组数目
I
确定时,如何确定每组内数据的大小实质上是一个组合问题。若采用穷举法求解,则将消耗大量的计算时间,使得接收端的延迟时间过长。因为对于给定大小的MGS数据,进行给定大小分组数目的分组,类似于将一个整数
n
划分为
k
个部分且各部分之和等于该整数,所有可能的组合数为
,而每个序列计算式(2-13)时,相互之间独立,因此需要大量的计算时间。
采用式(2-13)计算MGS数据 I 个分组的代价时,其中前 I 个分组的代价cost( I )与前 I −1个分组的代价cost( I −1)有以下关系:
式中, N ′= N-D ,即前 I 个分组的代价等于前 I −1个分组的代价加上第 I −1个分组的代价。
采用动态优化方式实现 I 个分组大小的求解,定义代价矩阵 C ,其元素cost( I , X )表示在对质量层数据长度为 X 的MGS数据进行 I 个分组认证时的代价;为方便求解每个分组内所包含的MGS数据大小,定义分组代价矩阵 f ,其元素 f ( I , P × U )表示第 I 个分组采用 P 个 U 大小的数据单元联合认证时的代价。
求解过程中,首先分组数从 I 开始,此时待认证数据的长度为 N ′,需要求解cost( I , N ′)。求解cost( I , N ′)需要计算代价矩阵中的元素cost( I -1, N ′-1 ×U )、cost( I -1, N ′-2 ×U )、…、cost( I -1, N ′- p×U ),并且此时将依次计算分组代价矩阵中 f ( I ,1 ×U )、 f ( I ,2 ×U )、…、 f ( I , p×U )。计算cost( I -1, N ′-1 ×U )则需要计算代价矩阵中的元素cost( I -2, N ′-2 ×U )、cost( I -2, N ′-3 ×U )、…、cost( I -2, N ′-( p+ 1) ×U ),计算cost( I -1, N ′-2 ×U )则需要分别计算代价矩阵中的元素cost( I -2, N ′-3 ×U )、cost( I -2, N ′-4 ×U )、…、cost( I -2, N ′-( p+ 2) ×U ),依此类推。若在递归过程中,当循环次数为 I 时,代价矩阵元素cost( i , X )中 i 的取值刚好为1,则表明该次递归有效;否则表明该次递归无效,因为所产生的分组序列无法满足分组大小要求。
若代价矩阵中某些元素值已经被填写,则后续不必再对此元素值进行计算,如计算cost( I -1, N ′-1 ×U )和cost( I -1, N ′-2 ×U )都要用到cost( I -2, N ′-3 ×U )、…、cost( I -2, N ′- p×U )等。对于取不同分组大小的迭代( I τ ≤ I ≤ I υ ),较大分组迭代过程中将用到较小分组迭代过程中已经计算过的代价矩阵中的某些元素值,因此可以大大降低计算时间复杂度。
当对给定大小为
N
′的MGS数据按照
i
个分组进行分组时,最优分组代价函数cost(
i
,
x
)的伪代码如图2-14所示。其中,定义数组
X
(
i
)用于存放第
i
个分组中MGS数据的大小,且输入函数的实际参数
x
为
。当分组数
i
或分组数据
x
小于0时,或当分组数
i
大于分组数据
x
时,当前迭代过程无效,无法实现有效分组,函数通过返回一个最大数MaxValue来使得该次迭代过程无效。
图2-14 最优分组代价函数cost( i , x )的伪代码
通过对认证负载优化算法的分析可以看出,该算法能够找出使得认证负载最小的分组策略,这是因为在对分组数目范围进行界定时,位于 [I τ , I υ ] 中的所有可能的分组数目中至少有一个分组数目使分组方案合法。而对于每个分组方案,通过算法递归优化,依次将求解分组大小{ X ( i ),…, X (1)},最后比较所有分组数目情况下各自的最小代价,将所有最小代价中最小值对应的分组策略作为最终的分组策略;若所有最小代价中的最小值不止一个,则选择较大分组数目对应的分组策略。
在该认证模型的优化求解过程中,算法的存储空间主要包含代价矩阵
C
和分组代价矩阵
f
,其中前者需要
的存储空间,后者最大需要
Ο
(
I
υ
×p
)的存储空间,故算法的空间复杂度为
。算法所需要的时间包括对所允许的分组数目求解对应的最小代价和分组代价所需的时间,共循环(
I
υ
-I
τ
+
1)次,而计算cost(
i
,
x
)最多需要计算代价矩阵中全部有效元素的值。令算法对每个认证单元优化过程中所需要进行代价比较的次数为
T
,则
根据最大分组数
与
I
υ
之间的关系可知,算法的时间复杂度为
,其中
前面的系数为
。