PSI信息解析

/*学习SPI和PI的时候看到一篇博客,内容非常好,只是排序不好,我就改了下*/

 

"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解析

PARSING OF 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的表结构分析

ANALYZE OF THE STRUCTURE OF 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<N;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的实例分析

ANALYZE OF 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解析

PARSING OF PMT

"PMT是连接节目号与节目元素的桥梁"

  节目映射表PMT的意义在于,它给出了节目号与组成这个节目元素之间的映射;也就是说,PMT是连接节目号与节目元素的桥梁。我们知道,一个电视节目至少包含了视频和音频数据,而每一个节目的视音频数据都是以包的形式在TS流中传输的;所以说,一个TS流包含了多个节目的视频和音频数据包。要想过滤出一个TS流中其中一个节目的视频和音频,则需要知道这个节目中视频和音频的标识号PID。PMT表的作用就在于,它提供了每个节目视频、音频(或其他)数据包的PID。

 

PMT的表结构分析

ANALYZE OF THE STRUCTUREOF PMT

 

先给出PMT表的段结构:

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<N;i++){
    descriptor()
}
for(i=0;i<N1;i++){
    stream_type      8        uimsbf      见注释
     reserved        3        bslbf
    elementary_PID     13        uimsbf       见注释
    reserved         4        bslbf
   ES_info_length      12         uimsbf      头两位为"00"
    for(j=0;j<N2;j++){
        descriptor();
    }
}
CRC_32       32             rpchof      见注释
}

这里着重介绍两个字段:

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这样的基本流特定信息。

  • 如果一个基本流(Elementary Stream)是加扰的,那么包含该基本流的节目信息PMT中需要一个CA描述符
  • 如果一个TS流中有任何一个系统范围的条件接收管理信息,则条件接收表中应有CA描述符。

下图给出的PMT表即是基本流加扰的情况,因此PMT表需要有CA描述符:

CAT的表结构分析

ANALYZEOF THE STRUCTUREOF CAT

 

 

 

 

条件存取段

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<N;i++){
    descriptor()
}
CRC_32          32         rpchof        见注释
}

 条件存取段主要作用是指示本TS流中存在加扰节目,并且在描述符循环中必须插入CA描述符来作进一步指引。下面给出的是条件接收的描述符

条件接收描述符

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<N;i++){
private_data_byte         8
}}

 

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描述符:

 

四:NIT解析

PARSINGOF NIT

 

"NIT描述了数字电视网络中与网络相关的信息"

   NIT描述了数字电视网络中与网络相关的信息,但这个表本身的信息有限,更多的信息是依靠插入表中的描述符来提供的。NIT常用的描述符有:网络名称描述符(network_name_descriptor)、有线传送系统(cable_delivery_system_descriptor)、业务列表描述符(service_list_descriptor)和链接描述符(linkage_descriptor)。下图是实际的一个例子中的两种描述符。

 

 

NIT的表结构分析

ANALYZE OF THE STRUCTURE OF NIT

 

        网络信息表(NIT)传递了与通过一个给定的网络传输的复用流/TS流的物理结构相关的信息,以及与网络自身特性相关的信息。

网络信息段

Syntax(句法结构)                No.of bit(所占位数)  Identifier(识别符)   Note(注释)

network_information_section(){
table_id                                                     8                          uimsbf                                        
Section_syntax_indicator                       1                            bslbf             通常设为“1”
Reserved_future_use                              1                          bslbf
Reserved                                                   2                          bslbf
Section_length                                        12                      uimsbf                 见注释
Network_id                                              16                       uimsbf                 见注释
Reserved                                                  2                         bslbf
Version_number                                     5                         uimsbf             见注释
Current_next_indicator                          1                          bslbf                 见注释
Section_number                                     8                          uimsbf            见注释
last_section_number                             8                          uimsbf            见注释
Reserved_future_use                            4                          bslbf
Network_descriptors_length              12                        uimsbf
for(i=0;i<N;i++){
    descriptor()         //First descriptor loop
}
reserved_future_use                               4                     bslbf
transport_stream_loop_length             12                  uimsbf              
for(i=0;i<N;i++){
    transport_stream_id                           16                  uimsbf             见注释
    original_network_id                            16                  uimsbf             见注释
    reserved_future_use                           4                  bslbf
    transport_descriptors_length          12                   uimsbf
    for(j=0;j<N;j++){
        descriptor()        //Second descriptor loop
    }
}
CRC_32                                                 32                  rpchof                  见注释
}

 

在SI标准中规定:original_network_idtransport_stream_id两个标识符相结合唯一确定了网络中的TS流。各网络被分配独立的network_id值作为网络的唯一识别码。当NIT表在生成TS流的网络上传输时,network_idoriginal_network_id将取同一值。

NIT表被切分为网络信息段(network_information_section)

任何NIT的段都必须由PID为0x0010的TS包传输

       现行网络的NIT表任何段的table_id值应为0x40,且具有相同的table_id_extension即(network_id);

   现行网络以外的其他网络NIT表的段table_id值应为0x41

 

注意到这里出现了两个循环,分别成为第一层循环和第二层循环;每层循环都插入了一个描述符,也就是一共插入了两个描述符。这两个描述符的特点如下:

第一层描述符

作用域是针对整个网络的,如插入网络名称描述符、链接描述符等

第二层描述符

作用域是第一层循环所代表的一个TS流,如插入有线传输系统描述符

 

上图提供的即是一个真实的NIT表,红色框内有两个描述符,分别是业务列表描述符service_list_descriptor和有线传输系统描述符cable_delivery_system_descriptor;它们都位于第二层循环。

 

 

 

NIT的业务列表描述符结构分析

ANALYZE OF THE STRUCTURE OF SERVICE_LIST_DESCRIPTOR IN NIT

 

    业务列表描述符通过业务标识符和业务类型提供业务服务。其目的在于:告诉接收机每一个TS流中存在多少个业务以及每一个业务的类型。其结构如下:

业务列表描述符

Syntax(句法结构)    No. of bits(所占位数)Identifier(识别符) 

service_list_descriptor(){

descriptor_tag           8           uimsbf

descriptor_length       8           uimsbf

for(i=0;i<N;i++){

service_id           16            uimsbf

service_type                          8                                 uimsbf

}

}

service_id(业务标识符):唯一标识TS中的一个业务,它与program_map_section中的program_number(参看PMT表结构)相同。但当业务类型为0x04时(即NVOD参考业务,service_id没有对应的program_number)。

service_type(业务类型):指示业务的类型。如0x01为数字电视业务,0x02为数字音频广播业务,0x04为NVOD参考业务,0x05为NVOD时移业务。

HINT:下表给出了业务类型编码方法

service_type

描述

0x00

预留使用

0x01

数字电视业务

0x02

数字音频广播业务

0x03

图文电视业务

0x04

NVOD参考业务

0x05

NVOD时移业务

0x06

马赛克业务

0x07

PAL制编码信号

0x08

SECAM制编码信号

0x09

D/D2-MAC

0x0A

调频广播

0x0B

NTSC制信号

0x0C

数据广播业务

0x0D

公共接口使用预留

0x0E

RCS映射(见EN 301 790)

0x0F

RCS FLS(见EN 301 790)

0x10

DVB  MHP业务

0x11~0x7F

预留使用

0x80~0xFE

用户定义

0xFF

预留使用

 

     上图所示只是其中一个section的业务列表描述符,如果将所有的section全解析,那么此网络中所有TS流包含的所有service_id和service_type都可以获得。这样,用户可以据此了解整个网络业务的构成,并以此为基础对业务进行分类、整合。

 

 

 

NIT的有线传输系统描述符结构分析

ANALYZE OF THE STRUCTURE OF CABLE_DELIVERY_SYSTEM_DESCRIPTOR IN NIT

 

  有线传输系统描述符(Cable_Delivery_System_descriptor)是NIT业务中重要的描述符,也是基本运营所必需的描述符。它主要描述了每一个TS流的物理参数(频率、调制方式、符码率等),使接收机能正确锁频、得到数据。其结构如下:

有线传输系统描述符

Syntax(句法结构)    No. of bits(所占位数)        Identifier(识别符) 

cable_delivery_system_descriptor(){

descriptor_tag             8           uimsbf      

descriptor_length           8           uimsbf      

frequency              32            bslbf

reserved_future_use         12            bslbf

FEC_outer              4             bslbf前向纠错外码

modulation             8             bslbf

symbol_rate             28            bslbf

FEC_inner              4                 bslbf前向纠错内码

 }

Frequency(频率):32位,以8个4位BCD码给出频率。其单位是MHz,小数点位于第四个BCD码之后,如0312.0000MHz。

Modulation(调制方式):指出有线传输系统的调制方式。其定义如下表:

 

 

 

 

调制方式(十六进制)

描述

0x00

未定义

0x01

16 QAM

0x02

32 QAM

0x03

64 QAM

0x04

128 QAM

0x05

256 QAM

0x06~0xFF

预留使用

symbol_rate(符码率):28位,以7个4位BCD码表示符码率。其单位是MSPS(兆符号每秒),小数点位于第三个BCD码后,如027.4500 MSPS

上图所示为一个真实TS流里的一个有线传输系统描述符。可以看到其频率为331.0000MHz,符码率为6.8750MSym/s,调制方式为64 QAM。

 

 

NIT的网络名称描述符结构分析

ANALYZE OF THE STRUCTURE OF NETWORK_NAME_DESCRIPTOR IN NIT

 

   网络名称描述符的功能比较简单,它以字符串的形式将网络的名称告诉接收机。下面是其描述符结构列表:

网络名称描述符

Syntax(句法结构)    No. of bits(所占位数)Identifier(识别符) 

network_name_descriptor(){

descriptor_tag                         8                       uimsbf

descriptor_length                   8                       uimsbf

for(i=0;i<N;i++){

char                                             8                    uimsbf

}

}

char(字符):8位字段,一个字符串,给出NIT表指定的传送系统的名称。


 


 

NIT的链接描述符结构分析

ANALYZE OF THE STRUCTURE OF LINKAGE_DESCRIPTOR IN NIT

 

链接描述符

Syntax(句法结构)    No. of bits(所占位数)Identifier(识别符) 

linkage_descriptor(){

descriptor_tag                         8           uimsbf        

descriptor_length                     8          uimsbf   

transport_stream_id                 16          uimsbf

original_network_id                 16          uimsbf

service_id                                 16           uimsbf

linkage_type                              8              uimsbf

for(i=0;i<N;i++){

   private_data_byte                 8             bslbf

}

 

 如果用户要求得到SI系统描述的特定实体的进一步信息,则可以使用链接描述符。链接描述符包含的信息给出了该实体的位置。如:可以在一个NIT中使用一个链接描述符,给出网络中可存放业务附加信息的位置;或者在BAT表中的链接描述符可链接到业务群的相关信息等。

使用链接描述符,也可以提供一种业务,以替换CA系统的功能。如果CA系统不能处理相应功能的时候,接收机就可以用这个业务来取代CA。

使用链接描述符,还可以以一种备用业务,用以替换主业务。若主业务的运行状态被置为“not_running”,那么,接收机可以自动选择被链接描述符指引的备用业务,以取代该业务。

使用链接描述符,还可以向移动接收机提供漫游功能。若现行业务其service_id下无法使用,IRD可以自动选择该功能。hand-over_type指明link_descriptor是否链接到不同国家的同一业务,或者链接到本地变更业务或关联业务。

总之,链接描述符为运营商提供了一种业务扩充功能,使得运营商可以更加灵活地组合各种业务。

 

NIT的软件下载链接描述符结构分析

ANALYZE OF THE STRUCTURE OF DOWNLOAD_LINKAGE_DESCRIPTOR IN NIT

 

  软件下载描述符用于运营商在网络内进行多于一个机顶盒的软件下载更新标识,在网络信息表NIT的第一个循环内,并且可能多次出现。针对同一组制造商号(manufacturer_id)、硬件类型(hw_model)、硬件版本(hw_version)和软件类型(sw_model),可能有不只一组的不同软件版本(sw_version)和开始时间(start_time)参数,并可能出现在同一个或多个链接描述符(linkage_descriptor)的各个循环内。 

 

PSI小结

SUMMARY OF PSI

  上图给出了在一个TS流中PSI各表之间的联系。首先从PAT表出发,获取当前有哪些节目号(program_map_PID),再根据这些节目号找出program_number相同的PMT;获取到PMT后,即可根据elementary_PID和stream_type来确定要过滤哪些含有基本流的TS包,以及这些包里面是什么类型的数据。这样,机顶盒就可以过滤出相应的节目(视频和音频数据)来收看了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值