数字电视PSISI概述.docx
《数字电视PSISI概述.docx》由会员分享,可在线阅读,更多相关《数字电视PSISI概述.docx(19页珍藏版)》请在冰豆网上搜索。
![数字电视PSISI概述.docx](https://file1.bdocx.com/fileroot1/2023-1/22/9bbf2d8d-fb8b-4838-9a99-1384b519a9be/9bbf2d8d-fb8b-4838-9a99-1384b519a9be1.gif)
数字电视PSISI概述
数字电视节目流特定信息(psi)与业务信息(si)概述
Author:
Htccs-chenkl
Email:
chenkl@
Data:
2012-10-18
1缩写(Abbreviation)1
2基本概念2
2.1传输流(TransportStream/TS)2
2.2网络(network)2
2.3业务(service)2
2.4业务群(bouquet)2
2.5事件(event)3
2.6组件(Component)3
2.7PSI/SI3
3PSI/SI表的结构4
3.1table、sub_table和section4
3.2section4
3.2.1section_header5
3.2.2descriptor5
3.2.3table_loop6
4PSI/SI表7
4.1PMT(ProgramMapTable)7
4.2PAT(ProgramAssociationTable)8
4.3CAT(ConditionalAccessTable)8
4.4NIT(NetworkInformationTable)9
4.5SDT(ServiceDescriptionTable)10
4.6EIT(EventInformationTable)10
4.7BAT(BouquetAssociationTable)11
1缩写(Abbreviation)
缩写词
全称
中文意思
MPEG
MotionPictureExpert’sGroup
运动图象专家组
DVB
DigitalVideoBroadcasting
数字视频广播
IRD
IntegratedReceiverDecoder
综合接收解码器
PSI
ProgramSpecificInformation
节目说明信息
SI
ServiceInformation
业务信息
CAT
ConditionalAccessTable
条件接收表
PAT
ProgramAssociationTable
节目关联表
PMT
ProgramMapTable
节目映射表
EIT
EventInformationTable
事件信息表
NIT
NetworkInformationTable
网络信息表
SDT
ServiceDescriptionTable
业务描述表
TDT
TimeandDateTable
时间/日期表
BAT
BouquetAssociationTable
业务群关联表
RST
RunningStatusTable
运行状态表
TOT
TimeOffsetTable
时间偏移表
uimsbf
unsignedintegermostsignificantbitfirst
bslbf
bitstring,leftbitfirst
2
基本概念
2.1传输流(TransportStream/TS)
传输流是MPEGII规范的系统层提出的、对多路节目进行复用的两种方案之一,它主要针对数据在非可靠信道的传输(另一种方案——节目流是针对可靠信道的传输而提出的),比如卫星信道、微波信道或CATV信道。
传输流这种机制可将多路节目复用成一个流,并且,同一节目还可以包含多个视频和音频流。
组成传输流的是一系列连续的数据包,简称TS包。
TS包的长度固定,一般是188字节。
如果在这种TS包的尾部加入16字节的RS纠错码,则包长为204字节。
传输流的形成过程可以用图2.1来说明。
组成节目的视频流和音频流经过基础流编码器之后,形成基本流,每一路视频流或音频流对应一路基本流。
基本流经过打包,形成PES包流。
每一个PES包都有流标识、用于视、音频解码和播放同步的时戳。
PES包和其它的数据、控制信息经过复用器,形成TS包。
每一个TS包都有一个包标识PID,同一基础流对应的TS包,PID的值相同。
TS流就是通过对各个基础流分配不同的PID号来唯一的标识各个不同的基础流、信息表和其它数据。
每一个TS包最多只能包含一路基础流的内容。
图2.1传输流系统框图
为了实现众多编码器与解码器之间的时钟同步,防止解码器的缓冲发生上溢或下溢,在系统流中加入了一个精确的系统级时间参考值,在TS流中,这个值被称为节目参考时钟PCR。
在解码器端,当检测到本地系统时钟和PCR所表征的时钟不一致时,解码器将调整本地系统时钟。
2.2网络(network)
一个传输系统,可以传输一组MPEGII码流。
网络使用network_id来进行标识,不同运营商所运营的网络,对应的network_id不同。
2.3业务(service)
在广播者的控制下,可以按照时间表分步广播的一系列节目。
一个业务可以理解为一个逻辑意义上的频道。
使用service_id来标识一个业务。
同一个传输流中,service_id必须唯一。
2.4业务群(bouquet)
一个业务群是一系列业务的集合。
这些业务可以来自不同的TS流甚至不同的网络。
业务群的概念可以这样来理解:
假设有两个业务提供商PA和PB,PA提供了10套节目,PB提供了20套节目。
但是,对于某一个地域的用户,只希望他们收到PA提供的3套节目和PB提供的5套节目。
此时,可以将这些节目组成一个业务群。
2.5事件(event)
一组属于普通业务的广播数据流,它定义了起始时间和结束时间,一个事件就是一个节目,更确切的说,是一个节目段。
例如:
一场足球比赛的半场,新闻快报,娱乐表演的第一部分。
2.6组件(Component)
组件是组成节目段的一个或多个实体,对应“传输流”概念中的基础流。
以上概念之间的关系如图2.2所示。
图2.2
2.7PSI/SI
在MPEGII标准的系统部分重点描述了MPEGII系统级传输流中包含的PSI信息。
PSI描述了传输流所携带的内容,包含了对构建各节目的基本流的描述和对节目本身的描述。
为了给IRD提供更多的接收和解码所需信息,支持更复杂的应用,DVB又准备了一个开放的服务信息系统(DVB-SI)来辅助DVB信号。
SI可以描述由某一播放者提供的每一个服务的技术特征及其他的信息,通过SI的帮助,用户可以在传输流中选择服务或事件,机顶盒使用SI信息能完成自动配置和自动接收。
所有的PSI/SI信息都以表的形式从中心系统广播下来,表中包含了整个广播网络的物理特征和节目信息,所有这些表在传输时,都将被封装在大小固定的被称为段(section)的数据块中。
3
PSI/SI表的结构
3.1table、sub_table和section
PSI表包括PAT、PMT和CAT,SI表包括NIT、SDT、EIT、BAT、TDT、TOT、RST等。
从结构上来说,这些表都由一个或多个子表组成,而子表又进一步由一个或多个section组成。
section最初是在MPEGII中定义的语法结构,在从PSI表到TS包的转换过程中,section起到了中介的作用。
DVB在扩展PSI为SI的时候,沿用了这种语法结构。
PSISI表的框架如图3.1所示:
图3.1Table、SubTable和Section的结构关系
不同的表之间可以通过表标识(table_id)进行区分,属于同一个table_id的不同子表一般通过表的扩展标识(table_id_extension)、版本号(version_number)进行区分,对于EIT和SDT的子表,还要加上其它的区分条件。
这些用于区分子表的数据段(field)在每一个具体的表中都作了定义。
3.2section
一个比较一般的section结构如图3.2所示。
图3.2section的结构
在section_header部分包含了用于区分子表的“域”(field);section_header之后可能有第一层描述符循环和表循环,一个表循环之中又可能再次包含描述符循环(习惯上称为第二层描述符循环)。
所谓“循环”,就是指相同或类似的数据结构重复出现。
“other_fields”位置处一般会有一个数据段用于指示表循环结构的长度(以字节为单位),“section_tail”处一般是一个32位的CRC校验位。
3.2.1section_header
section_header的语法结构如表3.1所示。
表3.1section_header语法结构
Syntax
No.ofbits
Identifier
Remark
section_header{
table_id
8
uimsbf
section_syntax_indicator
1
bslbf
reserved_future_use
1
bslbf
reserved
2
bslbf
section_length
12
uimsbf
table_id_extension
16
uimsbf
Ifsection_syntax_indicator=1
……
version_number
5
uimsbf
Ifsection_syntax_indicator=1
current_next_indicator
1
bslbf
Ifsection_syntax_indicator=1
section_number
8
uimsbf
Ifsection_syntax_indicator=1
last_section_number
8
uimsbf
Ifsection_syntax_indicator=1
……
}
不同的PSISI表具有不同的table_id,在文档En300468中,有PSISI表和table_id的对应关系。
section_syntax_indicator最早在MPEGII中使用,主要用于“私有数据表”(privatedatatable),其值为0和1的时候,私有数据表的结构不同。
DVB中也使用了section_syntax_indicator,当它的值为1时,section的第四、第五个字节表示table_id_extension,并且从section第43位开始的5位表示子表的版本号(version_number),第48位表示当前表是否有效(current_next_indicator),第7个字节表示当前section在所属子表中的编号(section_number),第8个字节记录子表中section_number的最大值。
section_length表示从section的第四字节开始到section结束的数据区的字节长度。
对于一般的PSISI表,section_length的最大值为1024;对于EIT表,section_length的最大值为4096。
当section_syntax_indicator的值为1时,section的第四、第五字节表示table_id_extension,对于不同的表,table_id_extension的物理意义不同。
PSISI表中有两个表例外,即PSI表中的CAT表和SI表中的ST表。
这两个表都没有table_id_extension,但CAT表的section_syntax_indicator必须是1,ST表的section_syntax_indicator可以为0,也可以为1。
当section_syntax_indicator的值为1时,从section第43位开始的5位表示子表的版本号(version_number)。
version_number的值从零开始,每当子表内容改变时,version_number的值加1。
当version_number增加到31后,再次回归到零。
当section_syntax_indicator的值为1时,section的第48位表示当前表是否有效(current_next_indicator)。
如果current_next_indicator的值为1,表示当前表有效,为0,表示当前表无效,下一个表有效。
3.2.2descriptor
一个descriptor是一个语义上比较完整的语法结构,用于提供特定的信息,比如,network_name_descriptor用于描述一个网络名称,service_descriptor用于描述一个业务的类型、业务提供商的名称和业务名称。
所有的descriptor都以一个8位的标识:
descriptor_tag开使,后面紧跟一个8位的数表示从descriptor的第3个字节开始到descriptor结束的数据区的字节长度。
从descriptor的第3个字节开始到descriptor结束的数据是各个descriptor的具体内容。
如表3.2所示。
表3.2descriptor结构示意
Syntax
No.ofbits
Identifier
PSISI_descriptor(){
descriptor_tag
8
uimsbf
descriptor_length
8
uimsbf
descriptor_content
}
descriptor_tag的值可以从0~255,其中,0、1保留,2~18是PSI中定义的描述符,19~63保留,64~110是SI中定义的描述符,111~127保留,128~254可以定义私有描述符,255禁用。
如图3.3所示。
图3.3descriptor_tagallocation
为了叙述方便,下文将descriptor_tag值在2~18的描述符称为PSI描述符,将descriptor_tag值在64~110的描述符称为SI描述符。
同一个descriptor可能位于不同的PSISI表中,也可能位于同一个PSISI表的第一和(或)第二层描述符序列中。
文档IS13818没有规定PSI描述符在PSI表中可能出现的位置。
可以认为,PSI描述符可以出现在PSI表中的任何位置,只要该描述符对于该PSI表是有特定意义的。
文档En300468的表12描述了SI描述符在PSISI表中可能出现的位置,在文档Etr211中,详细规定了各个SI表中允许出现的SI描述符。
对于某一个特定的SI表,在section中的特定位置,只能出现特定的SI描述符,其它描述符在这个位置出现都是没有意义的。
3.2.3table_loop
table_loop对应于特定的PSISI表,不同PSISI表的table_loop结构上不同,具有不同的含义。
例如,NIT表的table_loop对应特定网络中的传输流,传输流的个数等于NIT中table_loop的个数;SDT表的table_loop对应特定传输流中的业务(service),service的个数等于SDT中table_loop的个数。
图3.4是对本节的总结。
图3.4PSI/SI结构
4PSI/SI表
4.1PMT(ProgramMapTable)
现在回顾一下图2.1,在节目发送端,一个节目(用program_number标识)可以由音频流、视频流组成,视、音频流经过处理,形成TS包之后,对应的TS包便带上了PID信息。
不同的视、音频流对应的PID值不同。
PMT描述了当前TS流中节目的视、音频PES流和PCR的PID,PMT的个数等于当前TS流中节目的个数。
通过PMT,可以从MPEGII传输流中提取指定节目的基本流并予以解码重放。
PMT的语法结构如表4.1所示。
表4.1PMT语法结构
Syntax
No.ofbits
Identifier
program_map_section(){
table_id
8
uimsbf
section_syntax_indicator
1
bslbf
reserved_future_use
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
for(i=0;idescriptor()
}
for(i=0;istream_type
8
uimsbf
reserved
3
bslbf
elementary_PID
13
uimsbf
reserved
4
bslbf
ES_info_length
12
uimsbf
for(j=0;jdescriptor()
}
}
CRC_32
32
rpchof
}
表中的program_number用于标识当前节目,PCR_PID指示带有当前节目PCR信息的TS包的PID,PMT循环结构的个数等于组成该节目的视、音频流的个数,每一个循环结构和组成该节目的一个视频或音频流对应,stream_type说明流的类型,elementary_PID指示带有流数据的TS包的PID。
收到节目的PMT后,可以根据PCR_PID获得PCR,实现接收端和发送端的时钟同步;根据每个表循环中的elementary_PID获得相应基础流的数据,重现节目。
PMT的接收同样是根据PID来实现的,PID的值从下面的PAT中获得。
4.2PAT(ProgramAssociationTable)
PAT表规定使用PID=0的TS包来传送,它列出了所属TS流中所有节目的编号,以及各编号节目所对应的PMT的PID。
根据列出的PID,接收端就可以获得所有的PMT表。
PAT如表4.2所示。
表4.2PAT语法结构
Syntax
No.ofbits
Identifier
program_association_section(){
table_id
8
uimsbf
section_syntax_indicator
1
bslbf
“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;iprogram_number
16
uimsbf
reserved
3
bslbf
if(program_number==0){
network_PID
13
uimsbf
else{
program_map_PID
13
uimsbf
}
}
CRC_32
32
rpchof
}
在PAT的表循环中,一般有一个program_number值为0的循环,该循环中包含了NIT表的PID的信息;其它的循环中都是一个节目对应PMT的PID。
如果要收看的节目属于条件接收节目,接收端还必须提取PSI中的条件接收表,利用其中的信息对被加扰的节目进行解扰。
4.3CAT(ConditionalAccessTable)
CAT表使用PID=0x0001的TS包来传送,其语法结构如表4.3所示。
表4.3CAT表(左)和CA_descriptor(右)的语法结构
Syntax
No.ofbits
Identifier
conditional_access_section(){
section_header
for(i=0;idescriptor()
}
CRC_32
32
rpchof
}
Syntax
No.ofbits
Identifier
CA_descriptor(){
descriptor_tag
8
uimsbf
descriptor_length
8
uimsbf
CA_system_ID
16
uimsbf
reserved
3
bslbf
CA_PID
13
uimsbf
for(i=0;iprivate_data_byte
8
uimsbf
}
}
CAT表的信息在描述符CA_descriptor中,CA_system_ID用于标识CA系统,CA_system_ID的值是统一分配的,在文档ETR162中可以查到;条件接收节目在编码的时候,相应CA系统的EMM(entitledmanagementmessage)或ECM(entitledcontrolmessage)信息也同时通过TS包发出,CA_PID用于指示这些TS包的PID。
一旦某一个CA系统参与了加扰工作,在CAT中就有一个CA_descriptor用于描述该CA系统。
4.4NIT(NetworkInformationTable)
NIT传输与复用器/传输流(TS)的物理结构有关的信息,以及网络本身的特点。
在MPEGII中,NIT属于私有表,传送NIT的TS包的PID可以在0x0010~0x1FFF之间选择,因此,PAT表中专门有一个program_number=0的循环用于指示传送NIT的TS包的PID;在DVB中对NIT作了进一步的定义,并且规定,NIT信息必须使用PID=0x0010的TS包传送,这样,接收NIT时就不需要从PAT中查找其PID,而直接去PID=0x0010的TS包中接收即可。
NIT的语法如表4.4所示。
表4.4NIT语法结构(部分)
Syntax
No.ofbits
Identifier
network_information_s