PS流包格式
1,PS流的基本组成
PS流由很多个PS包组成.
每个PS包由如下组成:
PS header + SYS header(I帧)+PSM header(I帧) +PES header+ PES packet n
如:
不含音频非I帧顺序为:PS header | PES header | h264raw data
含音频顺序如下:PS 包=PS头|PES(video)|PES(audio)
PS包主要由固定包头,系统头,和PES包组成,其具体组成如下图所示:
PS流总是以0x000001BA开始,以0x000001B9结束,对于一个PS文件,有且只有一个结束码0x000001B9,不过对于网传的PS流,则应该是没有结束码的.
1.1 PS header:
PS头最小长度14个字节
pack_start_code字段:起始码,占位32bit,标识PS包的开始,固定为0x000001BA;
program_mux_rate字段:速率值字段,占位22bit,正整数,表示P-STD接收此字段所在包的PS流的速率;这个值以每秒50字节作为单位;禁止0值;
Marker_bit:标记字段,占位1bit,固定为’1’;
Marker_bit:标记字段,占位1bit,固定为’1’;
stuffing_byte:填充字段,固定为0xFF;长度由pack_stuffing_length确定;
1.2 system header
system header 只有关键帧的时候,才会存在
system_header_start_code字段:系统头部起始码,占位32bit,值固定为0x000001BB,标志系统首部的开始;
header_length字段:头部长度字段,占位16bit,表示此字段之后的系统首部字节长度;
SYS头长度18个字节,则header_length=18-4-2=18-6=12
Marker_bit字段:占位1bit,固定值为1;
rate_bound字段:整数值,占位22bit,为一个大于或等于PS流所有PS包中的最大program_mux_rate值的整数;可以被解码器用来判断是否可以对整个流进行解码;
Marker_bit字段:占位1bit,固定值为1