PSI/SI 深入学习
BASIC KNOWLEDGE LEARNING OF PSI/SI
PSI信息
INFORMATION OF PSI
"PSI是对单一TS流的描述,是TS流中的引导信息"
PSI信息由节目关联表PAT、条件接收表CAT、节目映射表PMT和网络信息表NIT组成。这些表会被插入到TS流中。PSI信息是对单一TS流的描述,它是TS流的引导信息;PSI信息指定了如何从一个携带多个节目的传输流中找到指定的节目(见Q1)。
下面给出的是节目引导信息(或称节目特定信息,PSI)的四个表结构。
结构名 |
中文 |
所定义标准 |
PID |
描述 |
PAT |
节目关联表 |
MPEG2标准 |
0x0000 |
将节目号码和节目映射表PID相关联,是获取数据的开始 |
PMT |
节目映射表 |
MPEG2标准 |
在PAT中指出 |
指定一个或多个节目的PID |
CAT |
条件接收表 |
MPEG2标准 |
0x0001 |
将一个或多个专用EMM流分别与唯一的PID相关联 |
NIT |
网络信息表 |
SI标准 |
PAT中指出 |
描述整个网络,如多少个TS流、频点和调制方式等信息 |
虽然这四个结构可以视为简单的表,但事实上,它们被进一步划分为各个段,并插入到TS包中。
PAT解析
PARSINGOF PAT
"PAT是机顶盒接收的入口点,是它获取数据的开始"
节目关联表PAT的意义在于,它描述了当前TS流中包含了哪些PID;只有根据获得的PID,用户才可以以此作为凭据找出其他表(如PMT表)及其信息。所以PAT是机顶盒接收的入口点,是它获取数据的开始;要保证一个TS流能被正常接收,则至少要有一个完整有效的PAT。
下面给出了PID字段的取值要求:
值 |
描述 |
0x0000 |
PAT |
0x0001 |
CAT |
0x0002~0x000F |
保留 |
0x0010~0x1FFE |
可赋给network_PID、Program_map_PID、elementary_PID或作其他用途 |
0x1FFF |
空的分组 |
PAT的表结构分析
ANALYZEOF THE STRUCTUREOF PAT
首先,对PAT的表结构进行分析。下面给出了PAT表的基本结构:
节目关联段
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
program_association_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
"0" 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
transport_stream_id 16 uimsbf 见注释
Reserved 2 bslbf
Version_number 5 uimsbf 见注释
Current_next_indicator 1 bslbf 见注释
Section_number 8 uimsbf 见注释
last_section_number 8 uimsbf 见注释
for(i=0;i program_number 16 uimsbf 见注释 reserved 3 bslbf if(program_number == 0){ network_PID 13 uimsbf 见注释 } else{ program_map_PID 13 uimsbf 见注释 } } CRC_32 32 rpchof 见注释 } 这里我们注意关注五个字段: table_id(赋值):PAT的table_id应为0x00 transport_stream_id(传输流标志):用以标识来源于网络中任何其他复合流的TS流 program_number(节目号):规定program_map_PID可适用的节目。当值为0x0000时,其后的PID参照将是网络PID。它可以作为一个指示符号,例如用于广播通道。 network_PID(网络PID):仅当program_number为0x00时使用 program_map_PID(节目映射PID):据此找出相应的PMT表 PAT的实例分析 ANALYZEOF REAL EXAMPLE OF PAT 借助码流分析仪,我们可以很清楚地以实例的方式更加清晰地了解PAT的结构。下面给出的就是一个TS流的PAT分析情况: 根据上表可以看出,这个TS流里共有6套节目,其映射关系PID分别为0xc9、0xcb、0xce、0xcc、0xcd和0xca。(注:0xc9=201) 下面给出的是PMT的简单解析: 两相比较,可以很清楚地知道,PAT是如何锁定各个PMT的(每个节目都有一个自己的PMT)。
Q1:如何找到一个特定的节目? 1.已知节目名称(或id等信息) P248 首先要从节目关联表PAT中获取这个节目的节目映射表PMT的PID值,再从TS流中找出与此PID值相对应的节目映射表PMT;再从PMT中获取构成这个节目的基本码流的PID值,从而根据该PID过滤出相应的视频、音频和数据等基本码流。最后解码恢复为原始信号。 PMT解析 PARSINGOF PMT "PMT是连接节目号与节目元素的桥梁" 节目映射表PMT的意义在于,它给出了节目号与组成这个节目元素之间的映射;也就是说,PMT是连接节目号与节目元素的桥梁。我们知道,一个电视节目至少包含了视频和音频数据,而每一个节目的视音频数据都是以包的形式在TS流中传输的;所以说,一个TS流包含了多个节目的视频和音频数据包。要想过滤出一个TS流中其中一个节目的视频和音频,则需要知道这个节目中视频和音频的标识号PID。PMT表的作用就在于,它提供了每个节目视频、音频(或其他)数据包的PID。 PMT的表结构分析 ANALYZEOF THE STRUCTUREOF PMT 先给出PMT表的段结构: 这里着重介绍两个字段: elementary_PID:标识了该节目(program_number)携带的基本流的识别号PID stream_type:流类型,指出了PID为elementary_PID的基本流的类型 附:流类型取值说明 取值 描述 0x00 国际标准保留 0x01 视频 0x02 视频或受限参数视频流 0x03 音频 0x04 音频 0x05 private_sections 0x06 包含专用数据的PES分组 0x07 ISO/IEC 13533 MHEG 0x08 0x09 ITU-T Rec.H.222.1 0x0A~0x0D GB/T类型 0x0E GB/T辅助 0x0F~0x7F GB/T保留 0x80~0xFF 用户专用 PMT的实例分析 ANALYZEOF REAL EXAMPLE OF PMT 下面给出了码流分析仪分析一段TS流的PMT表: 首先,注意到这张PMT表的progam_number=0xc9,就是我们在上面解析PAT表得到的。 从上面可以知道,节目号为0xc9(即201)的节目有两个单元流: 流名称 标识号 类型 说明 MPEG2视频 ES PID=0x21 stream_type=0x02 ES PID即为elementary_PID MPEG1音频 ES PID=0x28 stream_type=0x03 ES PID即为elementary_PID elementary_PID和stream_type的意义在于,告知接收机基本流的类型和识别PID。要想获取这个节目的视频,只需要对PID为0x21的数据包进行过滤,并交由视频处理模块处理。下图所示(除了节目名称,还需要SDT表信息)即为PAT和PMT共同获取的信息。 CAT解析 PARSINGOF CAT "CAT描述了节目的加密方式" 条件接收表CAT描述了节目的加密方式,它包含了节目的EMM注1识别PID。它给出了一个或多个CA系统、EMM流以及与CA相关的特定参数之间的关系。 注1:EMM(Entitlement Management Message),即授权管理信息。描述了用户可看的节目或时间段、用户的付费等。 CA描述符既用于规定像EMM这样的系统范围条件接收管理信息,也用于规定像ECM这样的基本流特定信息。 下图给出的PMT表即是基本流加扰的情况,因此PMT表需要有CA描述符: CAT的表结构分析 ANALYZEOF THE STRUCTUREOF CAT 条件存取段 条件存取段主要作用是指示本TS流中存在加扰节目,并且在描述符循环中必须插入CA描述符来作进一步指引。下面给出的是条件接收的描述符 条件接收描述符 CA_system_ID(CA系统ID):指出用于相关ECM及(或)EMM流的CA系统类型。 CA_PID(CA PID):指出包含用于相关CA_system_ID所规定的CA系统的ECM或EMM信息传输流分组的PID(即在TS流中过滤出相应PID的分组)。 下面给出的TS流中并没有CAT: 但在PMT表中有CA描述符: PSI小结 SUMMARYOF PSI 上图给出了在一个TS流中PSI各表之间的联系。首先从PAT表出发,获取当前有哪些节目号(program_map_PID),再根据这些节目号找出program_number相同的PMT;获取到PMT后,即可根据elementary_PID和stream_type来确定要过滤哪些含有基本流的TS包,以及这些包里面是什么类型的数据。这样,机顶盒就可以过滤出相应的节目(视频和音频数据)来收看了。
Syntax (句法结构) No. of bits(所占位数) Identifier(识别符) Note(注释)
program_map_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
"0" 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
program_number 16 uimsbf
Reserved 2 bslbf
Version_number 5 uimsbf 见注释
Current_next_indicator 1 bslbf 见注释
Section_number 8 uimsbf 见注释
last_section_number 8 uimsbf 见注释
reserved 3 bslbf
PCR_PID 13 uimsbf 见注释
reserved 4 bslbf
program_info_length 12 uimsbf 头两位为"00"
for(i=0;i
}
for(i=0;i
reserved 3 bslbf
elementary_PID 13 uimsbf 见注释
reserved 4 bslbf
ES_info_length 12 uimsbf 头两位为"00"
for(j=0;j
}
}
CRC_32 32 rpchof 见注释
}
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
conditional_access_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
"0" 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
reserved 18 bslbf
Version_number 5 uimsbf 见注释
Current_next_indicator 1 bslbf 见注释
Section_number 8 uimsbf 见注释
last_section_number 8 uimsbf 见注释
for(i=0;i
}
CRC_32 32 rpchof 见注释
}Syntax(句法结构) No. of bits(所占位数)Identifier(识别符)
CA_identifier_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
CA_system_ID 16 uimsbf
reserved 3 bslbf
CA_PID 13 uimsbf
for(i=0;i
}}
博主信息