音视频入门基础:MPEG2-TS专题(16)——PMT简介

ops/2024/12/15 4:43:16/

一、引言

PMT(Program Map Table)与PAT表成对出现,其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息,从而找到音视频流:

 二、PMT表中的属性

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map section)组成,TS program map section就是组成PMT表的Section(段)。TS program map section包含下图所示部分:

即:

其中,比较重要的属性是:

table_id:占8位,为表id。TS program map section的table_id固定为0x02:

section_syntax_indicator:占1位,为段语法标志位,值必须为1:

section_length:占12位,为该TS program map section从program_number属性开始到该Section结束(包含CRC校验)的总长度,单位为字节。所以section_length的值加3才是该TS program map section的实际总长度:

program_number:占16位,为节目号,TS流中一个频道的唯一标志。跟PAT表的program_number属性对应上:

current_next_indicator:占1位。值为1:发送的TS program map section为当前有效的,值为0:发送的该Section尚未有效并且下一个Section将生效:

PCR_PID:占13位,PCR(节目参考时钟)所在transport packet(TS分组)的PID:

program_info_length:占12位,指定紧跟在program_info_length属性之后的节目描述信息的字节数:

跟在program_info_length属性之后的节目描述信息如下。如果program_info_length的值为0,表示没有节目描述信息:

stream_type:占8位,媒体流的类型,具体流类型参考下面的表格。比如值为0x1B表示是AVC,即H.264视频流;值为0x0F表示是ADTS包装的AAC音频流:

elementary_PID:占13位,该节目的音频或视频PID:

ES_info_length:占12位,ES描述信息的长度,如果值为0表示没有信息:

ES描述信息如下:

三、PMT表实例分析

用Elecard Stream Analyzer工具打开一个TS文件。可以看到其某个PMT表中program_number为1,表示这是一个节目号为“1”的节目:

该节目中有两个媒体流。第一个媒体流stream_type的值为0x1B,表示是H.264视频流,elementary_PID为0x100,所以该节目视频的PID为0x100;第二个媒体流stream_type的值为0x0F,表示是AAC音频流,elementary_PID为0x101,所以该节目音频的PID为0x101;

通过PMT表找到PID为0x100的视频流如下:

通过PMT表找到PID为0x101的音频流如下:


http://www.ppmy.cn/ops/142004.html

相关文章

Environment Modules安装配置

Environment Modules安装配置 Environment Modules是一款用来管理计算机软件环境的软件,通过简单的命令来控制计算机环境变量。本文接受该软件的安装和配置方法 系统: Linux OpenSUSE 15.6 软件版本: modules 5.5 依赖: gcc 7.5…

生产慎用之调试日志对空间矢量数据批量插入的性能影响-以MybatisPlus为例

目录 前言 一、一些缘由 1、性能分析 二、插入方式调整 1、批量插入的实现 2、MP的批量插入实现 3、日志的配置 三、默认处理方式 1、基础程序代码 2、执行情况 四、提升调试日志等级 1、在logback中进行设置 2、提升后的效果 五、总结 前言 在现代软件开发中,性能优…

Python跳动的爱心

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

ESP32-S3模组上跑通ES8388(28)

接前一篇文章:ESP32-S3模组上跑通ES8388(27) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析完了es8388_init函数中的第10段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在components\audio_hal\driver\es8388\es8388.c中,如下: ​…

Linux系统挂载exfat格式U盘教程,触觉智能RK3562开发板演示

本文介绍Linux系统(Ubuntu/Debian通用)挂载exfat格式U盘的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教…

babeltrace与CTF相关学习笔记-2

这里写自定义目录标题 写在前面前面的小结bt_ctf_writer_create 写在前面 事情正在朝着不可控的方向狂奔。。。 系统工师师,其实只有一个任务:将复杂的系统简单化;将乱成一团的分工,明确化;降低每个人面对的复杂度。归…

【报错记录】Ubuntu22.04解决开机卡在 /dev/sda5 : clean , *files , *blocks

一个愿意伫立在巨人肩膀上的农民...... 一、错误现象 本人的电脑安装Windows10和Ubuntu22.04双系统,一次训练中电脑死机无法开机,重启之后便出现如下错误,在网上寻找过很多方法均无效,在root下禁用了samba服务,也无济…

SQL中为什么EXISTS可以替代DISTINCT

引言 在SQL查询中,有时候我们需要从数据中获取唯一的值。传统的做法是使用DISTINCT关键字来去除重复行。然而,在处理大规模数据集时,DISTINCT可能会带来性能问题。本文将探讨为什么在某些情况下,EXISTS可以替代DISTINCT来提高查询…