面向H.264/AVC的低时延码率控制算法
2013-04-03张宝薇张春泽
张宝薇,王 婷,张春泽,王 猛
(中国空间技术研究院503所,北京100086)
码率控制是视频编码技术一个重要研究内容,其主要功能是匹配信源视频编码速率与信道传输速率,在给定的信道传输速率下得到更好的图像质量以及尽量降低发送端与接收端的时延。目前大多数的码率控制算法主要侧重于改善图像质量、提高峰值信噪比,而对算法在时延方面的影响考虑得较少。很多已存在算法如JVT-H017算法是达到多帧平均意义上的稳定码速率控制,因此,连续各帧之间的码率大小波动可能很大,发送缓存区容量不得不较大,以储存好几帧数据,导致缓存时延在几百毫秒以上[1-3],这就降低了视频实时通信的时效性。所以,为提高通信的实时性,研究低时延码率控制方法很有必要。
H.264/AVC是ITU-T/ISO共同研究发布的高度压缩数字视频编解码器标准。通过该标准,在同等图像质量下的压缩效率比以前的标准提高了2倍以上,因此,H.264被普遍认为是最有影响力的行业标准。笔者基于H.264/AVC标准提出了一种低时延的码率控制算法,该算法综合了基于图像复杂度分析的前向码率控制技术和基于缓冲区容量反馈的后向码率控制技术,在H.264/ AVC分层编码过程中进行分层的精细化码率控制(宏块层、帧层和图像组层),使码率波动最小化,减少跳帧次数,同时较好地保持了图像质量。
1 算法原理
缓冲区控制、获得输出码率的措施、码率与输出图像质量是码率控制算法设计过程中通常需要考虑到的因素。其中缓冲区控制对其引起的缓冲时延的大小起着至关重要的作用。这是由于缓冲区越大,承受的码率波动也就越大,但同时带来的缓冲时延也越大,即缓冲区的容量与其引起的缓冲时延大小成正比,也就是发送缓冲区内码字多少变化越大时延就越大。所以为降低时延,我们期望缓冲区内的码字能够变化平稳。而在恒定通信速率场合,发送缓冲区内码字多少的变化可使用每帧图像编码比特数的变化衡量。因此我们亦期望每帧图像的编码比特数能够接近每帧的目标比特,只在目标比特的附近平稳变化。笔者以此为目标,对低时延码率控制算法进行了研究。
算法基本思想为结合H.264/AVC标准的编码特性进行分层精细化码率控制,分为3层:宏块层、帧层和图像组(GOP)层。并且在每层控制时都根据实际的缓冲区容量反馈和目标码率预分配比特数,在宏块层对码率控制参数即量化参数(QP)进行细调,在帧层对QP进行粗调,从而可实现缓冲区的平稳波动。同时,在宏块层根据每个宏块内容的复杂度来分配比特数,对于内容简单的宏块分配较少的码率,对于内容复杂的宏块分配较多的码率,从而将图像内容与码率相结合,获取更好的图像编码质量。
笔者的GOP为IPPP结构。设定一个GOP中的帧数为GN,一帧图像宏块数为MN,目标码率为B,帧率为R,每帧的目标比特数为BF(BF= B/R)。具体算法如下:
1)为防止发送缓冲区的上溢或下溢,每帧开始都先根据缓冲区容量反馈判断是否跳帧或添加冗余。
计算实际编码比特与目标比特的差值ΔB,其初始值为0;
如果ΔB大于阈值T1(T1=1.5×BF)则跳帧,且ΔB=ΔB-BF;
如果ΔB小于阈值T2(T2=0),则添加冗余包,设置其大小为512 Byte,则ΔB=ΔB+512。
2)GOP层码率控制。
为每个GOP预分配的比特数由BG表示
其中ΔBG表示前一个GOP编码结束后预分配比特数与实际编码比特数的差值。若当前GOP为视频序列的第1个GOP,则ΔBG初始值为0。每个GOP编码完后对其进行更新。
3)帧层码率控制。
在该层进行控制时,需根据帧编码类型(I帧或P帧)进行区分。由于I帧是后继P帧的参考帧,其质量直接影响后续帧。所以为I帧分配较多的比特,而对P帧则分配相对少的比特。目标比特数的预分配可细化为两步:计算目标缓冲水平和分配目标比特。第1步考虑缓存容量限制;第2步考虑目标码率、帧率以及GOP中剩余可分配的比特等限制。这样可预防缓冲区出现上溢或者下溢的问题。在帧层对QP进行粗调,根据缓冲区的充盈度以及ΔB确定一个全帧初始的QP值。QP的具体确定方法如下:
①如果当前帧为GOP中的第1个I帧,且所述的GOP为第1个GOP,则QPI为根据B、R以及图像分辨率得到一个经验值,通常设置为30。
②如果当前帧为GOP中的第1个I帧,且所述的GOP为除第1个GOP外的其他GOP,则QPI根据ΔBG的正负以及已编码完的上一个GOP的平均量化参数确定,方法如下:
其中为保证图像质量的连续性,减小量和增大量不宜过大,所以a的取值范围为[-3,+3]。
③如果当前帧为第1个I帧后的第1个P帧,则QPp0的调整根据P帧前的第1个I帧的QPI确定,计算公式为
其中t的取值范围为[-3,+3],△Bmax和△Bmin为期望控制的缓冲区可容忍的码率波动的最大值和最小值。
④如果当前帧为除第1个P帧之外的其余P帧,其QP由前1帧的skip宏块数目确定。这是由于每帧的编码比特数的差异大部分是由skip宏块(量化后为0,无需编码的宏块)的数目差异引起的。而根据时间相关性,相邻2个P帧的skip宏块数目相差不多,所以可根据上1个P帧的skip宏块数目,预测当前P帧的实际编码比特数,通过与目标比特数的比较,调整QP。具体方法如下:
其中QPL为前1个P帧的初始量化参数。QPskip为由前1帧由skip宏块数SN预测得到的量化参数,其计算公式为
其中符号「⏋表示向上取整操作。
4)宏块层码率控制。
对于I帧,其宏块预分配比特数BMi由宏块数MN和当前帧的目标比特数BF决定:
对于P帧,为提高码率控制算法的编码性能,笔者在P帧宏块层根据图像内容复杂度分配目标比特,此处使用预测残差的SAD值来表征宏块的复杂度。
先计算复杂度因子
其中SADi表示宏块i的复杂度,其值为对应当前宏块的前1帧当前位置宏块的原始值与最佳预测值的SAD值,j表示当前宏块i所在帧的上1帧中的宏块。
根据复杂度因子c和当前帧的目标比特BF确定当前宏块i的预分配目标比特数
对于宏块层的QP调整,则要结合缓冲区的充盈度以及ΔB来确定量化值调节因子q,其计算方法为
其中∑Bmi为已编码完宏块的实际比特数之和,∑BMI为已编码完宏块的目标比特数之和。
根据量化值调节因子调整宏块量化值,调节方式可利用非线性控制理论中的bang-bang最优控制原理[4],具体方法如下:第i个宏块的量化值QPMi为
其中QPF为宏块所在帧的全帧初始QP,ΔQP(q)为利用q值确定此量化调整值ΔQP的函数,其曲线方程为:
3 实验结果
为评估新算法的性能,在H.264/AVC标准参考软件JM基础上,实现了笔者设计的低时延码率控制算法。并将其与JVT-H017提案中的码率控制算法进行了对比实验。测试范围涵盖多组标准视频测试序列和多种目标码率。这里仅列出部分仿真实验结果。
图1和图2显示了在目标码率为500帧/s、I帧间隔为125帧、帧率为25帧/s的条件下,动态比较剧烈、有场景切换的mobile.yuv序列和图像内容比较平稳的kettle.yuv序列的编码比特数变化曲线。其中横坐标为编码帧数(这里仅列出部分帧数),纵坐标为编码的实际比特数与预分配的目标比特数的差值,即发送缓冲区累积的数据。
图1 mobile序列编码比特数变化曲线Fig.1 The coding bit variety curve for mobile
图2 kettle序列编码比特数变化曲线Fig.2 the coding bit variety curve for kettle
由图1和图2可见,笔者算法发送缓冲区内的变化远好于JVT-H017算法所引起的缓冲区变化情况。笔者算法每帧图像编码比特数的变化非常平稳,只在目标比特的附近进行小范围的波动。对于kettle.yuv序列,经测试,波动范围基本可控制在[-600,1500]字节以内,所以读写指针的波动最大差值为2100字节,其引起的最大缓冲时延可粗略的计算为:2 100×8/500 =33.6 ms;而JVT-H017算法引起的读写指针的差值最大值达到373 144比特,其对应的最大缓冲时延近似为373 144/500=746.288 ms,远大于笔者算法。
笔者比较了2种码率控制算法对编码性能的影响结果。表1列出了在300帧/s、400帧/s、500帧/s和600帧/s目标码率下,笔者算法与JVTH017算法的平均PSNR与实际编码码率的比较结果。由此表可见,该算法能够比较精确地控制码率,同时,编码质量下降的很少,约为0.1 dB。
表1 二种算法的编码性能比较结果Table 1 Comparison of coding performance for the two algorithm s
根据以上仿真实验结果可看出,笔者提出的低时延码率控制算法,不仅可达到减少跳帧次数、降低发送缓冲区引起的时延的目的,对视频编码质量影响也比较小。
4 结论
为降低视频传输时延,笔者结合H.264/AVC标准的编码特性,提出了一种低时延的码率控制算法。该算法综合了基于图像复杂度分析的前向码率控制技术和基于缓冲区容量反馈的后向码率控制技术,进行分层的精细化码率控制(宏块层、帧层和图像组层)。其中基于图像复杂度分析的前向码率控制技术,可根据图像内容合理地分配宏块层目标码率,从而较好地保持了图像质量;基于缓冲区容量反馈的后向码率控制技术,可迅速有效地实现各层码率预分配,使实际码率波动最小化,从而达到最小化缓存区容量、减小缓存时延的目的。实验结果验证了笔者算法可使码率波动最小化,同时较好地保持了图像质量。而且笔者算法可边采集图像数据边确定QP,而无需等待全帧图像数据采集完毕再计算QP,从而节省了约40 ms的输入等待时延;此外,笔者算法运算量小,避免了大量复杂的浮点运算,更利于工程实现。
[1]Chen Jen-yeu,Chia-Wen Chiu,Gwo-Long LI,et al. Burst-aware dynamic rate control for H.264/AVC video streaming[J].IEEE Trans on Broadcasting,2011,57 (1):89-93.
[2]Zhou Yi-min,Sun Yu,Feng Zhi-dan,etal.PID-based bit allocation strategy for H.264/AVC rate control[J]. IEEE Trans on Circuits and SystemsⅡ:Express Briefs,2011,58(3):184-188.
[3]Chang Li-chuan,Chih-Hung KUO,Liu Bin-da.A twostage rate control mechanism for RDO-Based H.264/ AVC encoders[J].IEEE Trans on Circuits and Systems for Video Technology,2011,21(5):660-673.
[4]王朝珠,秦化淑.最优控制理论[M].科学出版社,2003.