http://blog.csdn.net/zhubin215130/article/details/8911955
基于MPEG-2的协议已经成为通过地面发射站、卫星、有线宽带网络以负载广播质量压缩的视频、音频和数据的世界标准。简而言之, MPEG-2 之于数字广播的关系,就好比IP协议之于互联网。
将内容转换成数字格式对于广播行业和基础设施提供商来说具有巨大的收益保证,其中包括:
- 增加频道容量,在广播带宽不变的情况下提供更多的频道
- 增加程序选择,例如交互性和视频点播(VoD)
- 提升图像质量,使其和标清信号一致
- 提升安全性,阻止未授权用户使用服务
不仅如此,转换成数字格式还为开发、管理和运营人员创造了相当大的技术挑战。数字转换是实现上述好处的第一步,但是只是数字化远远不够。未压缩的数字视频信号需要至少和原始模拟信号同样多的带宽。
要使数字电视成为有实践性的、盈利的服务,压缩是第二个的至关重要的步骤。通过大幅度降低传输数字节目所需的数据或带宽,迁移至数字电视的目标得以实现。动态图像专家组(MovingPicture Experts Group)开发的MPEG-2标准,已经成为当今数字广播产业主要依赖的数字音视频压缩和传输的媒介。
视频内容被数字化后,就可以开始压缩了。视频压缩会在每一个视频帧以及连续帧之间压榨出相当多的冗余,同时还使用了一些人类视觉系统的技术来描述运动。使用视频压缩,能够在不造成令人无法接受的图像质量损失的前提下,将原始数字信号中98%的部分榨取出来。
MPEG视频压缩的两个主要的类型为时间编码和空间编码。通过利用人眼对某种画面质量下降(例如动态图像区域的噪声)的不敏感性,空间编码消除了每个独立视频帧中像素与像素之间的冗余【帧内压缩】。时间编码将视频序列中每一帧之间的冗余降低到最小【帧间压缩】。
- 空间编码
空间编码依赖于图像中临近像素集合的相似性。举个例子,一幅以蓝天为背景的图片,通常会包含很多行完全相同的蓝色像素点。空间编码能够只对这些像素的一个集合进行编码,然后声明余下的都是完全一样的,因此比特流中的冗余数据就被消灭掉了。
- 时间编码
时间编码消除了视频流中连续帧之间的冗余,比如,一部从鸟瞰视角拍摄的足球比赛视频中,运动员总是活动的,但背景画面——球场本身是静止的。时间编码利用了连续帧的相似性,只对帧之间不同的地方进行编码。这是通过两种时间编码方式实现:帧间预测和运动预测。
1. 帧间预测
帧间预测利用连续帧的相似,周期性的插入完整的参考值,并使用该帧来预测前向的和后向的其他帧。参考帧成为帧内编码帧,或者I帧。I帧被用作P帧和B帧的参照物。
预测帧——P帧,参考自前一个I帧或者P帧,这表明在传输P帧时,编码器只需要传输该帧系数组与前一个I帧或P帧的不同点即可,而不需要传输全部DCT系数组。在解码器端,通过前一个I帧和P帧作为参照并添加不同点,即可恢复P帧。双向预测帧——B帧,以前向和后向相邻的I帧或P帧为参考。通常P帧只需要I帧数据量的50%,而B帧仅需要I帧数据量的25%。
当然,如果只用一个I帧作为基准来创建视频流里所有的其他帧的话,将会使视频流极易出错,因为一个I帧中的错误将会蔓延至整个视频流。因为这个原因,帧流被分成了若干个GOP(Groupsof Pictures),一般长度是12到15帧。每个GOP从一个I帧开始,当一个I帧出错时能够快速恢复。GOP也包含P帧和B帧,下图为一个GOP的例子。
2. 运动预测
虽然屏幕上的物体可能会改变位置,但他们的形态却通常是不变的。运动预测利用了这个相似性,测量物体的运动并将相应的运动矢量传给了解码器。解码器利用该矢量,在下一帧中将指定的图像从前一帧的位置移到新的位置。因此运动物体只需要编码一次,再在后续帧中作必要的移动即可。
一般来说,运动会在多个帧间持续,所以传输矢量变化可以获得更高的压缩比。举个例子,如果物体的速度是恒定的,则运动矢量不会变化;只有不等于零的矢量才会被传输。
3. Profile和Level
为了向广播商提供编码复杂度和图像尺寸方面的灵活性,MPEG-2标准定义了一些不同的压缩选择——profile和level。Profile指定了编码复杂度,level指定了每帧的像素数目。下图列出了MPEG-2定义的各种profile和level,以及每种组合的最大码率。
在当今的广播环境中,最广泛使用的组合是MainProfile at Main Level, 以及MainProfile at High Level。关于Profile和Level的更多信息,请参考MPEG-2specification。
4. 压缩视频流的解码
MPEG-2视频流的解码过程就是反向的执行编码过程的步骤。反转DCT过程会根据编码器的精度恢复频域系数。然后解码器会用I帧和P帧中的宏块,来代替那些在编码过程中从P帧和B帧中丢弃的冗余宏块。运动矢量定义了这些预测帧中的宏块的具体位置。
就像前面所述,帧间预测需要将帧不按存储顺序发送给解码器,并临时保存在buffer中。例如,为了让解码器重建B帧,必须首先保证该B帧的前一帧和后一帧对解码器可用。下图表示,在最终显示给用户之前,需要按照上面的序列顺序解码。