从 PAT 部分 (MPEG-TS) 读取信息

2023-12-12

我正在编写一个 MPEG-TS 文件解析器,但我一直坚持从 PAT 部分获取 program_numbers 和 PID。我正在使用数据包分析器来比较我的结果。

例如,这是一个 PAT 数据包

47 40 00 16 00 00 B0 31 00 14 D7 00 00 00 00 E0
10 00 01 E0 24 00 02 E0 25 00 03 E0 30 00 04 E0
31 00 1A E0 67 00 1C E0 6F 43 9D E3 F1 43 A3 E3
F7 43 AC E4 00 C3 69 A6 D8 FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF 

首先,我开始将分析器的结果与字节进行比较以查看连接。它按以下方式配对字节:[00 10][01 24][02 25][03 30]等。我注意到一个模式(for i = 14; i

我很困惑,我希望有人可以向我解释如何解析上面的示例 PAT。


Each program_number是 16 位,后面是由 3 x '1' 位和 13 位组成的 16 位program_map_pid (or network_pid if程序号`=0)

从转储中的偏移量 13 开始,读取 16 位字对,屏蔽第二个字的前 3 位。

e.g.

offset   bytes          words        program_number pid
======   ===========    =========    ============== ======================
000D:    00 00 E0 10 => 0000 E010 => 0000           0010 (network_pid)
0011:    00 01 E0 24 => 0001 E024 => 0001           0024 (program_map_pid)
0015:    00 02 E0 25 => 0002 E025 => 0002           0025 (program_map_pid)
0019:    etc..
001D:    etc..
0021:    etc..
0025:    00 1C E0 6F => 001C E06F => 001C           006F (program_map_pid)
0029:    43 9D E3 F1 => 439D E3F1 => 439D           03F1 (program_map_pid)
002D:    etc..
etc..

理论上,它比这更复杂,因为 PAT 中可以有多个程序关联部分,而上述内容仅对第 1 部分有帮助。

有关更多详细信息,请参阅 ISO/IEC 13818-1 第 2.4.4.3 节,特别是表 2-25。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 PAT 部分 (MPEG-TS) 读取信息 的相关文章

  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • make_shared<>() 中的 WKWYL 优化是否会给某些多线程应用程序带来惩罚?

    前几天我偶然看到这个非常有趣的演示 http channel9 msdn com Events GoingNative GoingNative 2012 STL11 Magic Secrets作者 Stephan T Lavavej 其中提
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 为什么 std::function 不是有效的模板参数,而函数指针却是?

    我已经定义了名为的类模板CallBackAtInit其唯一目的是在初始化时调用函数 构造函数 该函数在模板参数中指定 问题是模板不接受std function作为参数 但它们接受函数指针 为什么 这是我的代码 include
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • 在 C 中使用 #define 没有任何价值

    If a define没有任何价值地使用 例如 define COMMAND SPI 默认值是0吗 不 它的评估结果为零 从字面上看 该符号被替换为空 然而 一旦你有了 define FOO 预处理器条件 ifdef FOO现在将是真的 另
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 何时使用 std::begin 和 std::end 而不是容器特定版本[重复]

    这个问题在这里已经有答案了 是否有任何一般偏好或规则来解释何时应使用容器特定版本的 begin 和 end 而不是自由函数std begin and std end 据我了解 如果函数是模板 其中容器类型是模板参数 那么std begin
  • 绑定 odeint 变量

    我正在使用 odeint 来模拟一个系统 其中有几个变量不应小于零 是否有适当的方法将 odeint 中的变量绑定到特定范围 在odeint中不存在这种可能性 我想没有算法可以做到这一点 您必须以某种方式对 ODE 中的界限进行编码 如果您
  • excel超链接什么都没有

    我有很多超链接 我想为每个超链接分配一个宏 并且 Worksheet FollowHyperlink 仅捕获插入的超链接 但不捕获 HYPERLINK 函数 所以我希望我插入的超链接不引用任何内容 这样当我按下它们时什么也不会发生 或者我希
  • 如何在 Flask-RESTful 中添加自定义 HTTP 响应头?

    我正在使用 Flask RESTful 并且希望通过向我的响应添加自定义 HTTP 标头来处理某些错误 是否有标准的 Flask 或 Flask RESTful 方法可以做到这一点 结果我跳过了文档的那部分 class Todo3 Reso
  • Kendo Grid 移动到下一个单元格后不保存值

    我尝试修改kendo Grid的InCell编辑模式的行为 我的意思是我尝试使用箭头导航到单元格 但这样做时遇到问题 这是我的代码 grid keydown function e debugger isEditStarted true va
  • 在地图上绘制绕纬度/经度的时间半径

    我正在与gmapsdistanceR 中的包 我有我的 API 密钥 并且我熟悉包中的功能 然而 我想从相反的方向解决一个问题 而不是仅仅找到Time Distance and Status纬度 经度之间是纬度 经度的向量 我想输入一个纬度
  • x86 函数调用类型

    我是x86新手 我的问题是关于函数调用 据我所知 有三种函数调用类型 短调用 0xe8 远调用 0x9a 和近调用 0x 有些将短调用称为相对调用 ip arg cs inv 将远调用称为绝对调用 ip arg cs arg 但近调用又如何
  • 如何使用外部库 JAR 在终端中运行 Java 程序

    这应该很简单 但我以前从未这样做过 也没有找到任何解决方案 我目前正在使用 Eclipse 来编写我的程序 它导入一些外部 JAR 库 例如 google data api 库 我可以使用 Eclipse 来编译 构建 运行该程序 但现在我
  • 在表中打印查询结果

    如果我有一个名为 info 的 MySQL 表 如下所述 并且我想打印出一个 HTML 表 如下所述 我该怎么做 MySQL表中的字段 id subject category actions date status HTML 表格结构 两列
  • 从生成的表中检索数据时对象名称“dbo.TableName”无效

    我首先使用实体 框架代码来创建我的表 请注意 创建表 而不是数据库 因为我正在托管环境中工作 并且没有允许创建数据库的用户 提交数据库更新工作正常 但检索数据会出现异常 异常详细信息 System Data SqlClient SqlExc
  • 无法使用 SMO 枚举 SQL Server 2008 注册服务器

    我的工作站上安装了 SQL Server 2005 Management Studio 此后我安装了 SQL Server 2008 工作站工具并删除了 SQL Server 2005 工具 我现在正在编写一个 C 程序 它会迭代我在 Ma
  • Javascript removeEventListener 不起作用 - 事件侦听器仍然存在

    我已经研究了一些解决这个问题的方法 但我不能真正告诉 我的代码是 lb document body if lb addEventListener lb addEventListener keyup function event keyPre
  • 在文本后添加格式化符号,保留预先存在的文本的字符格式

    我想在单元格中的现有文本后插入红色勾号 或向下箭头 如何插入字符和retain单元格中预先存在的字符格式 我只对这些单元格内的一些单词进行粗体 下划线或着色 通常建议的代码将原始单元格内容的所有自定义字符格式恢复为单元格字体格式 Activ
  • 查找字符串中搜索词的所有索引

    我需要一种快速方法来查找字符串中可能出现的搜索词的所有索引 我尝试过这种 蛮力 String扩展方法 Note makes use of ExSwift extension String var length Int return coun
  • 如何向使用点阵制作的水平图添加线条(abline 不知何故不起作用)?

    我想在水平图上绘制水平线和垂直线 对应于从 74 到 76 的 x 值和从 28 到 32 的 y 值 下面是我的 R 代码 但是当我运行以下命令时 我得到了水平图 但没有线条 我也没有收到来自 R 的错误 我安装的默认主题是将值映射为粉色
  • 单实例批处理文件?

    dostuff bat echo off insert long running process call here End 如果该批处理文件在执行时已经在另一个进程中运行 我可以向该批处理文件添加什么以使其终止 好吧 如果只能有一个实例
  • 需要在单个事务中将数据存储在 SqlAzure 和表存储中。

    我的应用程序有一个场景吗 我需要将历史数据存储在表存储中 将主要数据存储在 Sql Azure 中 即 如果数据发生更新 历史数据应移动到 Azure 表存储 并且新修改的数据应在单个事务中在 Sql Azure 中更新 如果任何一个数据库
  • 与 PHP 共享 Laravel 身份验证/会话

    我正在尝试将 Laravel 身份验证与许多简单的 HTML Javascript 应用程序一起使用 我认为理想的工作方式是这样的 用户访问简单的 HTML 应用程序 这个简单的 HTML 应用程序包含一个 PHP 文件 该文件检查是否 用
  • 如何使用 pack 将一个小部件放在并排的小部件下方?

    我尝试像这样放置小部件 我不明白为什么我的代码不这样做 试图在网上寻找示例 但没有找到解决方案 而且我尝试的任何方法都没有让我更接近所请求的结果 到目前为止 这是我的代码 如果您对代码中的任何内容有任何评论 请随时告诉我 因为这是我第一次尝
  • 从 PAT 部分 (MPEG-TS) 读取信息

    我正在编写一个 MPEG TS 文件解析器 但我一直坚持从 PAT 部分获取 program numbers 和 PID 我正在使用数据包分析器来比较我的结果 例如 这是一个 PAT 数据包 47 40 00 16 00 00 B0 31