MPEG-2 数字视频技术参考指南 (5)—— MPEG-2 传输:系统层【非常好】
Posted on 2017-01-11 18:13 bw_0927 阅读(403) 评论(0) 编辑 收藏 举报http://blog.csdn.net/zhubin215130/article/details/8939347
http://blog.csdn.net/zxh821112/article/details/9204257
不同于单个视频或音频的压缩和解压缩,MPEG-2传输流同时负载很多个节目或服务,将视频、音频、数据全部交错在一起。解码器必须能够从传输流中梳理、组织出指定节目或服务的音频、视频和数据,并且知道什么时候显示节目或服务的哪一部分给观众,这也是MPEG-2系统层(SystemLayer)起到关键作用的地方。
系统层定义了传输流的结构,以及MPEG-2压缩数据的传输机制。除了其他功能以外,系统层还为解码器提供了快速同步和错误校正的功能。系统层还定义了一个PSI表(ProgramSpecific Information table),作为媒体内容列表,方便解码器对传输流中的数据进行快速排序和访问。
- 创建一个TS流
MPEG-2传输机制类似于互联网IP协议,负载着被切分成传输数据包(transport packet)的数据,每个传输数据包都包含一个header和payload。接下来的处理过程将会把许多模拟视频信号、音频和数据流封装进一个传输流中。
视频流或音频流被压缩后,就变成了ES流(ElementaryStream)。然后又会被切分为许多变长数据包,形成PES流(PacketizedElementary Stream)。每个变长数据包中包含一个header和一个payload,payload中包含一个视频或音频的帧,header中包含相关的时间信息,告诉解码器何时解码该帧,以及何时显示该帧。如下图所示。
接下来,在编码的过程中,PES流又被再次切分成固定长度的传输数据包,每个数据包长度为188字节。这个包的长度最初定义是为了简化MPEG-2数据包在ATM(异步传输模式)上的映射,ATM中的传输单元是信元(cell),它的负载的大小是47字节(47x4=188)。和PES数据包类似,每个传输数据包也包含一个header和一个payload。
当音频或视频流被切分成传输数据包后,其将被多路复用,或者说是和其他服务的类似打包内容合并在一起。由一个或多个服务组成的多路复用被称作TS流(transport stream)。如图所示。
TS流中的每个数据包,无论负载的是音频、视频、表还是数据,都以一个PID(PacketIdentifier)作为唯一标识,PID使得解码器能够对TS流中的数据包进行分类和整理。
http://www.cnblogs.com/my_life/articles/6273102.html
PES包非定长,音频的PES包小于等于64K,视频的一般为一帧一个PES包。一帧图象的PES包通常要由许多个TS包来传输。MPEG-2中规定,一个PES包必须由整数个TS包来传输。如果承载一个PES包的最后一个TS包没能装满,则用填充字节来填满;当下一个新的PES包形成时,需用新的TS包来开始传输。
- 时序:PCR,PTS和DTS
TS流时序基于编码器的27MHz STC(SystemTime Clock),为了确保解码过程中的同步,解码器时钟必须和编码器的系统时钟锁定。为了实现这种锁定,编码器在TS流中为每个节目插入了一个27MHz的时间戳。
这个时间戳称为PCR(Program Clock Reference),通过PCR,解码器生成一个本地的27MHz时钟,与编码器的STC锁定。
之前介绍过,压缩视频帧通常以非显示顺序传输【压缩/编码后的帧顺序 和 原始的用于显示/展现的帧顺序不同】,即B帧后面的I帧必须在其显示时间到来之前先传给解码器。为了管理这种关键时序流程,需要在每个PES数据包的header里包含两种时间戳:DTS(DecodingTime Stamp)和PTS(Presentation Time Stamp)。DTS定义了应该何时解码该帧,PTS定义了何时显示该帧。如果某帧的DTS比PTS靠前很多的话,该帧则需要先解码好,然后待在buffer里一直等到显示时间的到来。
下图表示了TS流的时序序列。在TS流创建之前,编码器为每个PES数据包里的帧添加PTS和DTS信息,同时会为每个节目添加一个PCR信息。在解码器端,PCR要经过PLL(PhaseLock Loop)算法检查,将解码器时钟与编码器的STC锁定。从而解码器和编码器实现同步,确保了解码器中的数据buffer不会溢出或下溢。
当解码器时钟同步后,解码器依据每帧的DTS时间按序解码,并依据每帧的PTS时间按序显示。
- MPEG-2 PSI Tables
由于观众可能会从一条TS流中选择多个节目,所以解码器必须能够快速的分类和访问不同节目的视频、音频和数据。PSI tables作为TS流的内容列表,为解码器提供了查找每个节目并呈现给观众所需的相关数据,PSI是一组表,包括PAT,CAT, PMT和NIT。
PSI Tables帮助解码器定位TS流中每个节目的音视频数据,以及验证CA权(Conditional Access)。这些表会频繁的重复(大约每秒10次),是为了支持解码器切换频道这种随机访问的需要。下图为PSI Tables的一个基本的概览。
PAT(Program Association Table):用来查找所有节目列表
PAT表是解码器定位节目的第一步,因为它的PID总是0x0000,所以可以很快的定位。和地图册的索引类似,PAT表为解码器提供了TS流中每个节目的map,这个map位于每个节目的PMT表中。
PAT表中列出了所有包含PMT表的数据包的PID值。
PAT表中可能同时还列出那些包含NIT(Network Information Table)表的数据包的PID值,NIT为访问网络上其他TS流提供了支持。PAT表如图所示。
PMT(Program Map Table):用来查找指定节目的音视频信息
PMT表用于查找指定的节目,列出所有包含节目音频、视频和数据组件的数据包的PID值。根据这些信息,解码器能够轻松的定位、解码和显示节目的内容。PMT表如下图所示。
PMT表同时指定了节目的ECM的PID值,ECM为解码器对节目的音视频进行解扰提供了密钥。
CAT(Conditional Access Table):用来从TS流中找到授权包
MPEG-2语法允许广播商以EMM形式在TS流中传输版权限制访问信息。EMM(entitlement management message)为每个订阅者或者订阅者群组更新订阅选择或者收费节目收视权。
CAT表列出所有包含EMM的数据包的PID值,告知解码器从何处查找EMM信息,CAT表如下图所示。CAT表的PID值总是0x0001。
NIT(Network Information Table)
NIT表提供了关于各种TS流所位于的网络的相关信息。这个表是由DVB标准定义的,下一章节将会详细讨论,同样ATSC标准也不在本节讨论。
根据PSI Tables解码:总结
下面的步骤概括了一个解码器显示一个指定节目(本例为Program 1)的流程:
1. 创建PAT表。提取出PID为0x0000的数据包的内容,并构建PAT。
2. 遍历PAT表,查找传输Program 1的PMT的数据包的PID。PAT表明Program 1的PMT PID为0x0065。
3. 提取PID为0x0065的数据包的内容,构建PMT表。
4. 读取Program 1的PMT表,找到其音频、视频数据包的PID值,以及PCR。PMT表明视频数据包的PID为0x0131,德语音轨数据包的PID是0x0132,英语音轨数据包的PID是0x0133。通常情况下,视频数据包的PID通常也携带PCR信息。
5. 在PMT中找到ECM的PID,本例中ECM的PID为0x0150。
6. 定位PID为0x0150的数据包,提取出Program 1的ECM信息。
7. 定位PID为0x0131的数据包,提取出Program 1的视频。
8. 如果用户选择了德语音轨,定位PID为0x0132的数据包,并提取出该音轨。如果用户选择的是英语音轨,则提取PID为0x0133的数据包中的音轨。
9. 使用PID为0x0150的ECM信息,解扰Program 1的视频和音频。
10. 将视频和音频信息拼装成PES流。
11. 使用每个PES数据包header中的PTS和DTS时间戳,确定解码和显示当前数据包的时间。