MPEG2-TS 结构体
mpeg-ts使用了3层封装(ES > PES > TS)数据。通常我们看到的文件都是若干个 188个以 0x47开头的 ts packet 组成的。如果我们需要拆包es 需要从上到下逐层拆包结构。如果需要封包则刚好相反。
TS
每个 ts packet 由188个字节组成, 这些字节通常为3部分,文件头,适配字段(可能不存在),载荷。因为ts是对pes数据进行封装。通常来说pes的数据肯定是大于188的,这样就有多个ts packet 来进行包含pes数据。
TS Header
4个字节 32位数据包含了8个字段
示例数据 47 41 00 30
01000111 01000001 00000000 00110000
01000111 0 1 0 0000100000000 00 11 0000
| 字节 | 位数 | 描述 |
|---|---|---|
| 1 | 8 | 固定的数据0x47 |
| 2 | 1 | 发送时(调制前)值为0。接收方的解调器在无法成功解调(即使有前向纠错机制)TS分组内容时,将该位设置为1,表示该TS分组损坏 |
| 1 | 负载单元起始标示符,一个完整的数据包开始时标记为1, 表示携带的是PSI或PES第一个包 | |
| 1 | 值为1时,在相同PID的分组中具有更高的优先权。 | |
| 2,3 | 13 | PID用于识别TS分组的ID。一个PID对应一种特定的PSI消息或者一个特定的PES。 |
| 4 | 2 | 值为'00'时表示载荷未加密。其余值由具体系统定义。 |
| 2 | 适配域表示 '00' = 保留 (供未来使用) '01' = 无适配域,仅有载荷 '10' = 仅有适配域 '11' = 适配域和载荷都存在 | |
| 4 | 取值为0x00到0x0F,循环。用于检查同一个PID的TS分组的连续性。每当一个TS分组中包含载荷时,该计数器加1。 |
TS Adaptation (可以不存在)
这个结构体只有在 ts header 适配域 位
1011时候存在。
| 所属字节 | 位数 | 描述 |
|---|---|---|
| 1 | 8 | 适配域长度 不包括当前字节 |
| 2 | 1 | 不连续指示位 |
| 2 | 1 | 如果当前分组是一个PES的起始,取值为1。 |
| 2 | 1 | 取值为1时ES优先级更高。 |
| 2 | 1 | 1表示适配域中有PCR域 |
| 2 | 1 | 1表示适配域中有OPCR域 |
| 2 | 1 | 1表示适配域中有接续倒数计数器域 |
| 2 | 1 | 1表示适配域中有私有数据域 |
| 2 | 1 | 1表示适配域中有适配域扩展域 |
TS Payload (可以不存在)
这个结构体只有在 ts header 适配域 位
0111时候存在。
188 去掉头字段则为载荷
PES
| 所属字节 | 位数 | 描述 |
|---|---|---|
| 1,2,3 | 32 | 0x000001 文件头 |
| 4 | 8 | Audio streams (0xC0-0xDF), Video streams (0xE0-0xEF) |
| 5,6 | 16 | PES Header标志 (标志详情见下 PES Header描述) |
| 7 | 8 | PES header 长度 |
| 7 | 8 | PES header 总长度 |
PES Header
https://dvd.sourceforge.net/dvdinfo/pes-hdr.html
| 字段名称 | 位数 | 描述 |
|---|---|---|
| 标记位 (Marker bits) | 2 | 值为 二进制10 |
| 加扰控制 (Scrambling control) | 2 | 00 表示未加扰 |
| 优先级 (Priority) | 1 | |
| 数据对齐指示 (Data alignment indicator) | 1 | 1 表示 PES 包头紧接着是视频起始码或音频同步字 |
| 版权 (Copyright) | 1 | 1 表示有版权 |
| 原始或副本 (Original or Copy) | 1 | 1 表示原始数据 |
| PTS DTS 指示符 (PTS DTS indicator) | 2 | 11 = 同时存在 PTS 和 DTS,01 是禁止的,10 = 仅有 PTS,00 = 无 PTS 或 DTS |
| ESCR 标志 (ESCR flag) | 1 | |
| ES 速率标志 (ES rate flag) | 1 | |
| DSM 技巧模式标志 (DSM trick mode flag) | 1 | |
| 附加复制信息标志 (Additional copy info flag) | 1 | |
| CRC 标志 (CRC flag) | 1 | |
| 扩展标志 (extension flag) | 1 |