TS协议解析第一部分(PAT)
来源:互联网 发布:阿里云 北京 编辑:程序博客网 时间:2024/05/01 23:43
http://blog.csdn.net/u013354805/article/details/51578457
版权声明:本文为博主原创文章,未经博主允许不得转载。
1. 前言
1.1 工具准备:
ts文件http://download.csdn.net/detail/u013354805/9540190
UltraEdithttp://download.csdn.net/detail/u013354805/9540205
EStreamAnalyzerhttp://download.csdn.net/detail/u013354805/8866107Iso13818-1 规范http://download.csdn.net/detail/u013354805/8865315
1.2 界面:
1) UltraEdit打开ts文件(如果发现打开的是一堆乱请用ctrl +H以16进制打开):
2) EStreamAnalyzer打开TS文件如下:
2. 分析TS包:
传输流包长度必须是188字节,sync_byte必须是0x47。任何有用的数据都不会是FF。
2.1 第一个TS包:
PAT是Program Association Table的简称,即”节目关联表”. PAT定义了当前TS流中所有的节目,其PID恒为0x00,它是PSI信息的根节点,要查找节目必须从PAT表开始.PAT表描述了当前TS流中包含什么样的PID,主要包括当前流的NIT表格的PID,当前流中有多少个不同类型PMT表,每个PMT表对应的频道号等信息.
2.2 TS包头:
TS包头只有4个字节(47 60 00 10),除掉第一个字节0x47,剩下就3个,重新分组如下:
0 1 1 0000000000000 00 01 0000
sync_byte
同步字节
0x47:
transport_error_indicator
传输错误标识
0:
payload_unit_start_indicator
负载单元开始标识
1:该字段用来表示TS包的有效净荷带有PES包或者PSI数据的情况。
当TS包带有PES包数据时,payload_unit_start_indicator具有以下特点:置为1,表示TS包的有效净荷以PES包的第一个字节开始;置为0,表示TS包的开始不是PES包。
当TS包带有PSI数据时,payload_unit_start_indicator具有以下特点:置为1,表示TS包带有PSI部分的第一个字节,即第一个字节带有指针pointer_field;置为0,表示TS包不带有一个PSI部分的第一个字节,即在有效净荷中没有指针pointer_field。
对于空包的包,payload_unit_start_indicator应该置为0。
transport_priority
传输优先级
1:
pid
PID
0x000:即为0,表示PAT
transport_scrambling_control
传输扰乱控制
00:
adaptation_field_control
自适应区域控制
00:是保留值。
01:负载中只有有效载荷。
10:负载中只有自适应字段。
11:先有自适应字段,再有有效载荷。
continuity_counter
连续计数器
0x0:
同步字节
传输错误标识
负载单元开始标识
传输优先级
PID
传输扰乱控制
自适应区域控制
连续计数器
8
1
1
1
13
2
2
4
第1个字节
第2、3个字节
第4个字节
table_id
0x00:对于PAT只能是0x00
section_syntax_indicator
1:应设置为‘1’
0
0:
reserved
11:
section_length
0000 0000 1101:为0xD,13
该字段的头两个比特必为‘00’,剩余10比特指定该分段的字节数,紧随分段长度字段开始,并包括CRC。此字段中,该值应不超过1021(0x3FD)
transport_stream_id
0x00:该字节充当标签,标识网络内此传输流有别于任何其他路复用流。其值由用户规定。
reserved
11:
version_number
00000:一旦PAT有变化,版本号加1
current_next_indicator
1:表示传送的PAT当前可以使用,若为0表示下一个表有效
section_number
0x00:给出了该分段的数目。在PAT中的第一个分段的section_number为0x00,PAT中每一分段将加1。
last_section_number
0x00:该字段指出了最后一个分段号。在整个PAT中即分段的最大数目。
program_number
0x0001:这个为PMT。该字段指出了节目对于那个program_map_PID是可以使用的。如果是0x0000,那么后面的PID是网络PID,否则其他值由用户定义。
reserved
111:
program_map_PID
0 0000 1000 0001:0x81该字段指出TS包中的PID值。table_id
8
第1个字节
section_syntax_indicator
1
第2、3个字节
0
1
reserved
2
section_length
12
transport_stream_id
16
第4、5个字节
reserved
2
第6个字节
version_number
5
current_next_indicator
1
section_number
8
第7个字节
last_section_number
8
第8个字节
循环开始
program_number
16
2个字节
reserved
3
2个字节
network_id(节目号为0时)
program_map_PID(节目号为其他时)
13
循环结束
CRC_32
32
4个字节
3. 实现:
3.1 PAT表格定义如下:
3.3 解析代码如下:
- 顶
- 4
- 踩
- 0
- TS协议解析第一部分(PAT)
- TS协议解析第一部分(PAT)
- TS协议解析第一部分(PAT)
- TS协议解析第二部分(PMT)
- TS协议解析第三部分(PES)
- TS协议解析第二部分(PMT)
- TS协议解析第三部分(PES)
- TS协议解析第四部分(adaptation field)
- TS协议解析第四部分(adaptation field)
- ts流PAT解析
- TS协议解析(adaptation field)
- ts 协议解析
- TS流解析之PAT表格解析(转)
- TS流解析之PAT表格解析(转)
- TS流解析之PAT表格解析
- TS流解析之PAT表格解析
- TS流解析之PAT表格解析
- TS结构解析(详细的PAT和PMT解析代码)
- 设计模式(十二)--组合模式
- 记一次用户登录的过程
- BZOJ2038 [2009国家集训队]小Z的袜子(hose) 莫队
- Charles 从入门到精通
- 享元模式(Flyweight)
- TS协议解析第一部分(PAT)
- Java序列化与反序列化 —— serialVersionUID作用
- 斐波那契数列
- 偏差与方差(Bias and Variance)
- 策略模式(strategy)
- BootStrap学习9---表格
- C标准库——程序员等级
- Android中使用Frecso加载图片,属性设置
- Jquery之Array拓展的remove方法