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

一、引言

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:

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

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

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

三、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的音频流如下:

相关推荐
reasonsummer1 天前
【办公类-117-01】20250924通义万相视频2.5——三个小人(幼儿作品动态化)
人工智能·音视频·通义万相
摸鱼仙人~2 天前
如何高效下载 YouTube 视频?实用工具推荐
音视频
molihuan2 天前
开源 全平台 哔哩哔哩缓存视频合并 Github地址:https://github.com/molihuan/hlbmerge_flutter
android·flutter·缓存·ffmpeg·开源·github·音视频
AI视觉网奇2 天前
pyqt 播放视频遮罩显示 时钟
音视频·pyqt
ulimate_2 天前
树莓派无法播放哔哩哔哩等视频
音视频
DogDaoDao2 天前
DCT与DST变换原理及其在音视频编码中的应用解析
音视频·实时音视频·视频编解码·dct变换·变换编码·dst变换
PythonFun2 天前
从零开始,用WPS和DeepSeek打造数字人科普视频
音视频·wps
Dxy12393102162 天前
python如何通过链接下载保存视频
python·spring·音视频
东风西巷2 天前
K-Lite Mega/FULL Codec Pack(视频解码器)
前端·电脑·音视频·软件需求
爱吃牛肉的大老虎3 天前
FFmpeg和ZLMediaKit 实现本地视频推流
ffmpeg·音视频