检测MPEG码流所需的基础知识

 作者:北京广播 来源:广播电视与制作

MPEG-2标准因其多层次的图像质量和传输速度、具有可分级性、灵活性和广泛的适应性,已成为DVB、HDTV信源编码的公认标准。近年来,除传输外,在电视中心的采集、制作和播出系统中以及多媒体领域里,也得到了广泛的应用。

         MPEG数字视频编码技术,是基于视频序列在空间和时间上的像素之间的相关特性这一原理的。利用帧内离散余弦变换编码技术,发掘同一画面邻近像素之间的空间相关性来实现有效的数据压缩;对于邻近帧中的像素的相关性,则采用帧间运动补偿预测技术来实现数据压缩。通常将这两种技术有机地结合起来,从而实现高效的数据压缩,这是实现MPEG的关键。

         为了便于对图像序列的随机访问和编辑,MPEG对视频数据流规定了分层的结构如图1所示,并规定了详细的语法和语义,从顶层开始依次为:第一层是图像序列层,它包含序列头、若干个图像组层的数据以及序列终止符。第二层是图像组,它由定义的一组或多组帧内编码帧(I帧)或非帧内编码帧(P帧或B帧)图像组成。每组包括组头和图像层数据。第三层是图像层本身,由图像头和宏块条层数据组成。第四层是宏块条层,它由条层头和若干个连续的宏块组成。第五层是宏块层,由宏块头加块层数据组成,图像以亮度数据矩阵为基准,分为16×16像素的宏块,作为运动补偿的基本单元宏块分为亮度宏块和色度宏块,色度宏块大小与抽样格式有关。第六层是块层由图像数据和块结束符组成,是进行离散余弦变换的单元。在这六层数据结构相应的序列头、图像组头、图像头、宏块条头、宏块头等头部包含了对MPEG码流进行解码所需的起始码、定时、以及其他相关的参数和信息。

 


图1 MPEG视频数据流结构  
 
         MPEG-2编码算法的基础是混合的DCT/DPCM编码方法与宏块结构、运动补偿的结合,宏块是运动估计和运动补偿的基本单元,宏块分为亮度宏块和两个色度宏块,色度宏块的大小与抽样格式有关,抽样格式为4:2:0,色度宏块大小为8×8,4:4:4格式的色度块大小为16×16,4:2:2格式的色度块大小为8×16,如图2、3、4所示。

 

检测MPEG码流所需的基础知识_第1张图片

检测MPEG码流所需的基础知识_第2张图片

 

图2 4:2:0宏块结构

 图3 4:2:2宏块结构

 

 图3 4:2:4宏块结构

      在MPEG-2标准中规定有逐行和隔行两种扫描方式,因此,对宏块有逐行和隔行分块方式,如图5、图6所示。通常隔行扫描时,有快速运动发生时,帧行间的空间相关性下降,场行间的空间相关性增大,可以采用基于场的预测效果较好,相反,在运动非常缓慢时,采用基于帧的预测效果较好。另外,还有基于场预测的双基预测(Dual Prime),通过传送一个基于场的矢量和一个小的差矢量,使得传送运动矢量所需的比特数比一般的基于场预测的方式要少一些,对于压缩数据是有利的。 

图5 帧DCT编码中宏块的隔行分块方式    

图6 场DCT编码中宏块的逐行分块方式  

     在MPEG压缩处理中,以当前编码帧的亮度宏块为基本单元使用块匹配法寻找其在邻近参考帧的区域位置,得出两者之间的空间位置的相对偏移量,这个相对偏移量就是通常所指的运动矢量,得出运动矢量这一过程称为运动估计。将找到的匹配像块从当前宏块中减去,得出差值,再对差值进行DCT余弦变换,可变字长编码后,形成编码的图像差值,从而使图像数据得到高效压缩。最后,将运动矢量和编码后的图像差值一起传送给解码端,便于解码端解码,为了减少必须传送的运动矢量,色度信号采用同一宏块中的亮度信号的运动矢量。

通过运动估计可以去除帧间冗余度,然后通过离散余弦变换去除空间冗余度,使系数能量集中在低频部分,但是离散余弦变换本身并不能实现数据压缩,通过量化可以使系数减少,量化过程实际是用某一个较大的整数值(量化步长)去除相应的系数,并对结果中接近零的小数忽略取整,使大部分系数为零,经之字形扫描和可变字长编码后,达到数据压缩的目的。因而,量化步长很大程度上决定了压缩图像的质量,量化步长大时码率低,但图像质量下降很多。量化步长小时码率高,图像质量高。通常在压缩过程中会对码率和图像质量兼顾考虑。量化步长由量化矩阵和量化因子决定,量化矩阵根据人类视觉的生理和心理特性对一个DCT块内的各个系数使用不同的量化值,通常亮度、色度其量化矩阵不同,量化因子则对整个量化矩阵进行调整

是控制码率的参数。这两个参数在MPEG码流的包头中与图像内容一起发送给解码器。
通常,不同图像内容和不同的压缩帧类型,其输出数据流的码率是不相同的。但是,信道传输要求压缩信号的码率应该恒定,因此,在编码器的输出端和解码器的输入端用一定尺寸的缓冲器来解决这一问题,在编码器的输出端,缓冲器的输入信号码率是变化的,而输出信号是一个恒定比特流;同样,在解码器输入端缓冲器的输入比特流是恒定的,而用于解码的输出信号的码率是变化的。缓冲器的读写速度不同,需要对输入信号的码率进行控制,防止缓冲器出现上溢和下溢。上溢是单位时间内写入的比特数多于读出的比特数,缓冲器内的比特数随时间的增加而不断增加,这种趋势持续下去,将会发生数据丢失;下溢是单位时间内写入的比特数少于读出的比特数,缓冲器内的比特数随时间的增加而不断减少,这种趋势持续下去,将会破坏数据码流。当然,理论上来讲,采用大尺寸的缓冲器可以避免缓冲器出现溢出现象,但是会在编解码之间引入一个很长的延时,不能适应一些实时性要求较高的应用场合。通常MPEG会限定缓冲器的大小,这种情况下,主要依靠调节前面提到的量化因子大小,来控制缓冲器的数据占有率。缓冲器占有率实际上是说明缓冲器正常工作时,缓冲器所存的数据多少,当缓冲器占有率升高到接近100%时,应相应加大量化因子,从而加大整个量化矩阵的各个量化步长,对数据进行粗量化,减少送给缓冲器的数据量,防止上溢;反之,当缓冲器占有率减低到接近10%时,相应减小量化因子,减低整个量化矩阵的量化步长,对数据进行细量化,增加送给缓冲器的数据,起到防止下溢的作用。信道缓冲器的控制过程应符合视频信号的统计特性,但是有些时候实际视频信号的特性与控制系统使用的统计特性并不符合,就有可能发生溢出。这种情况下采取特殊措施防止溢出,强制停止传送部分数据防止上溢,或加入填充码防止下溢,这在MPEG协议分析的比特利用图中可以观察到各帧的数据比特和填充比特的情况。
要对MPEG数据流进行解码,除了图像数据本身以外,还必须依靠协议中精确定义的语义和语法以及相关辅助数据和信息如运动矢量、量化矩阵和量化因子等诸多参数。通常把语法和语义方面出现的误码称为逻辑错误,逻辑错误将严重影响正确解码,这也是MPEG协议分析的重点所在。

你可能感兴趣的:(数据结构,算法,工作)