TS协议之PAT(节目关联表)

TS协议之PAT(节目关联表)

TS协议之PMT(节目映射表)

TS协议之PES(ES数据包)

文档已上传:文档下载

1. 概要

PAT:节目关联表,与PMT成对出现,包含所有的频道编号;是解析ts数据的起点。

PAT数据结构如下:

PAT数据结构

字段分析:

TS头:参考TS协议之PES(数据包),已做过解释这里不多做解释。

PAT信息体:

字段字段描述
表idPAT设置为0x0
段语法标志位固定位1
0固定为0
保留位固定为0x11(每一位都是1)
分段长度分段长度后面直到CRC字段的长度(不包括分段长度)
传输流id由用户规定。该字段充当标签,标识网络内此传输流有别于任何其他多路复用流
保留位固定为0x11(每一位都是1)
版本号指示符 设置为‘1’时,版本号 必须为当前有效的节目相关表的版本号。指示符 设置为‘0’时,版本号 为下一个有效的节目相关表的版本号。
指示符1:发送的节目相关表为当前有效的。

0:发送的该表尚未有效并且下一个表将生效。
分段号有可能一个PAT描述很多PMT,导致PAT很长,所以PAT可能分为多段传输,第一段为00,以后每个分段加1,最多可能有256个分段
最后一个分段号最后一个分段的号码
节目单该字段是一个容器,该容器内可能有很多个节目
CRC32校验CRC32校验,是对除CRC32字段外PAT所有字段的校验

节目单:

字段字段描述
节目号0:表明这是NIT(网络信息表)非0:这是PMT(节目信息表)
保留位固定为0x11(每一位都是1)
网络信息表与节目信息表只能存在一个,用于标识传输流中一个特定的网络,提供网络相关的信息,如网络识别符、传输参数等;个网络都有一个唯一的network_PID(网络信息表)值。
节目信息表用于指向每个节目的节目映射表(PMT),每个节目都有一个唯一的program_map_PID(节目信息表)值。

2. PAT代码结构

typedef struct TS_PAT_Program
{
 unsigned program_number    :16;   //节目号
 unsigned reserved_3        : 3; // 保留位
 unsigned program_map_PID   :13;   //节目映射表的PID,节目号大于0时对应的PID,每个节目对应一个
}TS_PAT_Program;


typedef struct TS_PAT
{
    unsigned table_id                     : 8; //固定为0x00 ,标志是该表是PAT
    unsigned section_syntax_indicator     : 1; //段语法标志位,固定为1
    unsigned zero                         : 1; //0
    unsigned reserved_1                   : 2; // 保留位
     unsigned section_length               : 12; //表示这个字节后面有用的字节数,包括CRC32
    unsigned transport_stream_id        : 16; //该传输流的ID,区别于一个网络中其它多路复用的流
    unsigned reserved_2                   : 2;// 保留位
    unsigned version_number               : 5; //范围0-31,表示PAT的版本号
    unsigned current_next_indicator       : 1; //发送的PAT是当前有效还是下一个PAT有效
    unsigned section_number               : 8; //分段的号码。PAT可能分为多段传输,第一段为00,以后每个分段加1,最多可能有256个分段
    unsigned last_section_number          : 8;  //最后一个分段的号码
 
    std::vector<TS_PAT_Program> program;    //节目单
    unsigned network_PID                    : 13; //网络信息表(NIT)的PID,节目号为0时对应的PID为network_PID
    unsigned CRC_32                        : 32;  //CRC32校验码
} TS_PAT; 

        上述代码可见节目单字段是一个容器:std::vector program;容器容每个TS_PAT_Program结构对用一个PMT,所以当PMT很多的时候可能超过188个字节,要进行分段;

        在TS传输过程中,就是遍历该容器通过查找program_map_PID字段找到对应的PMT。

        文档已上传:PAT文档下载

        后续会更新更多音视频相关技术,关注一下。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷茫的蜉蝣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值