在数字电视传输系统中,PID(Packet Identifier)是用于标识传输流中不同数据包的关键参数。这个PID值关联了特定的节目或者服务信息,比如视频、音频或字幕等。在给定的代码中,主要涉及到两个核心函数:`Find_PAT` 和 `Find_PMT`,它们分别用于从TS流中提取PAT(Program Association Table)和PMT(Program Map Table)的PID。 1. **PAT(程序关联表)**: - PAT是TS流中的关键组成部分,它包含了所有可用节目的列表以及每个节目对应的PMT PID。 - 在`Find_PAT`函数中,首先打开源文件,然后逐个读取TS包。TS包的结构通常包含一个188字节的基本单元,其中包头的第3个字节的高5位(`p[1] & 0x1f`)与第2个字节组合起来形成PID。 - 当找到PAT包(PID为0)时,解析包内容来获取PMT PID。这包括检查自适应字段控制标志,根据不同的值定位到PAT表实际数据的位置。 - 然后,遍历PAT表,查找对应的节目号,从而得到该节目的PMT PID。 2. **PMT(程序映射表)**: - PMT是每个节目详细信息的表,包括视频、音频、字幕等不同元素的ES( Elementary Stream)PID。 - `Find_PMT`函数的目的是从PMT表中找出视频的PID。输入参数为之前从PAT表中获取的PMT PID。 - 同样地,读取TS流,寻找指定PID的PMT包。解析PMT包,获取节目信息长度、PMT部分长度以及ES信息长度。 - 遍历PMT表,查找流类型标识符为视频的条目(通常0x02表示MPEG-2视频),并返回对应的ES PID,即视频PID。 通过这两个函数,可以有效地从TS流中提取出视频的PID,这对于解码、转码或分析数字电视信号非常有用。在实际应用中,这些功能可能被用于实现自定义的数字电视接收器或者流媒体处理系统。理解TS包的结构和PID的工作原理对于深入理解数字电视广播系统至关重要。
- 粉丝: 1
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助