MPEG-2听名称,就比MPEG-1牛逼了很多。
MPEG-2是MPEG专家组,从1990年就开始研究,并于94年完成的第二个视音频编码标准。相比于MPEG-1而言,它不仅继承了MPEG-1,而且在它的基础上,扩展了许多MPEG-1没有的功能,比如支持高分辨率的视像、大范围的数据速率、多声道的环绕声、多种视像分辨率、位速率不变、隔行扫描。
可以看到,新增的这几个功能,大致是在三个方面来提高:1、视音频的质量 2、视音频的传输 3、数字电视的支持
而且MPEG-2在这几个方面的提高,并非徒有虚名,就像MPEG-1在mp3以及VCD的应用一样,MPEG-2在DVD影视,和广播级质量的数字电视上,应用广泛,比如美国的ATSC DTV、欧洲的DVB和日本的ISDB。
不仅如此,为了达到广播级质量这一级别,也就是视像的实时传输,MPEG-2还制定了两种数据流格式,如PS流和TS流,其中MPEG2-TS流也即至今仍很常见的TS格式传输流,所以MPEG-2也成为了在因特网上传输数字电视的一种标准。
下面我们就开始一一来看,为了更好的了解,我们还是先看一下MPEG-2内容的组成部分,它总共由11各部分组成,不过对于我们来说,前三个部分就足够了:
表中前面的13818,是指ISO/IEC 13818,它是MPEG-2的标准编号。而在系统模型方面,与MPEG-1一样,它也由编码系统和解码系统两大部分组成。因为编码和解码只是相反的两个步骤,所以我们来着重看一下编码部分。
MPEG-2的编码系统,由两部分组成:
第一部分肯定是必须的,而第二部分就是MPEG-2的特点。
通过上图可以看到,图中虚线左边是视音频编码部分,而第二部分就是数据打包的部分。在数据打包的时候,MPEG-2将视像数据、声音数据和其他数据组合在一起,生成适合存储或传输的基本数据流,而我们使用的存储和传输两个词,也就是数据流的两种类型:
看到这里我们可能就会产生疑问,PS流和TS流看着也没什么区别呀,为啥应用不同呢?实际上,虽然他们都是对PES流的重新封装,但是它们的包结构是不同的。
PS流的包结构是可变长度的,而TS流的包结构是固定长度的。这就造成了它们的抗干扰性能的不同,比如PS流如果在传输信道上丢失掉某一同步信息,那么接收端就会无法同步,造成严重的信息丢失,所以PS流没有应用在传输领域。
而与之相对的,TS是固定长度的包结构,即使丢失某一个包,通过后面包的同步信息,也能恢复同步。这也就是MPEG2-TS流格式比较有名的,可以从视频流的任一片段独立解码。所以它使用在传输系统上,无可厚非。
当然了,这篇文章的主角是MPEG-2,并不是TS和PS,关于它们还有更多的内容,后面再单独开一篇介绍。
看完了编码系统的视音频编码器和数据包装,下面我们来看一下它的视像编码器部分,也即视频图像的编码。
在MPEG-1中,我们知道它是从空间冗余和时间冗余方面,来去除冗余数据。而在MPEG-2中,在去除时间冗余数据方面,又有了新的提高。因为去除时间冗余数据的主要目标,为B帧和P帧,而编码这两种帧数据的主要工作,就是找到最佳匹配宏块(上篇讲过)。而跟找最佳匹配宏块相关的,就是下面的两个重要概念:
与MPEG-1不同的时,这次我们不再分别来看I、B、P帧的编码原理,因为这在MPEG-1里已经定义了。而在MPEG-2里,我们就来看看视像编码器的结构图,这在原理上与MPEG-1的结构基本一致:
图中:
Q为量化,IQ(Inverse quantization)为逆量化,DCT为离散余弦变换,IDCT为逆离散余弦变换,MCP(motion compensated predictor)为移动补偿预测器,ME为移动估算器,VLE为可变长度编码器,VLD(cariable length decoder)为可变长度解码器,FS(frame memory)为帧存储器
所以看了图,别说哪个词不认识哈。其中DCT、量化、VLE是我们在上篇介绍过的,而这幅结构图,只是把I、B、P帧的编码放到了一起。所以只要在图中,分别找到I、B、P帧的编码路线,即可看懂上图。
比如最上面那条线,从视像输入到DCT、Q、VLE不就是I帧的编码嘛。
而I帧同时也可以作为B帧和P帧的参考图像,所以在经过DCT、Q量化后,在量化DCT系数那一步,进入到内置解码器,如下图:
可以看到这个解码器,是用于产生预测图像的,也即左上角输出的那个箭头。而箭头向里的输入箭头有三个,分别为:最下方的移动适量,上面的量化DCT系数,右侧的用于控制数据速率的量化参数控制信号。
我们都知道B帧和P帧都属于预测图像,这里先不管具体是B帧还是P帧,因为它们两个的操作都差不多,所以我们先当成输出为预测图像P来考虑。
通过下图可以看到,预测图像是由当前图像,与存储在FS(帧存储器)中的先前图像,经过ME(移动估算)得到移动矢量,然后再由移动矢量和先前图像,经过MCP(移动补偿预测器)来生成。
而FS里的先前图像,则是由量化DCT系数,经过IQ逆量化和IDCT逆离散余弦变换后,与先前预测图像生成的重构图像。
而这里的量化DCT系数,就不一定是I帧啦,因为I帧无需与其他图像比较,自己本身就可以直接存在FS里。所以这里的量化DCT系数,也会来源于编码过程中产生的预测误差。
也即左上角视像输入和预测图像,经过加法器(+)产生预测误差,然后经过DCT、量化产生量化DCT系数,进而经过IQ、IDCT与预测图像重构,产生重构图像存储在FS里。
另一方面,视像输入和预测图像产生的预测误差,也会经过编码和复合后,作为数据输出送到传输或存储媒体。
其中预测误差在VLE(行程长度编码)阶段,与移动矢量一起复合和编码后,输出出去。
而图中的量化参数控制,是用来改变视像质量和数据速率的。这也是目前的各种码率(单位时间内传输的位数,一般单位为kbps,即千位每秒,其实就是数据传输率)控制算法控制码率的方法,它们主要是通过调整量化参数,来控制码率的。关于这部分,内容深入的都可以写论文了,不过好在我们不需要这么深入,至少现在不是~