TS
基础知识
- ES流(Elementary Stream):
基本码流,不分段的音频、视频或其它信息的连续码流。 - PES流(Packeted Elementary Stream):
打包的基本码流,把基本码流(ES)分割成段,并加上头部信息打包而成。 - PS流(Program Stream):
节目流,将具有共同时间基准的一个或多个PES复合并打包而成的单一数据流。PS包的长度不固定。 - TS流(Transport Stream):
传输流,将具有共同时间基准或独立时间基准的一个或多个PES复合而成的单一数据流。TS包的长度固定。
注意:
TS流抵抗传输误码能力强于PS流,因为TS packet是固定长度的.
如果某一TS packet的同步信息被破坏,接收机可在固定位置(ts packet length)检测它后面packet的同步位置,从而恢复同步。
而PS流无法确定下一个PS packet的同步位置,从而造成失步。
TS packet的大小
TS Packet有四种大小:
- 188 bytes:MPEG-2标准大小
- 192 bytes:188 bytes + 4 bytes时间码 --> 日本DVH-S标准
- 204 bytes:188 bytes + 16 bytes前向纠错码(FEC) --> 美国ATSC标准
- 208 bytes:188 bytes + 4 bytes时间码 + 16 bytes前向纠错码(FEC)
TS封装过程
ES封装成TS需要经过两次封装。如下图:
注意:
- 如果一个pes packet打包为多个ts packet,那么同一个pes的ts packet是排在一起的。
- sps和pps的nalu通常是跟I frame nalu封在同一个pes packet里面的。也就是:
PES packet
内部结构
关键栏位
- Packet start code prefix:
–>包头起始码,固定为0x00 00 01,占位24bit,用来作为pes packet的分割符。 - Stream id:
–>PES包中的负载流类型,比如音频流:0xC0 ~ 0xDF,视频流是: 0xE0 ~ 0xEF。一般音频是0xC0,视频是0xE0
注意:packet start code prefix + stream id这四个字节称为pes start code(PES起始码),用以识别pes packet的开始,共4个字节。
那音频start code为:0x 00 00 01 C0,视频start code为:0x 00 00 01 E0<