博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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时间戳,确定解码和显示当前数据包的时间。