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

news/2025/2/21 7:22:46/

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 ,标志是该表是PATunsigned section_syntax_indicator     : 1; //段语法标志位,固定为1unsigned zero                         : 1; //0unsigned reserved_1                   : 2; // 保留位unsigned section_length               : 12; //表示这个字节后面有用的字节数,包括CRC32unsigned 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_PIDunsigned CRC_32                        : 32;  //CRC32校验码
} TS_PAT; 

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

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

        文档已上传:PAT文档下载

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


http://www.ppmy.cn/news/1002125.html

相关文章

ThreadPoolExecutor详解(上)

为什么会有线程池&#xff1f; 如果客户端发一个请求&#xff0c;服务端就创建一个线程接收请求&#xff0c;线程资源是有限的&#xff0c;而且创建一个线程和执行结束之后都要调用操作系统资源销毁线程&#xff0c;这样频繁操作肯定非常占用cpu和内存资源&#xff0c;线程池的…

Scratch Blocks自定义组件之「下拉图标」

一、背景 由于自带的下拉图标是给水平布局的block使用&#xff0c;放在垂直布局下显得别扭&#xff0c;而且下拉选择后回修改image字段的图片&#xff0c;这让我很不爽&#xff0c;所以在原来的基础上稍作修改&#xff0c;效果如下&#xff1a; 二、使用说明 &#xff08;1&am…

STM32CUBUMX配置RS485 modbus STM32(从机)亲测可用

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…

【iOS】—— 循环引用问题总结

循环引用 文章目录 循环引用1.自循环引用2.相互循环引用3.多循环引用 常见的循环引用问题1.delegate解决方法&#xff1a; 2.block解决方法&#xff1a;1.强弱共舞2.把当前类作为block的参数3.用__block修饰变量&#xff0c;在block内部置nil 3.NSTimer解决方案&#xff1a;1.使…

powershell脚本写一个托盘图标

1、准备ico格式图标 star_bethlehem_icon 文件名改为star.ico 2、安装VSCode 如何下载安装VSCode 扩展&#xff1a;PowerShell扩展 3、创建项目 1、运行PowerShell命令 mkdir trayicon_ps1;cd trayicon_ps1;New-Item trayicon.ps1;code .2、将star.ico放入trayicon_ps1文…

day1-牛客67道剑指offer-JZ4 JZ6 JZ7 JZ9 JZ11 JZ69 JZ70 替换空格 斐波那契数列及其变形 左移/右移运算符

文章目录 1. JZ4 二维数组中的查找暴力法右上角往左下角逼近二分查找-左闭右开区间 2. 替换空格3. JZ6 从尾到头打印链表4. JZ7 重建二叉树思路1哈希加速 5. JZ9 用两个栈实现队列6. JZ11 旋转数组的最小数字常规遍历二分法 7. 斐波那契数列动态规划递归 8. JZ69 跳台阶动态规划…

2023华数杯数学建模C题思路分析 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…

Spring Boot 常见的底层注解剖析

Spring Boot 是一个用于创建独立的、基于Spring框架的Java应用程序的框架。它提供了许多注解&#xff0c;用于配置和定制应用程序的行为。以下是一些常见的Spring Boot底层注解的剖析&#xff1a; 常见的Spring Boot底层注解的剖析 SpringBootApplication&#xff1a;这是一个…