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

news2024/11/16 12:08:01

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文档下载

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cpp学习——模板

模板&#xff1f; 目录 模板&#xff1f; 1.介绍 2.函数模板的使用 3.函数模板的强制转换or显式调用 四,模板的分类 1.介绍 在Cpp3.0中&#xff0c;祖师爷便引入了模板的概念。这是一个重大的变革&#xff0c;为后来的Cpp标准化打下了铺垫。也正是因为有了模板&#xff0…

centos命令

1 使用 ps 命令查看 Redis 进程&#xff1a; ps -ef | grep redis如果 Redis 正在运行&#xff0c;你将会看到类似如下的输出&#xff1a; redis 1234 1 0 Jul28 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379如果 Redis 没有运行&#xff0c;你将不会看…

【第一阶段】kotlin的when表达式

1.Java 的if /when是语句 kotlin的if/when是表达式&#xff0c;表达式是有返回值的 java中void是个关键字&#xff0c;Unit在kotlin中是个类 2.当使用when语句的时候必须有一个不满足的值即else: fun main() {var week:Int5val info when(week){1->"今天是星期一"…

0803|IO进程线程day6 【线程】概念+相关函数

一、线程的概念 1.1 什么是线程&#xff1f; 1&#xff09;线程是一个进程并发执行多种任务的机制。 并发&#xff1a; 单核cpu多个任务同时运行。cpu以ms级别的速度进程进程调度&#xff0c;切换进程和线程。 串行、并发、并行&#xff1a; 并行&#xff1a;多个任务在多核C…

数据结构—树和二叉树

5.树和二叉树 5.1树和二叉树的定义 树形结构&#xff08;非线性结构&#xff09;&#xff1a;结点之间有分支&#xff0c;具有层次关系。 5.1.1树的定义 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个结点的有限集。 若n0&#xff0c;称为空树&#x…

链表的总体涵盖以及无哨兵位单链表实现——【数据结构】

&#x1f60a;W…Y&#xff1a;个人主页 在学习之前看一下美丽的夕阳&#xff0c;也是很不错的。 如果觉得博主的美景不错&#xff0c;博客也不错的话&#xff0c;关注一下博主吧&#x1f495; 在上一期中&#xff0c;我们说完了顺序表&#xff0c;并且提出顺序表中的问题 1. 中…

C++ ------ 类和对象的深究

文章目录 构造函数初始化列表概念特性 explicit关键字 static成员概念特点 友元友元函数友元类概念特性 内部类概念特点 匿名对象拷贝对象时的一些编译器优化 构造函数 我们来看下面的代码&#xff1a; #include <iostream> using namespace std;class Date { public:D…

三周目创作纪念日

机缘收获日常成就憧憬 机缘 最初成为创作者的初心 实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流 收获 在创作的过程中都有哪些收获 获得了很多粉丝的关注获得了很多正向的反馈&#xff0c;如赞、评论、阅读量等认识了很多志同道合的领域同行 日常 当前创…

【零基础学Rust | 基础系列 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一&#xff0c;创建项目二&#xff0c;两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时&#xff0c;都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中&#xff0c;将会介绍如何在Rust中编写并运…

CSS学习记录(基础笔记)

CSS简介: CSS 指的是层叠样式表* (Cascading Style Sheets)&#xff0c;主要用于设置HTML页面的文字内容&#xff08;字体、大小、对齐方式&#xff09;&#xff0c;图片的外形&#xff08;边框&#xff09; CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素 CSS 节省…

JVM面试题--实践

目录 JVM 调优的参数可以在哪里设置参数值 war包部署在tomcat中设置 jar包部署在启动参数设置 JVM 调优的参数都有哪些&#xff1f; 设置堆空间大小 虚拟机栈的设置 年轻代中Eden区和两个Survivor区的大小比例 年轻代晋升老年代阈值 设置垃圾回收收集器 JVM 调优的工…

《高质量数字化转型产品及服务全景图(2023上半年度)》希尔贝壳成功入选

2023年7月27日&#xff0c;由中国信息通信研究院泰尔终端实验室主办的2023数字生态发展大会暨中国信通院“铸基计划”年中会议在北京成功召开。在本次会上&#xff0c;中国信通院重磅发布《高质量数字化转型产品及服务全景图&#xff08;2023上半年&#xff09;》&#xff0c;希…

MySQL索引1——基本概念与索引结构(B树、R树、Hash等)

目录 索引(INDEX)基本概念 索引结构分类 BTree树索引结构 Hash索引结构 Full-Text索引 R-Tree索引 索引(INDEX)基本概念 什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 为数据库表中的某些列创建索引&#xff0c;就是对数据库表中某些列的值通过不同的数据结…

MVC配置原理

如果你想保存springboot的mvc配置并且还想自己添加自己的配置就用这个。 视图解析器原理&#xff0c;它会从IOC容器里获取配置好视图解析器的配置类里的视图解析器集合&#xff0c; 然后遍历集合&#xff0c;生成一个一个的视图对象&#xff0c;放入候选 视图里&#xff0c;…

【华秋干货铺】PCB布线技巧升级:高速信号篇

如下表所示&#xff0c;接口信号能工作在8Gbps及以上速率&#xff0c;由于速率很高&#xff0c;PCB布线设计要求会更严格&#xff0c;在前几篇关于PCB布线内容的基础上&#xff0c;还需要根据本篇内容的要求来进行PCB布线设计。 高速信号布线时尽量少打孔换层&#xff0c;换层优…

word转pdf两种方式(免费+收费)

一、免费方式 优点&#xff1a;1、免费&#xff1b;2、在众多免费中挑选出的转换效果相对较好&#xff0c;并且不用像openOffice那样安装服务 缺点&#xff1a;1、对字体支持没有很好&#xff0c;需要安装字体库或者使用宋体&#xff08;对宋体支持很好&#xff09;2、对于使…

使用vuex让购物车联动

// 1.vuex点击加减触发函数提交仓库把我们请求的数据存到仓库 2.在仓库定义这个函数和对象 把我们存进去的数据存起来 // 3。在我们需要的页面拿出数据&#xff0c;然后循环就可以 // 4.当我们点击加号就触发函数然后在vuex对这个数据进行处理 // 5.对我们点进来的数据进行一个…

使用自适应去噪在线顺序极限学习机预测飞机发动机剩余使用寿命(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【零基础学Rust | 基础系列 | Rust初相识】Rust简介与环境配置

教程目录 前言一&#xff0c;Rust简介1&#xff0c;Rust的历史2&#xff0c;Rust的特性3&#xff0c;为什么选择Rust4&#xff0c;Rust可以做什么 二&#xff0c; Rust环境配置1&#xff0c;windows11安装2&#xff0c;Linux安装 三&#xff0c;安装IDE 前言 Rust是一种系统编…

无头单链表,有完整测试程序

&#x1f35f;无头单链表 &#x1f47b;无头单链表的所有结点都存储有效信息 &#x1f47b;无头单链表相对带头单链表&#xff0c;在有些涉及更改头节点的函数上需要传二级指针 &#x1f35f;头文件list.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #includ…