PES是Packetized Elementary Stream的简称,是将原始ES流打包后形成的,再将PES经过不同的打包方式可以组成MPEG program stream 和 MPEG transport stream,即PS流和TS流。

PES的组成结构如图,包括6个字节的包头字段,加上3个字节基本流信息字段,根据信息字段的设置可在之后附加其他字段。

PES包格式-LMLPHP

PES结构

前三字节是包头起始标识字段,内容为0x000001

第四个字节是流ID字段,不同的流ID有不用的意义,如图,音频流ID范围从0xC0到0xDF,视频流ID范围从0xE0到0xEF。

PES包格式-LMLPHP

PES流ID字段

第五六个字节是PES包长度,表示PES包头部在该字段之后的长度,单位是字节

接下来的第七八九字节是PES的扩展头部字段,用于设置流的基本信息,结构如图

PES包格式-LMLPHP

PES可选扩展

第六字节的高两位是标识位,值为10b

第七字节的高两位是PTS和DTS指示位,00表示无PTS无DTS,01禁止使用,10表示PES头部字段会附加PTS结构

PES包格式-LMLPHP

pts结构

11表示PES头部字段会附加PTS和DTS结构

PES包格式-LMLPHP

pts和dts结构

其中PTS和DTS使用的是90KHZ时钟单位,即1PTS表示1/90000秒,PTS和DTS虽然是33位,但占用了5个字节

ESCR FLAG字段设为1,会在头部附加6个字节的ESCR结构,ES RATE FLAG字段设置为1,会在头部附加3个字节ES rate结构,其他标识位如果设置为1也会相应的在头部附加对应字段。

PES包格式-LMLPHP

ES rate结构

PES包格式-LMLPHP

ESCR结构

05-11 20:07