当前位置: 代码迷 >> 综合 >> 《视频解密》中文版(第四版)第十二章 MPEG-1
  详细解决方案

《视频解密》中文版(第四版)第十二章 MPEG-1

热度:35   发布时间:2023-12-09 21:26:46.0

MPEG-1的音频和视频压缩被开发用于数字音频和视频的存储和分发。它的特性包括随机访问,快进和反向回放。MPEG-1的使用是原始视频CDs(VCD)的基础。

信道带宽和图像分辨率通过(CDs)的可用媒介进行设置的。目标是使用一个标准压缩盘以1.416Mbps的码率回放数字音频和视频(1.15Mbps用于视频)。

MPEG-1是一个ISO的标准(ISO/IEC 11172),包括6个部分:

系统                                 ISO/IEC 11172-1

视频                                 ISO/IEC 11172-2

音频                                 ISO/IEC 11172-3

低码率音频                     ISO/IEC 13818-3

一致性测试                     ISO/IEC 11172-4

仿真软件                         ISO/IEC 11172-5

隐含码流定义解压缩算法。压缩算法到个别厂商,要获得国际标准的范围,允许一个专门的优势。


MPEG挑战JPEG

JPEG(ISO/IEC 10918)为静止连续色调的灰度和彩色图像而设计。他们不能高效处理双电平(黑和白)图像,伪彩色图像在处理前必须被扩展到为对应的色彩表示。JPGE图像可以是任何分辨率和色彩空间的,有损和无损算法都可以使用。

由于JPEG是这样一个通用的标准,所以它有许多特性和能力。通过调整各种参数,在一个宽的范围中可以对压缩图像尺寸和质量进行重建。压缩质量范围从“浏览”(100:1压缩比)到“和源图难以区分”(压缩比大概3:1)。典型地,源图和重建图之间可见的阈值差异介于10:1和20:1之间压缩比的某处。

JPEG不是使用单一的算法,而是一族中4个,每种设计用于一个特定的应用。最熟悉的有损算法是序列DCT。或者霍夫曼编码(JPEG基线)或者算术编码被使用。当图片被解码时,它从左到右,从上到下解码。

渐进DCT是另一种有损算法,它需要多次扫描图像。当图像被解码时,一个完整图像的粗糙近似马上可得,质量逐步改善,直到完成。这个做法的理想应用如图像数据库浏览。或者频谱选择,逐次逼近或者两者同时可能被使用。频谱选择选项先编码低频DCT系数(快速获得一副图像),接下来编码高频系数(加入更多细节)。逐次逼近选项首先编码DCT系数的相对主要比特,接下来编码相对次要比特。

分层模式使用多种分辨率表示一副图像。例如,可能有512×512,1024×1024和2048×2048版本的图像。更高分辨率的图像和它们后面的更小的图像使用不同的编码,如果独立存储,它们需要跟少的比特数。当然,所有比特数目比需要存储的最高分辨率的图片要多。注意,在分层序列中的独立图像如果需要可能渐进编码。

还支持一种相对于变换域的像素域操作的无损空间算法。一个预测的样本值使用多达3个相邻的采样点。这个预测再减去实际的值,不同的是无损编码或者使用霍夫曼编码或算术编码。无损操作可达到2:1的压缩率。

由于视频指示一系列的静止图像,基线JPEG编码器和解码器已经可用,所以人们使用基线JPEG来压缩实时视频(也叫做移动JPEG或MJPEG)。但是,这种技术不能使用利用帧与帧之间冗余的优势来提高压缩率,它由MPEG来完成。

JPEG最重要的可能是对称性,意味着编码和解码的开销大致是一样的。相反,MPEG被设计主要是编码一个视频一次,并在多种平台上进行多次回放。为了降低MPEG硬件解码器的开销,MPEG被设计成非对称的,编码处理大概需要比解码处理大100×计算能力。

因为MPEG针对特定应用,所以硬件通常仅支持一小部分特定的解决方案。还有,使用8-比特采样仅支持一种彩色空间(YCbCr)。MPEG还优化了一个有限范围的压缩比率。

如果为编辑捕获视频,你可以或者使用基线JPEG或仅I帧(帧内)MPEG实时压缩到磁盘。使用JPEG需要的系统能对SIF(标准输入格式)分辨率的传输数据和访问磁盘的比特率大概4Mbps。一旦编辑完成,可以将结果最大的压缩转换到MPEG。


质量问题

在比特率大约3~4Mbps时,MPEG-1达到“广播质量”。然而,由于MPEG-1是基于帧的处理,复杂的时空有效序列(如运动)可能需要5~6Mbps。通过基于场的处理,MPEG-2在达到相同“广播质量”时允许的码率大概4~6Mbps。

几个因素影响MPEG压缩视频的质量:

l        原始视频源的分辨率

l        压缩之后允许的码率(信道带宽)

l        运动估计的有效性

一个影响压缩视频质量的限制是原始视频源的分辨率。如果延时分辨率过低,通常将缺乏细节。

运动估计的有效性决定了运动伪影,如当运动开始时或多种运动在一个特定的阈值之上时降低了视频质量。差的运动估计将导致视频质量普遍下降。

最重要的是,越高的码率(信道带宽),越多的信号可以被传送,允许存在更少的运动伪影或显示更高的分辨率。通常降低语音的码率不会导致解码视频“优雅的退化”。一旦码率下降到一个阈值之下而8×8块清晰可见时,视频质量迅速下降。


音频概述

MPEG-1使用3种音频编码方案族,随着复杂度和音频质量的提高,分别叫做层I,层II和层III。3层是层次结构的:一个层III的解码器可以处理层I,II和III;一个层II的解码器可以处理层I和II;一个层I解码器只能处理层I。所有层都支持使用16,22.05,24,32,44.1或48kHz16-比特数字化的音频采样率。

对于每一层,码流格式和解码器是被指定的。编码器没有被指定,允许以后升级。所有层工作的码率类似:

层I:          32~448kbps

层II:         8~384kbps

层III:       8~320kbps

音频通道支持4中操作模式:

普通立体声

联合(强度和/或ms)立体声

双通道单声道

单通道单声道

对于普通立体声,一个声道携带左音频信号,一个携带右音频信号。对于强度立体声(支持所有层),高频率(高于2kHz)被融合。立体声图像被保留,近传送时间包络。对于ms立体声(仅支持层III),一个通道携带信号的和(L+R),另一个携带信号的差(L-R)。除此之外,预加重,版权标识和原始/拷贝指示被支持。


音频质量

为了确定一个特定的应用应该使用哪一层,因为每一层设计旨在支持特定码率降低音频质量的下降,所以需要查看可用的码率。

层I,层II的简化版本每通道的目标比特率是192kbps或更高。

层II和MUSICAM完全相同,每通道的目标码率是128kbps。它是作为在声音质量和编码复杂度之间的一个权衡的设计。它广泛用于每通道码率为96~128kbps。

层III(也叫做“mp3”)融合了MUSICAM和ASPEC最好的思想,目标码率是每通道64kbps。层III格式指定了一系列的优先特性,所有的只为一个目标:尽可能保留音频质量,甚至是在低码率情况下。


理论背景

所有层的编码方案都是基于声学心理学原理——尤其是“屏蔽”效应,例如一个响亮的音调频率阻值听到其附近的另一个频率。

假设有一个频率为1000Hz的响亮音调,另一个1100Hz的音调比它低18dB。1100Hz的音调将不能被听到;它被1000Hz的音调屏蔽。然而,一个在2000Hz处的低于1000Hz音调18dB的音调将被听到。为了能够被1000Hz的音调屏蔽,2000Hz的音调必须比它小45dB以上。任何在一个强频率附近的强度低的频率将被屏蔽;离强频率更远的地方,就有更小的屏蔽消影。

已经开发的曲线被打印被屏蔽的频率与能量的关系(并发掩蔽)。如果电平有一个显著的变化(30~40dB),掩蔽消影也出现在强频率的前面(预掩蔽)和后面(后掩蔽)。究其原因是认为大脑有一定的处理时间。预掩蔽时间大概是2~5ms;后掩蔽时间大概是100ms。

调整底噪声减少了所需要的数据量,能进一步压缩。CD使用16-比特的分辨率到达的信噪比大概是96dB,这正好符合很好听的动态范围(指大多数人在寂静情况下听不到噪声)。如果使用18-比特的分辨率,在音乐或单词之间瞬间寂静状态下将会有一个明显的噪声。但是在响亮同路期间,噪声将不受关注。由于屏蔽效应,这意味着在强的声音周围你可以提高底噪声,由于噪声会被屏蔽。

对于一个立体声信号,声道之间通常有冗余。所有层可以通过使用一“联合立体声”利用这些立体声效应,在层III可以最大灵活地达到使用。


视频编码层

MPEG-1允许最大分辨率到4095×4095,60帧每秒(逐行扫描)。然而很多人认为MPEG-1是一个子集叫做约束参数比特流(CPB)。CPB是一个采样和码流参数受限的集,设计规范的缓存大小和内存带宽,允许编码器和解码器相互操作的名义保证,同时还解决了应用最广泛的范围。不能处理这些能力的器件不认为是真正的MPEG-1。表12.1列出了一些参数约束。

CPB限制视频到396宏块(101,376像素)。所以MPEG-1视频典型编码到SIF分辨率,352×240p或352×288p。在编码期间,原始BT.601的704×480i或704×576i分辨率被缩小到SIF分辨率。这通常通过忽略场2,而场1水平缩小而得到。在解码期间,SIF分辨率被放大到704×480i或704×576i分辨率。注意,在扫描行上的一些完整的有效扫描行和采样点被忽略以确保Y采样的数量可以被16的整除。表12.2列出了一些通用的MPEG-1分辨率。

编码的视频码率被限制到1.856Mbps。但是,码率经常是豁免的参数,有些应用中可能高达6Mbps或更高。

MPEG-1视频使用图3.7中的4:2:0 YCbCr数据格式。

 


水平分辨率

768采样点

垂直分辨率

576扫描行

图像范围

396宏块

像素速率

768×25宏块/秒

图像速率

30帧/秒

比特速率

1.856Mbps


 

表12.1    MPEG-1的一些参数约束

 


分辨率

帧/秒

352×240p

29.97

352×240p

23.976

352×288p

25

352×240p1

29.97

352×288p1

25


                               注:1.方形像素格式

表12.2通用MPEG-1分辨率


隔行扫描视频

MPEG-1设计用于处理逐行扫描视频(也指非隔行扫描的)。起初,努力提高视频质量,制定了几个方案来能使用一个隔行扫描图像的两场。

例如,两场可以融合成一个单一704×480p或704×576p分辨率的帧来编码。在解码期间,分离场。然而,由于运动物体的位置在两场中有轻微差异,所以这会导致运动伪影。编码分离的两场避免了运动伪影,但由于两场之间的冗余没有被使用,降低了压缩率。

有许多其它的方案来处理隔行扫描视频,所以MPEG-2定义了一个标准的方法来处理它(覆盖了13章)。


编码预处理

视频流在进入MPEG编码之前通过预处理可以获得更好的图像。

为了避免一个特定图像在编码期间严重的伪影,可以对整张图像或具体问题区域进行预处理。压缩处理之前的预滤波类似于A/D转换之前的抗混叠滤波。预滤波可以考虑到纹样,运动和边界,并可以在图像,分片,宏块或块级别的应用。

MPEG在很少快速或随机运动和好的光照的场景达到做好的效果。为了达到做好的效果,前景灯光应该清晰,背景灯光应该扩散。前景对比度和细节应该是正常的,但是低对比度的背景保持软边界是合适的。编辑工具典型允许你预处理潜在问题的区域。

MPEG-1规范有一个从BT.601到SIF分辨率下变换的滤波器例子。在这种情况下,场2被忽略,丢弃了一半的垂直分辨率,并且使用一个抽样滤波器来降低水平分辨率,通过一个2的因子保持扫描线数。适当的Cb和Cr分量抽取仍然必须进行。

在下变换到SIF分辨率之前通过去隔行可以获得更好的视频质量。当处理宏块时(后面定义),如果两场之间的宏块差异很小,平均它们得到一个新的宏块。否则,使用场中的相似宏块区域来避免运动伪影。


编码帧类型

有4中编码帧类型。I(帧内)帧(~1比特/像素)可作为独立静止图像的帧编码。它们是允许在视频流中的随机访问点。因此,I帧应该每秒出现两次。I帧也应该在场景剪切发生处使用。

P(预测)帧(~0.1比特/像素)和最近前面的I帧或P帧相关编码,生成前向预测处理,突入12.1所示。通过运动补偿,P帧比I帧提供更多的压缩率,并且也是B帧和将来P帧的参考。

B(双向)帧(~0.015比特/像素),使用最近过去和将来的I或P帧作为参考,生成双向预测,如图12.1所示。通过平均两帧,B帧提供了最大的压缩和降低了噪声。典型地,由两个B帧分开I或P帧。

D(DC)帧作为一个独立静止图像的编码帧,仅使用DCTs的DC分量。D帧可能不再包括任何其它帧序列中,并且很少使用。

 图12.1    MPEG-1的I,P和B帧。

有些帧不按显示顺序发送,复杂化了插值过程,并要求MPEG解码器对帧重新排序。箭头显示了帧的依赖关系。

 

一组图像(GOP)是一系列的单个或多个解码帧为了帮助随机访问和编辑。在编码进程中,GOP的值是可配置的。GOP的值越小,越好的运动响应(由于I帧彼此更接近),但是越低的压缩率。

一个编码的码流中,一个GOP必须以一个I帧开始,可能以任何顺序跟随任何数量的I,P或B帧。在显示顺序中,一个GOP必须以I或B帧开始,以I或P帧结束。这样,最小的GOP尺寸是一个单I帧,无限的尺寸。

原本,每个GOP被独立编码和显示,与任何其它GOP不相关。但这是不可能的,除非I帧之前没有B帧,或者,如果有,它们只使用后向运动补偿。这导致开放式和封闭式的GOP格式。一个封闭式GOP是一个可以不使用前面的GOP内的帧进行运动补偿的GOP。一个开放式GOP需要它们可用。


运动补偿

运动补偿通过消除帧之间的时间冗余提高了P和B帧的压缩率。它工作于宏块层(后面定义)。

这个技巧产生于一般图像一个短序列的相似性,大部分物体都停留在相同的位置,而其它仅移动一个小的距离。运动有一个二维的运动向量描述,指定从前面解码帧的哪里获取一个宏块来预测当前宏块的简单值。

在一个宏块使用运动补偿被压缩之后,它同时包含了参考宏块和编码的宏块之间的空间差异(运动向量)和内容差异(误差项)。

注意,有一个场景信息不能由前面场景预测的情形,如当一个门被打开时。前面的场景没有包含门后面区域的细节。在这种情况下,当P帧中的一个宏块不能通过运动补偿表示时,它和I帧中的一个宏块的编码方式相同(使用帧内图像编码)。

B帧中的宏块使用最近的前或后I或P帧作为参考进行编码,产生4种可能的编码:

l        帧内编码:无运动补偿

l        前向预测:以最近的将来I或P帧进行参考

l        双向预测:使用两帧作为参考——最近的过去I或P帧和最近的将来I或P帧

后向预测被用来预测前面帧显示的“未遮盖”的区域。


I

图像块和预测误差块有一个高的空间冗余。一些步骤被用来移除一个帧内的这些冗余以提高压缩率。解码器使用这些相反的步骤来恢复数据。


宏块

一个宏块(如图7.55所示)的Y分量包括16-采样点×16-行,而对应的Cb和Cr分量是两个8-采样点×8-行。

一个块是一个8-采样×8-行的Y,Cb或Cr值。注意,一个Y块的1/4图像尺寸对应Cb或Cr块。这样,一个宏块对应4个Y块,一个Cb块和一个Cr块,如图12.2所示。

在I帧中有两种类型的宏块,它们都是帧内编码的,如表12.9所示。一种使用当前量化尺度(叫做帧内-d);另一种对量化尺度定义一个新的值(叫做帧内-q)。

如果宏块类型是帧内-q,那么宏块的头指定一个5-比特的缩放因子。解码器使用这个从传送量化系数中计算DCT系数。量化缩放因子的范围可能是1~31,0被禁止。

 图12.2    MPEG-1的宏块和块


DCT

每个8×8的块(输入采样或者预测误差项)由8×8DCT(离散余弦变换)处理,产生一个8×8块的水平和垂直频率系数,如图7.56所示。

输入采样的值是0~255,生成DC系数的范围是0~2040,并有一个范围是-1,000~+1,000的AC系数。


量化

8×8块的频率系数是均匀量化的,限制允许值的数目。量化步距由量化矩阵和量化尺度导出,可能对不同的系数是不同的,可能在宏块之间变化。

DC系数的量化步距固定为8。DC量化的系数由DC系数除以8并四舍五入到最近整数确定。AC系数使用帧内量化矩阵量化。


锯齿扫描

锯齿扫描开始预DC分量,生成一个线性的量化频率系数流,按频率递增排列,如图7.59所示。这产生长游程的0系数。


量化的DC系数编码

DC系数量化之后,它们是无损编码。

一个宏块中的Y块编码的次序如图12.2所示。块4的DC值是下一个宏块块1的DC预测。在每个分片的开始处,DC预测被置成1,024。

Cb和Cr块的DC值使用前面对应宏块中的块作为预测来编码。在每个分片的开始处,两个DC预测被置为1,024。

DCT的DC差值由它们的绝对值组织,如表12.16所示。[大小],它指定了额外比特数定义了独特的电平,由可变长度编码传送,由于统计信息的不同,Y和CbCr是不同的。例如,一个大小是4跟随着4个额外比特。

解码器通过相反的过程来恢复量化的DC系数。


量化的AC系数编码

在AC系数量化之后,它们由图7.59中的锯齿顺序扫描,使用游程和电平编码。扫描开始预位置1,如图7.59所示,和 DC系数在位置0的编码分开。

游程和电平被编码如表13.18所示。“s”比特指示电平的符号;“0”是正的,“1”是负的。

对于游程-电平融合没有在表12.18中显示,一个转义序列被使用,包括转义代码(ESC),跟随在表12.19中的游程和电平码之后。

在最后的DCT系数被编码之后,一个EOB码字被加入,高速解码器这个8×8块中不再有量化系数。


P
宏块

由于额外的复杂运动补偿,所以P帧中有8种类型的宏块,如表12.10所示。

跳过0运动向量的预测宏块的宏块。这样,没有纠错可用;解码器拷贝前帧跳过的宏块到当前帧。跳过宏块的平均值是它们需要少量的比特传送。它们没有码字;它们是通过有地址宏块的增量码字编码来跳过它们。

如果表12.10中的[宏块量化]列有一个“1”,那么量化大小被传送。对于剩下的宏块类型,DCT纠错使用前面的值作为量化大小来编码。

如果表12.10中的[运动前向]列有一个“1”,水平和垂直的前向运动向量陆续被传送。

如果表12.10中的[编码模式]列有一个“1”,那么6-比特编码块模式作为可变长码被传递。这告诉解码器宏块中6个块的哪些块被编码(“1”),哪些块不被编码(“0”)。表12.14列举了码字分布到63种可能的组合。当没有块被编码时没有码字;这由宏块类型指示。对于I帧中的宏块和P即B帧中的帧内编码宏块,编码块的模型不被传送,但是被假设成一个63的值(所有块被编码)。

为了确定那种类型的宏块被使用,解码器典型要做一系列的判断,如图12.3所示。

 图12.3    MPEG-1 P帧宏块类型的选择


DCT

帧内块AC系数的变换和它们在I帧中相同。帧内块DC系数的变换不同;除非前面块是帧内编码的,否则预测值被置为1,024。

非帧内块系数表示采样值之间的差异而不是真正的采样值。它们通过从当前宏块中减去前帧的运动补偿值得到。这里没有DC值的预测。

输出的采样值是从-255~+255,生成的AC系数的范围是-2,000~+2,000。


量化

帧内块的量化和它们在I帧中的一样。

非帧内块使用量化尺度和非帧内量化矩阵来量化。AC和DC系数的量化方法一样。


帧内块编码

帧内块的编码和I帧的帧内块一样。处理DC系数有所不同,这里的预测值是128,除非前面块是帧内块。


非帧内块编码

编码块的模型(CBP)被用来指定哪些块有系数数据。这些编码和帧内块编码一样,除了DC系数的编码和AC系数一样的之外。


B
宏块

由于额外复杂的后向运动补偿,所以P帧中有12种类型的宏块,如表12.11所示。

跳过运动向量相同和宏块类型和前面宏块相同的宏块,这些不能帧内编码。跳过的宏块的平均值是它们需要少量的比特传送。它们没有码字;它们是通过有地址宏块的增量码字编码来跳过它们。

如果表12.11中的[宏块量化]列有一个“1”,那么量化大小被传送。对于剩下的宏块类型,DCT纠错使用前面的值作为量化大小来编码。

如果表12.11中的[运动前向]列有一个“1”,水平和垂直的前向运动向量陆续被传送。如果表12.11中的[运动后向]列有一个“1”,水平和垂直的前向运动向量陆续被传送。如果前向和后向运动类型都存在,向量以这种顺序传送:

水平前向

垂直前向

水平后向

垂直后向

如果表12.11中的[编码模式]列有一个“1”,那么6-比特编码块模式作为可变长码被传递。这告诉解码器宏块中6个块的哪些块被编码(“1”),哪块些不被编码(“0”)。表12.14列举了码字分布到63种可能的组合。当没有块被编码时没有码字;这由宏块类型指示。对于I帧中的宏块和P即B帧中的帧内编码宏块,编码块的模型不被传送,但是被假设成一个63的值(所有块被编码)。

为了确定那种类型的宏块被使用,解码器典型要做一系列的判断,如图12.4所示。

 图12.4    MPEG-1 B帧宏块类型的选择


编码

块的DCT系数被传送的量化系数和编码和它们在P帧中的方法一样。


D

D帧只包括DC-频率数据旨在用于快速搜索应用。D帧中的组合数据只是足够让用户找到视频。


视频比特流

图12.5显示了视频比特流,一个7层的层次结构。从高到底的层是:

视频序列

序列头

图像组(GOP)

图像

分片

宏块(MB)

注意开始码(000001xxH)必须通过在前面插入0~7个“0”来字节对齐。

 图12.5    MPEG-1视频比特流层次结构。

没有显示标志和保留比特


视频序列
序列结束码

这个32-比特的字段的值是000001B7H,用来结束一个视频序列。


序列头

每个序列数据包括一个序列头跟随气候的是图像组(GOPs)数据。层次节后如图12.5所示。


序列头码

这个32-比特字段的值是000001B3H,指示一个序列头的开始。


水平尺寸

这个12-比特二进制值指示可视图像的Y分量的宽度。宏块中的宽度定义为(水平尺寸+15)/16。


垂直尺寸

这个12-比特二进制值指示可视图像的Y分量的高度。宏块中的高度定义为(垂直尺寸+15)/16。


像素宽高比

这个4-比特的码字指示像素宽高比,如表12.3所示。


图像速率

这个4-比特的码字指示帧率,如表12.4所示。


比特速率

一个18-比特的二进制值指示了比特流的码率,计量单位是400bps的上调。0值是被禁止的,3FFFFH值可变比特率操作。如果约束参数标志是“1”,比特率必须 1.856Mbps。


标志比特

总是为“1”。

 


高/宽

例子

宽高比码字

禁止

 

0000

1.0000

方形像素

0001

0.6735

 

0010

0.7031

576-行 16:9

0011

0.7615

 

0100

0.8055

 

0101

0.8437

480-行 16:9

0110

0.8935

 

0111

0.9157

576-行 4:3

1000

0.9815

 

1001

1.0255

 

1010

1.0695

 

1011

1.0950

480-行 4:3

1100

1.1575

 

1101

1.2015

 

1110

保留

 

1111


 

表12.3    MPEG-1的像素宽高比码字

 


帧/秒

图像速率码字

禁止

0000

24/1.001

0001

24

0010

25

0011

30/1.001

0100

30

0101

50

0110

60/1.001

0111

60

1000

保留

1001

保留

1010

保留

1011

保留

1100

保留

1101

保留

1110

保留

1111


表12.4    MPEG-1图像速率码字


Vbv缓存大小

这个10-比特的二进制数字指示了解码器真确解码序列所需要的最小视频缓存校验的大小。它定义为:

B = 16×1024×vbv缓存大小

如果约束参数标志位是“1”,那么vbv缓存大小必须 40kB。


约束参数标志

如果遇到下列约束,那么这个比特被置为“1”:

水平尺寸 768采样点

垂直尺寸 576行

((水平尺寸+15)/16)×((垂直尺寸+15)/16) 396

((水平尺寸+15)/16)×((垂直尺寸+15)/16)×图像速率 396×25

前向f编码 4

后向f编码 4


载入帧内量化矩阵

如果跟随帧内量化矩阵,这个比特被置为“1”。如果被置为“0”,如下的默认值被使用,直到出现下一个视频序列头。

8    16   19   22   26   27   29   34

16  16   22   24   27   29   34   37

19  22   26   27   29   34   34   38

22  22   26   27   29   34   37   40

22  26   27   29   32   35   40   48

26  27   29   32   35   40   48   58

26  27   29   34   38   46   56   69

27  29   35   38   46   56   69   83


帧内量化矩阵

一个可选的64个8-比特值的列表用来代替当前帧内量化值。0值被禁止。帧内量化[0,0]值总是8。这些值一直有效直到下一个序列头出现。


载入非帧内量化矩阵

如果后面跟随非帧内量化矩阵,那么这个比特被置为“1”。如果被置为“0”,下面的默认值被使用直到下一个序列头出现为止。

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16

16  16   16   16   16   16   16   16


非帧内量化矩阵

一个可选的64个8-比特值的列表用来代替当前非帧内量化值。0值被禁止。这些值一直有效直到下一个序列头出现。


扩展开始码

这个可选的32-比特字符串000001B5H指示扩展序列数据的开始。扩展序列数据一直连续直到检测到另一个开始码。


扩展序列数据

这些n×8比特仅当存在扩展开始码时存在。


用户数据开始码

这个可选的32-比特字符串000001B2H指示用户数据的开始。用户数据一直连续直到检测到另一个开始码。


用户数据

这些n×8的数据仅当存在用户数据开始码时存在。用户数据必须不能包括一个23或更多的连续0比特。


图像组(GOP)层

每个图像层的数据包括一个GOP头,跟随其后的是图像数据。它的结构如图12.5所示。


组开始码

这个32-比特的值是000001B8H指示一个图像组的开始。


时间码

这些25比特指示时间码信息,如表12.5所示。[drop_frame_flag]仅在如想速率为30/1.001(29.97)Hz时,可以被置“1”。


封闭式gop

如果图像组没有前面图像组的运动向量参考,那么这个1-比特被置为“1”。这个比特允许支持压缩比特流编辑。


断开连接

这个1-比特标志在编码期间被置为“0”。当B帧后跟随一个图像组的第一个I帧不能被正确解码时,在编辑期间它被置为“1”。


扩展开始码

这个可选的32-比特字符串000001B5H指示组扩展数据 的开始,组扩展数据 连续,直到探测到另一个开始码。


组扩展数据

这些n×8比特只有在扩展开始码 存在时存在。


用户数据开始码

这个可选的32-比特字符串000001B2H指示用户数据 的开始,用户数据 连续,直到探测到另一个开始码。


用户数据

这些n×8比特只有在用户数据开始码 存在时存在。用户数据不能包含23或更多的连续0比特。


图像层

每个图像层的数据包括一个图像头,跟随其后的是分片数据。它的结构如图12.5所示。


图像开始码

这个32-比特的值是00000100H。


时间参考

对于每个图像组显示顺序中的第一帧,它的时间参考 是0。然后,这个10-比特的二进制值加1,在显示次序中每帧都是1024的模。


图像编码类型

这个3-比特码字指示了帧类型(I帧,P帧,B帧或D帧),如表12.6所示。D帧不用于和其它帧相同的视频序列。


Vbv延时

对于固定的比特率,16-比特vbv延时 二进制值设置了在开始解码一个图像时解码缓冲的初始占用以使它不上溢也不下溢。对于可变比特率,vbv延时 的值是FFFFH。

 


编码类型

码字

禁止

000

I帧

001

P帧

010

B帧

011

D帧

100

保留

101

保留

110

保留

111


 

表12.6    MPEG-1图像编码类型码


全像素前向向量

如果图象编码类型是“010”(P帧)或者“011”(B帧),那么这个1-比特的标志存在。如果它为“1”,那么前向运动向量是基于整数采样点的,而不是半采样点。


前向f码

如果图象编码类型是“010”(P帧)或者“011”(B帧),那么这个3-比特的二进制数存在。值“001”到“111”被使用;值“000”被禁止。

解码器使用两个参数来解码前向运动向量由这个场推导:前向r大小 和前向f。前向r大小 比前向f码 小1。前向f 的定义如表12.7所示。


全像素前向向量

如果图象编码类型是 “011”(B帧),那么这个1-比特的标志存在。如果它为“1”,那么前向运动向量是基于整数采样点的,而不是半采样点。


后向f码

如果图象编码类型是 “011”(B帧),那么这个3-比特的二进制数存在。值“001”到“111”被使用;值“000”被禁止。

解码器使用两个参数来解码前向运动向量由这个场推导:后向r大小 和后向f。后向r大小 比后向f码 小1。后向f 的定义和前向f 的定义相同。

 


编码类型

码字

禁止

000

I帧

001

P帧

010

B帧

011

D帧

100

保留

101

保留

110

保留

111


 

表12.7 MPEG-1前向f码 的值


额外图像比特

当这个比特被置为“1”时,指示后面跟随额外图像信息。


额外图像信息

如果额外图像比特 = “1”,那么这跟随其后的9-比特数据包括8比特的数据(额外图像信息)和另一个额外图像比特 来指示是否有另一个9比特跟随,以此类推。


扩展开始码

这个可选的32-比特字符串000001B5H指示图像扩展数据 的开始,图像扩展数据 连续,直到探测到另一个开始码。


图像扩展数据

这些n×8比特只有在扩展开始码 存在时才存在。


用户数据开始码

这个可选的32-比特字符串000001B2H指示用户数据 的开始,用户数据 连续,直到探测到另一个开始码。


用户数据

这些n×8比特只有在用户数据开始码 存在时存在。用户数据不能包含23或更多的连续0比特。


分片层

每个分片层的数据包括一个分片头,跟随其后的是宏块数据。它的结构如图12.5所示。


分片开始码

这个32-比特字段的开始24比特的值是00001H。最后8比特是垂直分片位置,值从01H~AFH。

垂直分片位置 指定单位为宏块的分片中的第一个宏块的垂直位置。宏块的第一行的值是1。


量化尺度

这个5-比特二进制数字的值是1~31(值0是禁止的)。它指示DCT系数重构电平的尺度因子。解码器使用这个值直到在分片层或者宏块层另一个量化尺度接收到为止。


额外分片比特

当这个比特被置“1”时,指示其后跟随额外分片信息。


额外分片信息

如果额外分片比特 = “1”,那么这跟随其后的9-比特数据包括8比特的数据(额外分片信息)和另一个额外图像比特 来指示是否有另一个9比特跟随,以此类推。


宏块(MB)层

每个宏块层数据包括一个宏块头,跟随其后的是运动向量和块数据。它的结构如图12.5所示。


宏块填充

这个可选的11-比特字段是一个固定的比特字串“0000 0001 111”,可以被用来提高比特率以匹配存储或发送需求。可以使用任何数量的连续宏块填充 字段。


宏块逃逸

这个可选的11-比特字段是一个固定的比特字串“0000 0001 000”,当当前宏块的地址和前面宏块的地址的差异大于33时它被使用。它强制宏块地址增量 的值增加33。任何数量的宏块逃逸 字段可以被使用。


宏块地址增量

这是一个可变长码字用于指定当前宏块地址和前面宏块地址之间的差异。它的值最大是33。大于33的值使用宏块逃逸 字段来编码。这个可变长码字列举于表12.8。


宏块类型

这个可变长度的码字指定编码方式和宏块内容。可变字长码字列举与表12.9~12.12。


量化尺度

这个可选的5-比特二进制数字的值是1~31(值0是禁止的)。它指示接收到的DCT系数重构电平的尺度因子。解码器使用这个值直到在分片层或者宏块层另一个量化尺度接收到为止。量化尺度字段仅当表12.9~12.12中的[宏块量化]=“1”时才存在。

 


增量值

码字

增量值

码字

1

1

17

0000 0101 10

2

011

18

0000 0101 01

3

010

19

0000 0101 11

4

0011

20

0000 0100 11

5

0010

21

0000 0100 10

6

0001 1

22

0000 0100 011

7

0001 0

23

0000 0100 010

8

0000 111

24

0000 0100 001

9

0000 110

25

0000 0100 000

10

0000 1011

26

0000 0011 111

11

0000 1010

27

0000 0011 110

12

0000 1001

28

0000 0011 101

13

0000 1000

29

0000 0011 100

14

0000 0111

30

0000 0011 011

15

0000 0110

31

0000 0011 010

16

0000 0101 11

32

0000 0011 001

 

33

0000 0011 000


 

表12.8    MPEG-1宏块地址增量可变长编码表

 


宏块类型

宏块量化

前向运动

后向运动

编码模型

帧内宏块

码字

帧内-d

0

0

0

0

1

1

帧内-q

1

0

0

0

1

01


 

表12.9    MPEG-1I帧宏块类型可变长编码表


水平前向运动码

这个可选的可变长字段包含前向运动向量信息如表12.13所示。它仅当表12.9~12.12中的[前向运动]=“1”时存在。


水平前向运动r

这个可选的二进制数(前向r尺寸比特)被用来帮助解码前向运动向量。它仅当表12.9~12.12中的[前向运动]=“1”时存在,前向f码 “001”,水平后向运动码 “0”。

 


宏块类型

宏块量化

运动前向

运动后向

编码模型

帧内宏块

码字

预测-mc

0

1

0

1

0

1

预测-c

0

0

0

1

0

01

预测-m

0

1

0

0

0

001

帧内-d

0

0

0

0

1

0001 1

前向-mcq

1

1

0

1

0

0001 0

前向-cq

1

0

0

1

0

0000 1

帧内-q

1

0

0

0

1

0000 01

跳过

 


 

表12.10  MPEG-1 P帧的宏块类型可变长码字表

 


宏块类型

宏块量化

运动前向

运动后向

编码模型

帧内宏块

码字

预测-i

0

1

1

0

0

10

预测-ic

0

1

1

1

0

11

预测-b

0

0

1

0

0

010

帧内-bc

0

0

1

1

0

011

预测-f

0

1

0

0

0

0010

预测-fc

0

1

0

1

0

0011

帧内-d

0

0

0

0

1

0001 1

预测-icq

1

1

1

1

0

0001 0

预测-fcq

1

1

0

1

0

0000 11

预测-bcq

1

0

1

1

0

0000 10

帧内-q

1

0

0

0

1

0000 01

跳过

 


 

表12.11  MPEG-1 B帧的宏块类型可变长码字表

 


宏块量化

前向运动

后向运动

编码模型

帧内宏块

码字

0

0

0

0

1

1


 

表12.12  MPEG-1 D帧的宏块类型可变长码字表


垂直前向运动码

这个可选的可变长字段包含前向运动向量信息如表12.13所示。它仅当表12.9~12.12中的[前向运动]=“1”时存在。


垂直前向运动r

这个可选的二进制数(前向r尺寸比特)被用来帮助解码前向运动向量。它仅当表12.9~12.12中的[前向运动]=“1”时存在,前向f码 “001”,垂直前项运动码 “0”。

 


运动向量差

码字

运动向量差

码字

-16

0000 0011 001

1

010

-15

0000 0011 011

2

0010

-14

0000 0011 101

3

0001 0

-13

0000 0011 111

4

0000 110

-12

0000 0100 001

5

0000 1010

-11

0000 0100 011

6

0000 1000

-10

0000 0100 11

7

0000 0110

-9

0000 0101 01

8

0000 0101 10

-8

0000 0101 11

9

0000 0101 00

-7

0000 0111

10

0000 0100 10

-6

0000 1001

11

0000 0100 010

-5

0000 1011

12

0000 0100 000

-4

0000 111

13

0000 0011 110

-3

0001 1

14

0000 0011 100

-2

0011

15

0000 0011 010

-1

011

16

0000 0011 000

0

1

 


 

表12.13  MPEG-1的水平运动前向码,垂直运动前向码,水平运动后向码和垂直运动后向码的可变长码字表


水平后向运动码

这个可选的可变长字段包含的后向运动向量信息如表12.13所示。它仅当表12.9~12.12中的[后向运动]=“1”时存在。


水平后向运动r

这个可选的二进制数(后向r尺寸比特)被用来帮助解码后向运动向量。它仅当表12.9~12.12中的[后向运动]=“1”时存在,后向f码 “001”,水平后向运动码 “0”。


垂直后向运动码

这个可选的可变长字段包含后向运动向量信息如表12.13所示。解码的值帮助判断比特流中是否存在垂直后向运动r。它仅当表12.9~12.12中的[后向运动]=“1”时存在。


垂直后向运动r

这个可选的二进制数(后向r尺寸比特)被用来帮助解码后向运动向量。它仅当表12.9~12.12中的[后向运动]=“1”时存在,后向f码 “001”,垂直后项运动码 “0”。


编码块模型

这个可选的可变长度码字被用来推导编码块模型(CBP)如表12.14所示。它仅当表12.9~12.12中的[编码模型]=“1”时存在,来指示宏块中的哪个块有至少一个变幻的系数传送。编码块模型二进制数表示为:

P0P1P2P3P4P5

这儿Pn=“1”对块[n]的任何当前系数,否则Pn=“0”。块编号(10进制格式)由图12.2给出。


宏块结束

这个可选的1-比特字段的值是“1”。它只在D帧中存在。


块层

每个块层的数据有系数数据组成。它的结构如图12.5所示。


亮度DCT DC大小

这个可选的可变长度码字用于Y块的帧内编码。它指定DCT DC差使用的比特数。可变长度码字如表12.15所示。

 


编码块模型

码字

编码块模型

码字

编码块模型

码字

60

111

9

0010 110

43

0001 0000

4

1101

17

0010 101

25

0000 1111

8

1100

33

0010 100

37

0000 1110

16

1011

6

0010 011

26

0000 1101

32

1010

10

0010 010

38

0000 1100

12

1001 1

18

0010 001

29

0000 1011

48

1001 0

34

0010 000

45

0000 1010

20

1000 1

7

0001 1111

53

0000 1001

40

1000 0

11

0001 1110

57

0000 1000

28

0111 1

19

0001 1101

30

0000 0111

44

0111 0

35

0001 1100

46

0000 0110

52

0110 1

13

0001 1011

54

0000 0101

56

0110 0

49

0001 1010

58

0000 0100

1

0101 1

21

0001 1001

31

0000 0011 1

61

0101 0

41

0001 1000

47

0000 0011 0

2

0100 1

14

0001 0111

55

0000 0010 1

62

0100 0

50

0001 0110

59

0000 0010 0

24

0011 11

22

0001 0101

27

0000 0001 1

36

0011 10

42

0001 0100

39

0000 0001 0

3

0011 01

15

0001 0011

 

63

0011 00

51

0001 0010

5

0010 111

23

0001 0001


 

表12.14  MPEG-1编码块模型可变长编码表

 


亮度DCT DC大小

码字

亮度DCT DC大小

码字

0

100

5

1110

1

00

6

1111 0

2

01

7

1111 10

3

101

8

1111 110

4

110

 


 

表12.15  MPEG-1亮度DCT DC大小可变长码字表


DCT DC

如果亮度DCT DC大小 0,那么这个可选的可变长度码字存在于亮度DCT DC大小 之后。它的值如表12.16所示。


色度DCT DC大小

这个可选的可变长度码字用于Cb和Cr块的帧内编码。它指定DCT DC差使用的比特数。可变长度码字如表12.17所示。


DCT DC

如果色度DCT DC大小 0,那么这个可选的可变长度码字存在于色度DCT DC大小 之后。它的值如表12.16所示。

 


DCT DC差

大小

码字(Y)

码字(CbCr)

额外码字

-255~-128

8

1111110

11111110

00000000~01111111

-127~-64

7

111110

1111110

0000000~0111111

-63~-32

6

11110

111110

000000~011111

-31~-16

5

1110

11110

00000~01111

-15~-8

4

110

1110

0000~0111

-7~-4

3

101

110

000~011

-3~-2

2

01

10

00~01

-1

1

00

01

0

0

0

100

00

 

1

1

00

01

1

2~3

2

01

10

10~11

4~7

3

101

110

100~111

8~15

4

110

1110

1000~1111

16~31

5

1110

11110

10000~11111

32~63

6

11110

111110

100000~111111

64~127

7

111110

1111110

1000000~1111111

128~255

8

1111110

11111110

10000000~11111111


 

表12.16  MPEG-1的DCT DC差可变长码字表


第一个DCT系数

这个可选的可变长码字用于非帧内编码块的第一个DCT系数,它的定义如表12.18和12.19所示。


下一个DCT系数

多大63个可选的可变长码字仅存在预I,P和B帧。它们是第一个DCT系数之后的DCT系数,它们的定义如表12.18和12.19所示。


块结束

这个2-比特的值(仅存在于I,P和B帧中)被用来指示不存在额外的非0系数了。这个参数的值是“10”。

 


色度DCT DC大小

码字

色度DCT DC大小

码字

0

00

5

1111 0

1

01

6

1111 10

2

10

7

1111 110

3

110

8

1111 1110

4

1110

 


 

表12.17  MPEG-1的色度DCT DC可变长码字表


系统比特流

系统比特流复合音频和视频比特流到单一码流,由MPEG-1定义了它和控制信息融合到一起的一个特定协议。

包数据可能包含音频或视频信息。多达32个音频和16个视频流可以复合到一起。也支持两种类型的私有数据流。一种类型的是完全私有;另一种被用来支持同步和缓存管理。

最大包大小通常大概是2,048字节,虽然支持更大的尺寸。当存储到CDROM时,包长度正好与扇区匹配。典型地,每6个或7个视频包之间有一个音频包。

图12.6显示了视频比特流,一个包含3层的层次结构。从定到底各层是:

ISO/IEC 11172层

分组

注意,开始码(000001xxH)必须通过在其前面插入0~7个“0”以使它字节对齐。

 

游程

电平

码字

游程

电平

码字

块结束

10

逃逸

0000 01

0(注:2)

1

1 s

0

5

0010 0110 s

0(注:2)

1

11 s

0

6

0010 0001 s

1

1

011 s

1

3

0010 0101 s

0

2

0100 s

3

2

0010 0100 s

2

1

0101 s

10

1

0010 0111 s

0

3

0010 1 s

11

1

0010 0011 s

3

1

0011 1 s

12

1

0010 0010 s

4

1

0011 0 s

13

1

0010 0000 s

1

2

0001 10 s

0

7

0000 0010 10 s

5

1

0001 11 s

1

4

0000 0011 00 s

6

1

0001 01 s

2

3

0000 0010 11 s

7

1

0001 00 s

4

2

0000 0011 11 s

0

4

0000 110 s

5

2

0000 0010 01 s

2

2

0000 100 s

14

1

0000 0011 10 s

8

1

0000 111 s

15

1

0000 0011 01 s

9

1

0000 101s

16

1

0000 0100 00 s

注:

1.s = 电平符号;“0”为正;s = “1”为负。

2.用于第一个DCT系数

3.用于下一个DCT系数

 

表12.18a              MEGE-1的第一个和下一个DCT系数可变长码字表

 


 

游程

电平

码字

游程

电平

码字

0

8

0000 0001 1101 s

0

12

0000 0000 1101 0 s

0

9

0000 0001 1000 s

0

13

0000 0000 1100 1 s

0

10

0000 0001 0011 s

0

14

0000 0000 1100 0 s

0

11

0000 0001 0000 s

0

15

0000 0000 1011 1 s

1

5

0000 0001 1011 s

1

6

0000 0000 1011 0 s

2

4

0000 0001 0100 s

1

7

0000 0000 1010 1 s

3

3

0000 0001 1100 s

2

5

0000 0000 1010 0 s

4

3

0000 0001 0010 s

3

4

0000 0000 1001 1 s

6

2

0000 0001 1110 s

5

3

0000 0000 1001 0 s

7

2

0000 0001 0101 s

9

2

0000 0000 1000 1 s

8

2

0000 0001 0001 s

10

2

0000 0000 1000 0 s

17

1

0000 0001 1111 s

22

1

0000 0000 1111 1 s

18

1

0000 0001 1010 s

23

1

0000 0000 1111 1 s

19

1

0000 0001 1001 s

24

1

0000 0000 1110 1 s

20

1

0000 0001 0111 s

25

1

0000 0000 1110 0 s

21

1

0000 0001 0110 s

26

1

0000 0000 1101 1 s

注:

1.s = 电平符号;“0”为正;s = “1”为负。

 

表12.18b       MEGE-1的第一个和下一个DCT系数可变长码字表

 


 


游程

电平

码字

游程

电平

码字

0

16

0000 0000 0111 11 s

0

40

0000 0000 0010 001 s

0

17

0000 0000 0111 10 s

1

8

0000 0000 0011 111 s

0

18

0000 0000 0111 01 s

1

9

0000 0000 0011 110 s

0

19

0000 0000 0111 00 s

1

10

0000 00000011 101 s

0

20

0000 0000 0110 11 s

1

11

0000 0000 0011 100 s

0

21

0000 0000 0110 10 s

1

12

0000 0000 0011 011 s

0

22

0000 0000 0110 01 s

1

13

0000 0000 0011 010 s

0

23

0000 0000 0110 00 s

1

14

0000 0000 0011 001 s

0

24

0000 0000 0101 11 s

1

15

0000 0000 0001 0011 s

0

25

0000 0000 0101 10 s

1

16

0000 0000 0001 0010 s

0

26

0000 0000 0101 01 s

1

17

0000 0000 0001 0001 s

0

27

0000 0000 0101 00 s

1

18

0000 0000 0001 0000 s

0

28

0000 0000 0100 11 s

6

3

0000 0000 0001 0100 s

0

29

0000 0000 0100 10 s

11

2

0000 0000 0001 1010 s

0

30

0000 0000 0100 01 s

12

2

0000 0000 0001 1001 s

0

31

0000 0000 0100 00 s

13

2

0000 0000 0001 1000 s

0

32

0000 0000 0011 111 s

14

2

0000 0000 0001 0111 s

0

33

0000 0000 0010 111 s

15

2

0000 0000 0001 0110 s

0

34

0000 0000 0010 110 s

16

2

0000 0000 0001 0101 s

0

35

0000 0000 0010 101 s

27

1

0000 0000 0001 1111 s

0

36

0000 0000 0010 100 s

28

1

0000 0000 0001 1110 s

0

37

0000 0000 0010 011 s

29

1

0000 0000 0001 1101 s

0

38

0000 0000 0010 010 s

30

1

0000 0000 0001 1100 s

0

39

0000 0000 0010 001 s

31

1

0000 0000 0001 1011 s


注:

1.s = 电平符号;“0”为正;s = “1”为负。

 

表12.18c              MEGE-1的第一个和下一个DCT系数可变长码字表

 


 


游程

电平

固定长度码字

0

 

0000 00

1

0000 01

2

0000 10

63

1111 11

 

-256

禁止

-255

1000 0000 0000 0001

-254

1000 0000 0000 0010

-129

1000 0000 0111 1111

-128

1000 0000 0000 0000

-126

1000 0001

-127

1000 0010

-2

1111 1110

-1

1111 1111

0

禁止

1

0000 0001

127

0111 1111

128

0000 0000 1000 0000

129

0000 0000 1000 0001

255

0000 0000 1111 1111


 

表12.19  DCT开始和下一个系数的游程,电平跟随一个逃逸码


ISO/IEC 11172
ISO 11172结束码

这个32-比特字段的值是000001B9H,传输一个系统比特流。


包层

每个报数据包括一个包头,跟随一个系统头(可选)和分组数据。层次结构如图12.16所示。

 图12.6    MPEG-1系统比特流层次结构

标志和保留比特没有显示


包开始

这个32-比特字段的值是000001BAH,指示一个包的开始。


固定比特

这些4个比特的值总是“0010”。


系统时钟参考32~30比特

这个系统时钟参考(SCR)是一个33-比特的数使用由标志比特分开的3个字段来编码。

系统时钟参考指示了系统时钟参考字段的最后一个字节输入解码器目标时间。系统时钟参考的值是一个90kHz时钟周期数据。


标志比特

这个比特的值总是为“1”。


系统时钟参考29~15比特
标志比特

这个比特的值总是为“1”。


系统时钟参考14~0比特
标志比特

这个比特的值总是为“1”。


标志比特

这个比特的值总是为“1”。


复用速率

这个22-比特的二进制数指示了解码器接收到的比特流的速率。它指示的单位是50个字节每秒,向上四舍五入。一个0的值是不允许的。


标志比特

这个比特的值总是为“1”。


系统头
系统头开始码

这个32-比特字段的值是000001BBH,指示一个系统头的开始。


头长度

这个16比特的二进制数值指示跟随在头长度 之后的系统头的字节数。


标志比特

这个比特的值总是为“1”。


速率约束

这个22-比特的数指示的一个整数值大于或等于复用速率的最大值。它可能被解码器用来判断有能力解码曾哥比特流。


标志比特

这个比特的值总是为“1”。


音频约束

这是一个6-比特的二进制数,范围是0~32,指示的一个整数值大于或等于同步有效音频流的最大值。


固定标志

这个比特指示固定比特速率(“1”)或可变比特速率(“0”)操作。


CSPS标志

这个比特指定比特流是一个约束系统参数流(“1”)或者不是(“0”)。


系统音频锁定标志

如果音频采样速率和解码器的系统时钟频率有一个固定的关系,那么这个比特的值是“1”。


系统视频锁定标志

如果视频图像速率和解码器的系统时钟频率有一个固定的关系,那么这个比特的值是“1”。


标志比特

这个比特的值总是为“1”。


视频约束

这是一个5-比特的二进制数,范围是0~16,指示的一个整数值大于或等于同步有效视频流的最大值。


保留字节

这些8比特的值通常是“1111 1111”。


ID

这个可选的8比特字段,如表12.20定义,指示紧随其后的STD缓存约束尺度和STD缓存大小约束字段所知的类型和流数目。系统比特流中存在的每个音频和视频流必须在每个系统头中指定一次。

 


流类型

流ID

所有音频流

1011 1000

所有视频流

1011 1001

保留流

1011 1100

私有流1

1011 1101

填充流

1011 1110

私有流2

1011 1111

音频流编号xxxxx

110x xxxx

视频流编号xxxx

1110 xxxx

保留数据流编号xxxx

1111 xxxx


 

表12.20  MPEG-1流ID码字


固定比特

这个可选的2-比特字段的值是“11”。仅当流ID存在时它才存在。


SDT缓存约束尺度

这个可选的1-比特字段指示被用于解释STD缓存大小约束的尺度因子。对于音频流,它的值是“0”。对于视频流,它的值是“1”。对于其它类型的流,它可以是“0”或“1”。仅当系统ID存在时它才存在。


SDT缓存大小约束

这个可选的13-比特二进制数指示一个大于或等于解码器输入最大缓存大小的值。如果STD_buffer_bound_scale =“0”,那么STD_buffer_size_bound以128字节为单位度量。如果STD_buffer_bound_scale =“1”,那么STD_buffer_size_bound以1024字节为单位度量。仅当系统ID存在时它才存在。


分组层
分组开始码前缀

这个24-比特的字段的值是000001H。和跟随它的系统ID一起,它指示分组的开始。


系统ID

这个8-比特的二进制数指示存在的比特流的类型和数目,如表12.20所示。


分组长度

这个16比特的二进制数值指示跟随在分组长度 字段之后的分组的字节数。


填充字节

这个可选的参数的值是“1111 1111”。多达16个连续的填充字节 可以被用来匹配存储介质的需求。仅当流ID 私有流2时它才存在。


STD比特

这些可选的2比特“01”,指示跟随其后的STD_buffer_scale和STD_buffer_size字段。仅当流ID 私有流2时这个字段才可能存在。


STD缓存尺度(STD_buffer_scale)

这个可选的1-比特字段指示被用于解释STD_buffer_size的缩放因子。对于音频流,它的值是“0”。对于视频流,它的值是“1”。对于其它类型的流,它可以是“0”或“1”。仅当STD_bits存在和流ID 私有流2时这个字段才存在。


STD缓存大小(STD_buffer_size)

这个可选的13-比特二进制数指示解码器输入缓存大小。如果STD_buffer_scale =“0”,那么STD_buffer_size以128字节为单位度量。如果STD_buffer_scale =“1”,那么STD_buffer_siz以1024字节为单位度量。仅当STD_bits存在和流ID 私有流2时这个字段才存在。


PTS比特

这个可选的4比特的值是“0010”,并指示后面的引入时间戳(presentation time stamps)存在。仅当流ID 私有流2时这个字段可能才存在。


引入时间戳(presentation time stamps)32~30位

这个可选的引入时间戳(PTS)是一个33-比特数目的码字,使用3个字段,被标志比特分开。PTS指示解码器的目标显示时间。PTS的值是一个90kHz系统时钟周期的倍数。仅当PTS_bits存在和流ID 私有流2时这个字段才存在。


标志位

这个可选的比特的值总是“1”。仅当PTS_bits存在和流ID 私有流2时它才存在。


引入时间戳(presentation time stamps)29~15位

仅当PTS_bits存在和流ID 私有流2时这个可选字段才存在。


标志位

这个可选的比特的值总是“1”。仅当PTS_bits存在和流ID 私有流2时它才存在。


引入时间戳(presentation time stamps)14~0位

仅当PTS_bits存在和流ID 私有流2时这个可选字段才存在。


标志位

这个可选的比特的值总是“1”。仅当PTS_bits存在和流ID 私有流2时它才存在。


DTS

这个可选的4比特的值是“0011”,并指示后面的引入和解码时间戳(presentation and decoding time stamps)存在。仅当流ID 私有流2时这个字段才可能存在。


引入时间戳(presentation time stamps)32~30位

这个可选的引入时间戳(PTS)是一个33-比特数目的码字,使用3个字段,被标志比特分开。PTS指示解码器的目标显示时间。PTS的值是一个90kHz系统时钟周期的倍数。仅当DTS_bits存在和流ID 私有流2时这个字段才存在。


标志位

这个可选的比特的值总是“1”。仅当DTS_bits存在和流ID 私有流2时它才存在。


引入时间戳(presentation time stamps)29~15位

仅当DTS_bits存在和流ID 私有流2时这个可选字段才存在。


标志位

这个可选的比特的值总是“1”。仅当DTS_bits存在和流ID 私有流2时它才存在。


引入时间戳(presentation time stamps)14~0位

仅当DTS_bits存在和流ID 私有流2时这个可选字段才存在。


标志位

这个可选的比特的值总是“1”。仅当DTS_bits存在和流ID 私有流2时它才存在。


固定位

这个可选的4比特的值是“0001”。仅当DTS+bits流ID 私有流2时它才可能存在。


解码时间戳(Decoding_time_stamps)32~30位

这个可选的解码时间戳(DTS)是一个33-比特数目的码字,使用3个字段,被标志比特分开。DTS指示解码器分组开始的第一个访问单位的目标解码时间。DTS的值是一个90kHz系统时钟周期的倍数。仅当DTS_bits存在和流ID 私有流2时它才存在。


标志位

这个可选的比特的值总是“1”。仅当DTS_bits存在和流ID 私有流2时它才存在。


解码时间戳(Decoding_time_stamps)29~15位

仅当DTS_bits存在和流ID 私有流2时这个可选字段才存在。


标志位

这个可选的比特的值总是“1”。仅当DTS_bits存在和流ID 私有流2时它才存在。


解码时间戳(Decoding_time_stamps)14~0位

仅当DTS_bits存在和流ID 私有流2时这个可选字段才存在。


标志位

这个可选的比特的值总是“1”。仅当DTS_bits存在和流ID 私有流2时它才存在。


NonPTS_non_DTS

这个可选的8比特的值是“0000 1111”,如果STD_bits字段,PTS_bits字段或DTS_bits字段(和其它的相关跟随字段)不存在,那么它才存在。


分组数据字节

这个比特流中的[n]字节数据由分组层流ID指示。数据字节的数目可能从分组长度参数来确定。


视频解码

一个系统解复用器解析系统比特流,解复用音频和视频比特流。

视频解码器基本上是处理编码器的反过程。从编码的比特流中,它重建I帧。使用I帧,额外的编码数据和运动向量来重建P帧和B帧。最后将帧以设当的顺序输出。


快速回放的考虑

快进操作可以通过使用D帧或只解码I帧实现。但是,以一个较快的速率仅解码I帧加大了传输介质和解码器的负担。

另外,源可能能够排列所需的I帧,并至传送那些帧,允许保持一个固定的比特率。


暂停模式的考虑

这需要解码器能够控制输入的比特流。如果它不能这样,当恢复回放的地方可能有一个延时或跳帧。


逆回放的考虑

这需要解码器能够前向解码每个图片组,存储它们,以逆向顺序显示它们。为了减少解码器的存储需求,图像组应该小或帧可以被记录。可以通过对发送帧以另一个方向记录或记录编码的图像在解码缓存中来做。


解码后处理

SIF数据通常转换成720×480i或720×576i。建议的超采样滤波器在MPEG-1规范中讨论了。原始解码行对应场1,场2使用内插的行。


现实世界问题
系统比特流发送

一个通常的错误是序列结束码(sequence_end_code)在系统比特流中的不恰当位置。当这发生时,一些解码器可能不知道视频结束的发生,输出垃圾内容。

另一个发生的问题是当系统码流仅通过同时消除尾随帧和移除序列结束码(sequence_end_code)来缩短。在这种情况下,解码器可能不确定在哪里结束。


时间码

由于一些解码器依赖于时间码信息,它应该被使用。为了减少问题,视频码流应该开始预时间码为0,并且每帧增加。


可变比特率

虽然支持可变比特率,但是如果可能,应该使用固定比特率。由于vbv_delay对于可变比特率没有意义,所以MPEG-1标准指示它以最大值发送。

然而,一些解码器的可变比特率使用vbv_delay。这可能在视频开始之前延时2~3秒,导致最初的60~90帧被跳过。


约束比特率

大部分MPEG-1解码器尽可以处理MPEG-1的约束参数子集。为了确保最大的兼容性,只有约束参数自己应该被使用。


源采样时钟

少伪影的好的压缩需要一个视频源生成或使用一个非常稳定的采样时钟。这个确保整个图像采样的垂直对齐被保持。生成的采样时钟差,伪影通常在图像的右侧变得更严重。


参考资料

1. Digital Video Magazine, “Not All MPEGs Are Created Equal,” by John Toebes, Doug Walker, and Paul Kaiser, August 1995.

2. Digital Video Magazine, “Squeeze the Most From MPEG,” by Mark Magel, August 1995.

3. ISO/IEC 11172–1, Coding of moving pictures and associated audio for digital storage media at up to about 1.5 Mbit/s, Part 1: Systems.

4. ISO/IEC 11172–2, Coding of moving pictures and associated audio for digital storage media at up to about 1.5 Mbit/s, Part 2: Video.

5. ISO/IEC 11172–3, Coding of moving pictures and associated audio for digital storage media at up to about 1.5 Mbit/s, Part 3: Audio.

6. ISO/IEC 11172–4, Coding of moving pictures and associated audio for digital storage media at up to about 1.5 Mbit/s, Part 4: Compliance testing.

7. ISO/IEC 11172–5, Coding of moving pictures and associated audio for digital storage media at up to about 1.5 Mbit/s, Part 5: Software simulation.

8. Watkinson, John, The Engineer’s Guide to Compression, Snell and Wilcox Handbook Series.