首页 >> 大全

TS协议之PMT(节目映射表)

2024-01-03 大全 33 作者:考证青年

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

TS协议之PMT(节目映射表)

TS协议之PES(ES数据包) 该文档已上传:文档下载 1.概要

PMT:节目映射表,与PAT成对出现,包含了该节目下所有的节目元素。

PMT数据结构如下:

字段分析:

字段

字段描述

表id

标识一个TS PSI分段的内容是节目关联分段,条件访问分段还是节目映射分段。对于PMT置为0x02。

段语法标志位

固定为1

固定为0

保留位

固定为0x3(每一位都是1)

分段长度

自分段长度字段(不包括分段长度)后直到CRC32字段的字节数,头两位应为00

节目编号

定义的该PMT节目的编号与PAT的节目标号对应上

保留位

固定为0x3

版本号

指示符 设置为‘1’时,版本号 必须为当前有效的节目相关表的版本号。指示符 设置为‘0’时,版本号 为下一个有效的节目相关表的版本号。注:版本号将随着此分段中内容的每一次变化而加1,达到31又回复到0;

指示符

1:发送的节目相关表为当前有效的。

0:发送的该表尚未有效并且下一个表将生效。

分段号

固定值为00

最后一个分段号

固定值为00

保留位

固定位0x7

PID

节目元素的pid值,就是视频流或者音频流的PID值

保留位

0xF

节目描述信息长度

描述信息的长度,头两位应为00,没有描述信息设置为0即可,描述信息紧跟在该字段后面,一般设置为0,表示没有描述信息,视情况而定

节目元素单

媒体流的信息

CRC32

crc校验

节目元素单:

字段

字段描述

流类型

媒体流的类型,具体流类型参考下面的表格

保留位

0x7

元素PID

TS包的PID,通过该PID找到流媒体包

保留位

0xF

ES信息长度

ES描述信息的长度,紧跟在该字段后面,一般设置为0表示没有信息

基本流媒体类型:参考:节目专用信息

0x00

0x01

ISO/IEC 11172-2 (MPEG-1 video)in a

0x02

ITU-T Rec. H.262 and ISO/IEC 13818-2 (MPEG-2 rate video)in a

0x03

ISO/IEC 11172-3 (MPEG-1 audio)in a

0x04

ISO/IEC 13818-3 (MPEG-2 rate audio)in a

0x05

ITU-T Rec. H.222 and ISO/IEC 13818-1 (MPEG-2 data)

0x06

ITU-T Rec. H.222 and ISO/IEC 13818-1 (MPEG-2 data) (i.e., DVB /VBI and AC-3)

0x07

ISO/IEC 13522 (MHEG)in a

0x08

ITU-T Rec. H.222 and ISO/IEC 13818-1DSM CCin a

0x09

ITU-T Rec. H.222 and ISO/IEC 13818-1/11172-1 a

10

0x0A

ISO/IEC 13818-6DSM

11

0x0B

ISO/IEC 13818-6DSM CCU-N

12

0x0C

ISO/IEC 13818-6DSM

13

0x0D

ISO/IEC 13818-6DSM data

14

0x0E

ISO/IEC 13818-1 a

15

0x0F

ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)in a

16

0x10

ISO/IEC 14496-2 (MPEG-4 H.263 based video)in a

17

0x11

ISO/IEC 14496-3 (MPEG-4 LOAS multi- audio)in a

18

0x12

ISO/IEC 14496-1 (MPEG-4 )in a

19

0x13

ISO/IEC 14496-1 (MPEG-4 )in ISO/IEC 14496

20

0x14

ISO/IEC 13818-6DSM

21

0x15

22

0x16

23

0x17

ISO/IEC 13818-6DSM

24

0x18

ISO/IEC 13818-6DSM

25

0x19

ISO/IEC 13818-6

26

0x1A

ISO/IEC 13818-11 IPMP

27

0x1B

ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)in a

28

0x1C

ISO/IEC 14496-3 (MPEG-4 raw audio)in a

29

0x1D

ISO/IEC 14496-17 (MPEG-4 text)in a

30

0x1E

ISO/IEC 23002-3 (MPEG-4 video)in a

31

0x1F

ISO/IEC 14496-10 SVC (MPEG-4 AVC sub-)in a

32

0x20

ISO/IEC 14496-10 MVC (MPEG-4 AVC sub-)in a

33

0x21

ITU-T Rec. T.800 and ISO/IEC 15444 (JPEG 2000 video)in a

34 - 35

0x22 - 0x23

.

36

0x24

ITU-T Rec. H.265 and ISO/IEC 23008-2 (Ultra HD video)in a

37 - 65

0x25 - 0x41

.

66

0x42

Video a

67 - 126

0x43 - 0x7e

.

127

0x7f

ISO/IEC 13818-11 IPMP (DRM)in a

128

0x80

ITU-T Rec. H.262 and ISO/IEC 13818-2 with DES-64-CBC for IIor PCM audio -rayin a

129

0x81

Dolby (AC-3) up to six audio for ATSC -rayin a

130

0x82

audio -rayin a

131

0x83

Dolby audio -rayin a

132

0x84

Dolby Plus( AC-3) up to 16 audio -rayin a

133

0x85

DTS8 audio -rayin a

134

0x86

SCTE-35[5] cue audio -rayin a

135

0x87

Dolby Plus( AC-3) up to 16 audio for a

136 - 143

0x88 - 0x8F

.

144

0x90

Blu- ()in a

145

0x91

table

146 - 191

0x92 - 0xBF

.

192

0xC0

II a

193

TS协议之PMT(节目映射表)__TS协议之PMT(节目映射表)

0xC1

Dolby (AC-3) up to six audio with AES-128-CBC data a

194

0xC2

Dolby Plus up to 16 audio with AES-128-CBC data a

195 - 206

0xC3 - 0xCE

.

207

0xCF

ISO/IEC 13818-7 ADTS AAC with AES-128-CBC frame a

208

0xD0

.

209

0xD1

(Ultra HD video)in a

210

0xD2

Audio Video (Ultra HD video)in a

211

0xD3

Audio Video a

212

0xD4

Audio Video Video (Ultra HD video)in a

213 - 218

0xD5 - 0xDA

.

219

0xDB

ITU-T Rec. H.264 and ISO/IEC 14496-10 with AES-128-CBC slice a

220 - 233

0xDC - 0xE9

.

234

0xEA

Media (lower bit-rate video)in a

235 - 255

0xEB - 0xFF

.

常用的流类型有:H2.64:0x1B; H2.65:0x24; AAC:0xF ,自己测试应该不区分大小写;

2.实例代码

typedef struct TS_PMT_Stream
{unsigned stream_type     : 8; //指示特定PID的节目元素包的类型。该处PID由elementary PID指定unsigned reserved_5      :3;unsigned elementary_PID  : 13; //该域指示TS包的PID值。这些TS包含有相关的节目元素unsigned reserved_6      :4;    unsigned ES_info_length  : 12; //前两位bit为00。该域指示跟随其后的描述相关节目元素的byte数
}TS_PMT_Stream;typedef struct TS_PMT
{unsigned table_id                   : 8; //固定为0x02, 表示PMT表unsigned section_syntax_indicator    : 1; //固定为0x01unsigned zero                       : 1; //0x01unsigned reserved_1                 : 2; //0x03unsigned section_length : 12;//首先两位bit置为00,它指示段的byte数,由段长度域开始,包含CRC unsigned program_number             : 16;// 指出该节目对应于可应用的Program map PIDunsigned reserved_2                 : 2; //0x03unsigned version_number             : 5; //指出TS流中Program map section的版本号unsigned current_next_indicator  : 1; //当该位置1时,当前传送的Program map section可用//当该位置0时,指示当前传送的Program map section不可用,下一个TS流的Program map section有效unsigned section_number            : 8; //固定为0x00unsigned last_section_number      : 8; //固定为0x00unsigned reserved_3               : 3; //0x07unsigned PCR_PID                   : 13; //指明TS包的PID值,该TS包含有PCR域,//该PCR值对应于由节目号指定的对应节目,如果对于私有数据流的节目定义与PCR无关,这个域的值将为0x1FFF。unsigned reserved_4            : 4;  //预留为0x0Funsigned program_info_length  : 12; //前两位bit为00。该域指出跟随其后对节目信息的描述的byte数。std::vector PMT_Stream;  //每个元素包含8位, 指示特定PID的节目元素包的类型。该处PID由elementary PID指定unsigned CRC_32                    : 32; 
} TS_PMT; 

由代码可以看出节目元素表为:std:: ;是一个容器,里面包含了该节目需要的所有媒体流:音频流,视频流,字幕流等。因此一般情况下,一个PMT里面由两个代表两种流(视频流,音频流),通过里的元素PID来获取TS协议中的流媒体数据。

封装代码如下:

TS_PMT set_pmt_pack;TS_PMT_Stream pmt_stream;set_pmt_pack.PMT_Stream.clear();//封装视频流信息pmt_stream.stream_type = 0x1b;pmt_stream.reserved_5 = 0x7;pmt_stream.elementary_PID = 0x100;pmt_stream.reserved_6 = 0xf;pmt_stream.ES_info_length = 0x0;set_pmt_pack.PMT_Stream.push_back(pmt_stream);//封装音频流信息pmt_stream.stream_type = 0xf;pmt_stream.reserved_5 = 0x7;pmt_stream.elementary_PID = 0x101;pmt_stream.reserved_6 = 0xf;pmt_stream.ES_info_length = 0x0;set_pmt_pack.PMT_Stream.push_back(pmt_stream);pat_pack.MakeTable(crc32Table);//生成crc32表set_pmt_pack.table_id = 0x2;set_pmt_pack.section_syntax_indicator = 0x1;set_pmt_pack.zero = 0x0;set_pmt_pack.reserved_1 = 0x3;set_pmt_pack.section_length = (0xd+set_pmt_pack.PMT_Stream.size()*5);set_pmt_pack.program_number = 0x0001;//频道号,表示当前的PMT关联到得频道set_pmt_pack.reserved_2 = 0x3;set_pmt_pack.version_number = 0;set_pmt_pack.current_next_indicator = 0x1;set_pmt_pack.section_number = 0;set_pmt_pack.last_section_number = 0;set_pmt_pack.reserved_3 = 0x7;set_pmt_pack.PCR_PID = 0x100;set_pmt_pack.reserved_4 = 0xf;set_pmt_pack.program_info_length = 0x0;

3. 扩展

上述代码都是不带节目描述信息和ES描述信息的,如果想带描述信息,按照官网资料如下:

:节目描述信息长度,描述信息就跟在该字段后面;

:ES描述信息长度,描述信息就跟在该字段后面;

下面看一下官网定义的描述信息结构:

描述类型:

视频流描述信息:

字段分析:

字段

字段描述

描述类型,参考图I-2-39

描述字节个数

flag

1bit,为1标识视频流可能出现多种帧速率,为0表示只有一种帧速率

4bit,除在flag为1时所指示的特殊帧率外,也可以在视频流中出现一些其他帧率

ag

1bit;0:视频流中含有H2.62或ISO 13818数据,1:视频流只含有ISO 11172-2数据

= 1:表示视频流仅包含静止图片。

= 0:表示视频流可能包含运动或静止图像数据。

指明和leve

采样格式,比如01表示4:2:0。

_flag

_flag = 1时在 ITU-T Rec. H.262 | ISO/IEC 13818-2视屏流中,_n、_d都是非零值

无论_flag为何值ISO/IEC 11172-2视频流的两个字段均设置为零。

保留位,固定为11111(每一位都是1,占5 bit所以是11111)。

音频流描述信息:

字段分析:

字段

字段分析

描述类型,参考图I-2-39

描述字节个数

= 1:表示音频流可能包含一个或多个设置为“0000”的音频帧。

= 0:则在音频流的任何音频帧中,都不是“0000”(参考ISO/IEC 13818-3的2.4.2.3)。

ID

ID = 1:表示在音频流中的每个音频帧中ID字段设置为“0”(参见ISO/IEC 13818-3的2.4.2.3)。

layer

与层字段相同的方式编码。此字段中指示的层应等于或高于音频流的任何音频帧中指定的最高层。

= 0:表示比特率字段的编码值在连续音频帧中不应改变,该连续音频帧旨在无中断地呈现。

保留位,固定为111(每一位都是1,占3 bit所以是111)。

N,N1,N2官网并未说明,个人认为:

一般情况下,N和N1是相等的,都等于媒体流的数量,假如该PMT中含有音频流,视频流,字幕流三种流的PID,则N和N1就等于3;而N中的()就包含了音频流,视频流,字幕流三种流的描述。

而N2是在N1内部,只能代表一种媒体流,要么音频,要么视频,所以N2一般情况下为1.

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了