MPEG2TS的小结 [1]

MPEG2-TS的小结 [1] (2008-07-27 10:23)
分类: DVB相关

1. 简述

MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。

ISO/IEC138181:系统部分;

ISO/IEC138182:视频;

ISO/IEC138183:音频;

ISO/IEC 138184:一致性测试;

ISO/IEC138185:软件部分;

ISO/IEC138186:数字存储媒体命令与控制;

ISO/IEC 138187:高级音频编码;

ISO/IEC138188:系统解码实时接口;

MPEG2系统任务包括:

1. 规定以包传输数据的协议;

2. 规定收发两端数据流同步的协议;

3. 提供多个数据流的复用和解复用协议;

3. 提供数据流加密的协议。

以包形式存储和传送数据流是MPEG2系统之要点。

 

2. ES数据流

ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。PES包由包头和payload组成,具体格式摘录如下:

<!--[if !vml]--><!--[endif]-->

PES层,主要是在PES包头信息中加入PTS(显示时间标签)DTS(解码时间标签)用于视频、音频同步。

其实,Mpeg-2用于视音频同步以及系统时钟恢复的时间标签分别在ESPESTS3个层次中。在ES层,与同步有关的主要是视频缓冲验证VBVVideo Buffer Verifier),用以防止解码器的缓冲器出现上溢或下溢;在PES层,主要是在PES头信息里出现的显示时间标签PTSPresentation Time Stamp)和解码时间标签DTSDecoding Time Stamp);在TS层中,TS头信息包含了节目时钟参考PCRProgram Clock Reference),用于恢复出与编码端一致的系统时序时钟STCSystem Time Clock)。

我们先看看从ESPES的过程:

<!--[if !vml]--><!--[endif]-->

基本流程如下:首先MPEG-2压缩编码得到的ES基本流,这个数据流很大,并且只是IPB的这些视频帧或音频取样信息,然后加入一些同步信息,打包成长度可变长度的数据包PES,原来是流的格式,现在成了数据包的分割形式。同时要注意的是,ES是只包含一种内容的数据流,如只含视频,或只含音频等,打包之后的PES也是只含一种性质的ES,如只含视频ESPES,只含音频ESPES等。可以知道,ES是编码视频数据流或音频数据流,每个ES都由若干个存取单元(AU)组成,每个视频AU或音频AU都是由头部和编码数据两部分组成,1AU相当于编码的1幅视频图像或1个音频帧,也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。PEG-2对视频的压缩产生I帧、P帧、B帧。把帧顺序I1,P4,B2,B3,P7,B5,B6帧的编码ES,通过打包并在每个帧中插入 PTS/DTS标志,变成PES。在插入PTS/DTS标志时,由于在BPTSDTS相等,所以无须在B帧多插入DTS。而对于I P帧,由于经过复用后数据包的顺序会发生变化,显示前一定要存储于视频解码器的从新排序缓存器中,经过从新排序后再显示,所以一定要同时插入PTS DTS作为从新排序的依据。

 

其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。PTS表明显示单元出现在系统目标解码器(STD- System Target Decoder)的时间, DTS表明将存取单元全部字节从STDES解码缓存器移走的时刻。视频编码图像帧次序为 I1,P4,B2,B3,P7,B5,B6,I10,B8,B9ES,加入PTS/DTS后,打包成一个个视频PES包。每个PES包都有一个包头,用于定义PES内的数据内容,提供定时资料。每个IPB帧的包头都有一个PTSDTS,但PTSDTSB帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTSDTS。例如,解码器输入的图像帧次序为I1,P4,B2,B3,P7,B5,B6,I10,B8,B9,依解码器输出的帧次序,应该P4B2B3在先,但显示时P4一定要比B2B3在后,即P4要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1,B2,B3,P4,B5,B6,P7,B8,B9,I10。显然,PTS/DTS标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开始解码或显示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。

 

3. PS数据流

上节说过,ES首先需打包成PES流包,然后PES根据需要打包成PSTS包进行存储或传输。其每路ES只包含一路信源的编码数据流,所以每路PES也只包含相对应信源的数据流。

PS流而言,每个PES包头含有PTSDTS,流识别码,用于区别不同性质ES。然后通过PS复用器将PES包复用成PS包。实际上是将PES 包分解为更细小的PS包。在解码的时候,解复用器将PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ES,最后输入至各自解码器进行解码。一个问题是:各个ES在解码时,如何保证视音频的同步呢?除了PTSDTS的配合工作外,还有一个重要的参数是SCR(system clock reference)。在编码的时候,PTSDTSSCR都是由STC(system time clock)生成的,在解码时,STC会再生,并通过锁相环路(PLLphase lock loop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR调整27MHz的本地时钟频率。最后,PTSDTSSCR一起配合,解决视音频同步播放的问题。PS格式摘录如下:

<!--[if !supportMisalignedColumns]--> <!--[endif]-->

byte 0

byte 1

byte 2

byte 3

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

0000 0000 0000 0000 0000 0001

start code

1011 1010

PACK identifier

 

<!--[if !supportMisalignedColumns]--> <!--[endif]-->

byte 4

byte 5

byte 6

byte 7

byte 8

byte 9

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

01

SCR 32..30

1

SCR 29..15

1

SCR 14..00

1

SCR_ext

1

 

<!--[if !supportMisalignedColumns]--> <!--[endif]-->

byte 10

byte 11

byte 12

byte 13

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Program_Mux_Rate

1

1

reserved

pack_stuffing_length

PS包的长度比较长且可变,主要用于无误码环境里,因为越长的话,同步越困难,且在丢包的情况下,重组也越困难。所以,PS适合于节目信息的编辑和本地内容应用的application

 

4. TS数据流

TS流也是由一个或多个PES组合而来的,他们可以具有相同的时间基准,也可以不同。其基本的复用思想是,对具有相同时间基准的多个PES现进行节目复用,然后再对相互有独立时间基准的各个PS进行传输复用,最终产生出TSTS包由包头和包数据2部分组成,其中包头还可以包括扩展的自适用区。包头长度占4bytes,自使用区和包数据共占184bytes,整个TS包长度相当于4ATM包长。TS包的包头由如下图摘录所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-Packet Identification)、传输加扰控制、自适应区控制和连续计数器8个部分组成。

<!--[if !vml]--><!--[endif]-->

对上面的各个字段简单说明一下:

Partial Transport Stream Packet Format

Name

Number
of bits

Description

sync byte

8

0x47

Transport Error Indicator (TEI)

1

Set by demodulator if can't correct errors in the stream[2]

Payload Unit Start Indicator

1

1 means start of PES data or PSI otherwise zero only .

Transport Priority

1

One means higher priority than other packets with the same PID.

PID

13

Packet ID

Scrambling control

2

'00' = Not scrambled.   The following per DVB spec [3]:   '01' = Reserved for future use,   '10' = Scrambled with even key,   '11' = Scrambled with odd key

Adaptation field exist

1

1 means presence of the adaptation field

Payload data exist

1

1 means presence of data

Continuity counter

4

 

 

 

Note: the total number of bits above is 32 and is called the transport stream 4-byte prefix.

Adaptation field

0 or more

Depends on flags

Payload Data

0 or more

Depends on flags

Adaptation Field Format

Name

Number
of bits

Description

Adaptation Field Length

8

Number of bytes in the adaptation field immediately following this byte

Discontinuity indicator

1

Set to 1 if a discontinuity occurred in the continuity counter of the TS packet

Random Access indicator

1

Set to 1 if the PES packet in this TS packet starts a video/audio sequence

Elementary stream priority indicator

1

1 = higher priority

PCR flag

1

1 means adaptation field does contain a PCR field

OPCR flag

1

 

Splicing point flag

1

1 means presence of splice countdown field in adaptation field

Transport private data flag

1

1 means presence of private data bytes in adaptation field

Adaptation field extension flag

1

1 means presence of adaptation field extension

Below fields are optional

variable

Depends on flags

PCR

33+9

Program clock reference

OPCR

33+9

Original Program clock reference. Helps when one TS is copied into another

Splice countdown

8

Indicates how many TS packets from this one a splicing point occurs (may be negative)

stuffing bytes

variable

 

其中,在包头中:

同步字节(sync byte)的自动相关特性,检测数据流中的包限制,建立包同步;

传输误码指示符(Transport Error Indicator),指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;

有效载荷单元起始指示符(Payload Unit Start Indicator),表示该数据包是否存在确定的起始信息;

传输优先级(Transport Priority),是给TS包分配优先权;PID值是由用户确定的,解码器根据PIDTS上从不同ES来的TS包区别出来,以重建原来的ES

传输加扰控制(Scrambling control),可指示数据包内容是否加扰,但包头和自适应区永远不加扰;

自适应区控制存在字段(Adaptation field exist),用2 bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;

载荷存在标记字段(Payload data exist),1一位着存在载荷;

连续计数器(Continuity counter)可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。

    TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。

 

原文地址:https://www.cnblogs.com/moonvan/p/2221268.html