MPEG2 Program Stream结构简单介绍

MPEG2 Program Stream,即MPEG2-PS,与MPEG2-TS对应。MPEG2-PS是一种多路复用数字音频、视频等的封装容器。其分为MPEG-1和MPEG-2两部分。Program Stream将一个或多个分组但有共同的时间基准的基本数据流 (PES)合并成一个整体流。它是为可靠稳定的储存媒介如光盘而设计的。据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream)。TS流与PS流的区别在于TS流的包结构是固定长度的,而PS流的包结构是可变长度的。

Program Stream由一个或者多个基本数据流组成,而基本数据流由访问单元(Access Unit)组成。基本数据流的数据保存在PES Packet中。PES Packet由Packet header和Packet data组成。PES Packet又被嵌入到Program Stream packs中。

PES Packet以一个32比特的start code开始,这个start code用于标识该packet属于哪个stream。PES packet header可能包含PTS和DTS,以及其他的fields。

在Program Stream中,PES Packet被组织成packs。一个pack以一个pack header开始,然后是0个或者多个PES Packets。Pack header开始于一个32比特的start code,Pack header用于保存时间和码率信息。

1、Program Stream整体结构

MPEG2 Program Stream结构简单介绍_第1张图片

MPEG_program_end_code:为Program Stream结束标记,比特流为'0000 0000 0000 0000 0000 0001 1011 1001' (0x000001B9)。

2、Program Stream的Pack层结构

MPEG2 Program Stream结构简单介绍_第2张图片

MPEG2 Program Stream结构简单介绍_第3张图片

pack_start_code:标识一个pack的开始,比特流串为'0000 0000 0000 0000 0000 0001 1011 1010' (0x000001BA)。

system_clock_reference_base与system_clock_reference_extension:System Clock Reference(SCR)是一个42比特的field,分为两个部分。第一个部分是system_clock_reference_base,一个33比特的field,由MPEG-1与MPEG-2兼容共用;第二部分是system_clock_reference_extension,一个9比特的field,由MPEG-2单独使用。SCR是为了解决压缩编码图像同步问题产生的。

pack_stuffing_length:表明stuffing_byte的个数。

3、Program Stream System Header结构

MPEG2 Program Stream结构简单介绍_第4张图片

system_header_start_code:标识system header的开始,比特流串为'0000 0000 0000 0000 0000 0001 1011 1011' (0x000001BB)。

4、Program Stream PES Packet结构

MPEG2 Program Stream结构简单介绍_第5张图片

MPEG2 Program Stream结构简单介绍_第6张图片

MPEG2 Program Stream结构简单介绍_第7张图片


MPEG2 Program Stream结构简单介绍_第8张图片

packet_start_code_prefix:packet_start_code_prefix与stream_id一起构成了一个start code,用于标识packet的开始。packet_start_code_prefix的比特流串为'0000 0000 0000 0000 0000 0001' (0x000001)。

PTS_DTS_flags:如果PTS_DTS_flags设置为‘10’,在PES packet header中仅仅包含PTS;如果设置为‘11’,那么在PES packet header中既包含PTS,也包含DTS;如果设置为‘00’,PTS和DTS都不包含。

5、Program Stream Map结构

PSM提供了一个对PS中的基本码流的描述以及他们之间的关系。PSM以PES Packet的形式存在,它的stream_id为0xBC。需要注意一点的是PSM虽然以PES Packet的形式存在,但是他的句法又不同于PES Packet的句法。

MPEG2 Program Stream结构简单介绍_第9张图片

packet_start_code_prefix:packet_start_code_prefix与map_stream_id一起构成了一个start code,用于标识packet的开始。packet_start_code_prefix的比特流串为'0000 0000 0000 0000 0000 0001' (0x000001)。

map_stream_id:固定值为0xBC。

program_stream_map_length:program_stream_map_length表明了在program_stream_map中该field之后的总字节数。该field的最大值为1018(0x3FA)。

program_stream_info_length:program_stream_info_length表明了该field之后的descriptors的总长度。

elementary_stream_map_length:elementary_stream_map_length指明了在该PSM中所有的elementary stream information的总长度,包括stream_type,elementary_stream_id和elementary_stream_info_length这三个fileds。

6、Program Stream Directory Packet结构

MPEG2 Program Stream结构简单介绍_第10张图片

MPEG2 Program Stream结构简单介绍_第11张图片

你可能感兴趣的:(Stream,program,pes,MPEG2PS)