C++音视频

代码改变世界

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

出处: ISOIEC 13818-1

PS流:

PS流由PSGOP组成,每个PSGOP是由I帧起始的多帧集合,每个GOP之间没有相互依赖信息,可以剪切拼接。

| PSGOP0 | PSGOP1 | PSGOP2 | PSGOP3 | PSGOP4 | ...... |

PSGOP:

PSGOP由一个或多个PS包组成,一个PS包包含一个PSH(PS Header)和若干个PES(Packetized Elementary Stream,ps流数据的基本单位)包,PSGOP的第一个PS包应该在包头PSH后跟一个PSM(program stream map,节目流映射)包。

PS包格式(PSM只有是PSGOP的第一个PS才需要):

| PSH | SystemHeader | PSM | PES0 | PES1 | PES2 | PES3 | PES4 | ...... |

PES包格式:

| PES header | stream raw data |

 

PSH格式:

| pack_start_code(32)  | "01"(2) | 

pack_start_code: 32bit,定义ps流的开始,值为0x000001BA

"01": 2bit,固定为01

system_clock_refference

system header PS流的系统头:

| system_header_start_code(32) | header_length(16) |

system_header_start_code: 32bit 0x000001BB

header_length: 16bit,系统头长度

PES包详细格式:

| packet_start_code_prefix(24) | stream_id(8) | PES_packet_length(16) |  other_info_and_data |

packet_start_code_prefix:24bit ,包起始标记,值固定为0x000001;

stream_id: 8bit

PES_packet_length: 16bit,PES包的长度

other_info_and_data:的值跟stream_id的值相关

 

PS封装H264:

典型的H264 I帧PS包 :     | PSH | SystemHeader | PSM | PES of SPS | PES of PPS | PES of SEI | PES0 of I frameData | PES1 of I frameData | ...... | PESn of I frameData | 

典型的H264 P/B帧PS包 :| PSH | PES0 of P/B frameData | PES1 of P/B frameData | ...... | PESn of P/B frameData |

posted on 2018-09-26 09:28  shunxiang  阅读(1270)  评论(0编辑  收藏  举报