PSI/SI资料快查

资料入口

这里是PSI/SI相关资料的主入口, 你有任何需要查询的资料,都可以从这里开始寻找...



本资料集由 林晓州 收集和整理,并提供共享。
邮箱: 1139904786@qq.com
网址: http://www.onelib.biz




©2016 · OneLib智库 · 分享知识和经验,打造精品智库平台

PSI/SI表结构分析

解析PSI/SI里的各表结构

本章主要针对PSI/SI里的PAT、PMT、CAT、NIT以及SDT、EIT、TDT、TOT、BAT等表的结构进行解析。 本资料主要参考了European Standard提供的英文文档《En300468.V1.7.1_Specification for SI in DVB Systems》 和国家广播电影电视总局提供的中文文档《数字视频广播中文业务信息规范》。

本章中,每小节的结构:概述该表,列举该表的PID、存储信息的段table_id, 之后会给出表结构、存在的描述子,描述子不在此展开分析,需要查看的话可点开链接进入描述子专项资料页面, 最后会给出一个或多个实际案例来分析各表。

PAT表解析

Parse PAT(Program Association Table)

"PAT是机顶盒接收的入口点,是它获取数据的开始"
PAT表主要提供Program和PID之间的对应关系。
PID = 0x0000
table_id = 0x00

PAT表结构

下表是PAT结构:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
program_association_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
"0"1bslbfzero
Reserved2bslbf保留
Section_length12uimsbf注释
transport_stream_id16uimsbf注释
Reserved2bslbf保留
Version_number5uimsbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
for(i=0;i<N;i++){
program_number16uimsbf注释
reserved3bslbf保留
if(program_number == 0){
network_PID13uimsbf注释
}
else{
program_map_PID13uimsbf注释
}
}
CRC_3232rpchof注释
}

这里我们注意关注五个字段:

  • 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表实例

在下图中,我们可以看到PAT表携带的基本信息。

PAT表一览

首先,table_id=0x0。网络信息表的PID为0x10。网络中有四路节目,并给出了每个节目的program_number以及每个节目的PMT PID。 在解析完PAT表后,就可以根据这里得到的四个PMT PID去过滤对应PID号的PMT表,从而得到每个节目的更详细信息。

PMT表解析

Parse PMT(Program Map Table)

"PMT是连接节目号与节目元素的桥梁"
PMT表主要提供节目numbers和节目elements之间的映射关系。
PID = 值由编码器选择
table_id = 0x02

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


PMT表结构

下表是PMT结构:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
program_map_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
"0"1bslbfzero
Reserved2bslbf保留
Section_length12uimsbf注释
program_number16uimsbf节目号,与service_id对应
Reserved2bslbf保留
Version_number5bslbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
reserved3bslbf保留
PCR_PID13uimsbf注释
reserved4bslbf保留
program_info_length12uimsbf头两位为“00”
for(i=0;i<N;i++){
descriptor()
}
for(i=0;i<N1;i++){
stream_type8uimsbf注释
reserved3bslbf保留
elementary_PID13uimsbf注释
reserved4bslbf保留
ES_info_length12uimsbf头两位为"00"
for(i=0;i<N2;i++){
descriptor()
}
}
CRC_3232rpchof注释
}

注意到,PMT表中有两个地方有Descriptor():


PMT表实例

在下图中,我们可以看到PMT表携带的基本信息。一共有四个section,是四张PMT表的信息;其中,每个section存储在一个PMT表中,对应了一个节目的信息。 下面,我们以节目号为16398的节目为例进行分析。

PMT表一览

下图可以看到,一共有3个单元流,每一个单元流都是组成这个节目的一个 元素(或者说是分量)。 可以看到,这个节目包含一个MPEG2的视频(stream_type=0x02)、一个MPEG2的音频(stream_type=0x04)以及一个私有类型(stream_type=0x06)的数据

节目号为16398的节目

下表是stream_type值的规定:

stream_type描述
0x00ITU-T | ISO/IEC Reserved,国际标准保留
0x01ISO/IEC 11172 Video,视频
0x02ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream,视频或受限参数视频流
0x03ISO/IEC 11172 Audio,音频
0x04ISO/IEC 13818-3 Audio,音频
0x05ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private_sections
0x06ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data,包含专用数据的PES分组
0x07ISO/IEC 13522 MHEG
0x08ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Annex A DSM CC
0x09ITU-T Rec.H.222.1
0x0AISO/IEC 13818-6 type A
0x0BISO/IEC 13818-6 type B
0x0CISO/IEC 13818-6 type C
0x0DISO/IEC 13818-6 type D
0x0EISO/IEC 13818-1 auxiliary
0x0F - 0x7FITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved,GB/T保留
0x80 - 0xFFUser Private,用户专用

该节目的单元流2是音频分量的信息,可以看出,该音频语言为“deu”,即德语;其audio_type=0x1。 单元流3是Teletext分类,其语言编码也是“deu”,teletext_type=0x1。下面给出了teletext_type值的规定:

teletext_type描述
0x00保留
0x01initial Teletext page
0x02Teletext subtitle page
0x03additional information page
0x04programme schedule page
0x05Teletext subtitle page for hearing impaired people,听障人士Teletext字幕
0x06 - 0x1F保留
节目号为16398的节目的单元流2和单元流3

CAT表解析

Parse CAT(Program Map Table)

"CAT描述了节目的加密方式"
CAT表主要提供关于Bouquet的信息,Bouquet是一个services的集合。
PID = 0x0001
table_id = 0x01

条件接收表CAT描述了节目的加密方式,它包含了节目的 EMM 识别PID。 它给出了一个或多个CA系统、EMM流以及与CA相关的特定参数之间的关系。

CA描述符既用于规定像EMM这样的系统范围条件接收管理信息,也用于规定像ECM这样的基本流特定信息。

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


CAT表的结构分析

下表是CAT结构:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
conditional_access_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
"0"1bslbfzero
Reserved2bslbf保留
Section_length12uimsbf注释
Reserved18bslbf保留
Version_number5uimsbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
for(i=0;i<N;i++){
descriptor()
}
CRC_3232rpchof注释
}

CAT表的描述子

注意到,CAT表中有一个Descriptor():


CAT表实例

下图是一个CAT表的实例:

CAT表一览

NIT表解析

Parse NIT(Network Information Table)

"NIT描述了数字电视网络中与网络相关的信息"
NIT表主要提供物理网络本身的一些信息。
PID = 0x0010
table_id = 0x40 (discribe actual newwork)
table_id = 0x41 (discribe not actual newwork)

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

网络信息表NIT(见表3)传递了与通过一个给定的网络传输的复用流/TS流的物理结构相关的信息,以及与网络自身特性相关的信息。在本标准应用的范围内,original_network_id 和 transport_stream_id 两个标识符相结合唯一确定了网络中的TS流。各网络被分配独立的 network_id值作为网络的唯一识别码。这些码字的分配见ETR 162。当NIT表在生成TS流的网络上传输时,network_id和original_network_id将取同一值。

传输媒体边界间转换的业务信息处理指南见ETR 211。例如:从卫星系统到有线电视系统或SMATV(卫星公共天线电视)系统。

当转换频道时,为了使存取时间最小,IRD可以在非易失性存储器上存储NIT表信息。除现行网络外,也可以为其他网络传输NIT表信息。现行网络的NIT表与其他网络的NIT表使用不同的table_id值来区分(见表2)


NIT表的结构分析

NIT表被切分成网络信息段(network_information_section)。任何构成NIT表的段,都要由PID为0x0010的TS包传输。描述现行网络(即包含NIT表的TS所在的网络)的NIT表的任何段的table_id值应为0x40,且具有相同的 table_id_extension (network_id)。现行网络的network_id字段的值的分配见ETR 162。指向一个现行网络之外的其它网络的NIT表的任何段的table_id值应取0x41,network_id字段的值的分配见ETR 162。

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

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
network_information_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
Reserved_future_use1bslbf预留使用
Reserved2bslbf保留
Section_length12uimsbf注释
Network_id16uimsbf注释
Reserved2bslbf保留
Version_number5uimsbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
Reserved_future_use4bslbf预留使用
Network_descriptors_length12uimsbf网络描述符长度
for(i=0;i<N;i++){
descriptor()First descriptor loop
}
reserved_future_use4bslbf-
transport_stream_loop_length12uimsbf传输流循环长度
for(i=0;i<N;i++){
transport_stream_id16uimsbf注释
original_network_id16uimsbf注释
reserved_future_use4bslbf预留使用
transport_descriptors_length12uimsbf传输流描述符长度
for(i=0;i<N;i++){
descriptor()Second descriptor loop
}
}
CRC_3232rpchof注释
}

NIT表中的描述子

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

第一层描述符作用域是针对整个网络的,如插入网络名称描述符、链接描述符等
第二层描述符作用域是第一层循环所代表的一个TS流,如插入有线传输系统描述符

NIT表各层的Descriptor()包括:

    在SI标准中规定:original_network_id和transport_stream_id两个标识符相结合唯一确定了网络中的TS流。 各网络被分配独立的network_id值作为网络的唯一识别码。 当NIT表在生成TS流的网络上传输时,network_id和original_network_id将取同一值。 此外,NIT表还有如下特点:
  • NIT表被切分为网络信息段(network_information_section)
  • 任何NIT的段都必须由PID为0x0010的TS包传输
  • 现行网络的NIT表任何段的table_id值应为0x40,且具有相同的table_id_extension即(network_id);
  • 现行网络以外的其他网络NIT表的段table_id值应为0x41

NIT表实例

在下图中,我们可以看到NIT表的各个信息,如table_id=0x40、network_id=0x3022、NIT版本号(version_number=0x14)等。 另外,这里也出现了两层共三个描述子,接下来,我们逐个点开描述子来查看相关信息。

NIT表一览

第一层描述子:network_name_descriptor
下图是第一层的network_name_descriptor描述子。其descriptor_tag=0x40,网络名称(network name)为“T-Systems”。

第一层:network_name_descriptor描述子

第二层描述子1:地面传输系统描述子terrestrial_delivery_system_descriptor
下图是第二层的第一个描述子terrestrial_delivery_system_descriptor。 可以看到,该网络的中心频点(center_frequency)为746MHz,带宽为8MHz。 注意,这个位置的描述子分为cable、satellite和terrestrial三种,长度都为13个字节,这使他们之间的转换变得方便; 而此案例中,判断描述子是terrestrial的原因,是descriptor_tag的值是0x5a。 descriptor_tag的值与描述子类型的对应关系如下:

descriptor_tag描述子类型说明
0x43satellite_delivery_system_descriptor卫星传输系统描述子
0x44cable_delivery_system_descriptor有线传输系统描述子
0x5aterrestrial_delivery_system_descriptor地面传输系统描述子
第二层1:terrestrial_delivery_system_descriptor描述子

第二层描述子2:有线传输系统描述子: cable_delivery_system_descriptor
下图是另一个码流的NIT表,该描述子的descriptor_tag=0x44,即有线传输系统(有线电视),所以其携带的传输系统描述子是cable_delivery_system_descriptor。 从图中可以看出,该有线电视网络的主频点是259MHz,符码率为6876M,调制方式为64QAM。 需要说明的是,这里的64QAM并不是直接给出的,而是按照下表的规定(Modulation scheme for cable)发出的代码:

调制方式(十六进制)描述
0x00未定义
0x0116 QAM
0x0232 QAM
0x0364 QAM
0x04128 QAM
0x05256 QAM
0x06 - 0xFF预留使用
cable_delivery_system_descriptor,有线传输系统描述子

第二层描述子3:卫星传输系统描述子: satellite_delivery_system_descriptor
下图是另一个码流的NIT表,该描述子的descriptor_tag=0x43,即卫星传输系统,所以其携带的传输系统描述子是satellite_delivery_system_descriptor。 从图中可以看出,该频点的信息为11554/H/29950。具体分析可参考该描述子专项说明:查看!!

satellite_delivery_system_descriptor,卫星传输系统描述子

第二层描述子4:业务列表描述子: service_list_descriptor
下图是第二层的第二个描述子service_list_descriptor(业务列表)。它给出了业务根据其id和type排序的一种方式。 从图中可以看到,该网络的有四个业务,且四个业务均为数字电视业务。 其节目号(service_id)分别为16403、16408、16394和16398。
这里要特别说明的是,service_id 与 PMT表里的program_number相对应(service_type = 0x04 (NVOD reference service)除外)

第二层2:service_list_descriptor描述子

上面描述子中,有一个service_type字段,它的值可参照下表Service type coding:

service_type说明(中文)说明(英文)
0x00预留使用reserved for future use
0x01数字电视业务digital television service
0x02数字音频广播业务digital radio sound service
0x03图文电视业务Teletext service
0x04NVOD参考业务NVOD reference service
0x05NVOD时移业务NVOD time-shifted service
0x06马赛克业务mosaic service
0x07PAL制编码信号reserved for future use
0x08SECAM制编码信号reserved for future use
0x09D/D2-MACreserved for future use
0x0A调频广播advanced codec digital radio sound servic
0x0BNTSC制信号advanced codec mosaic service
0x0C数据广播业务data broadcast service
0x0D公共接口使用预留reserved for Common Interface Usage (EN 50221 [39])
0x0ERCS映射RCS Map (see EN 301 790 [7])
0x0FRCS FLSRCS FLS (see EN 301 790 [7]),RCS FLS
0x10DVB MHP业务DVB MHP service
0x11预留使用MPEG-2 HD digital television service
0x12 - 0x15预留使用reserved for future use
0x16预留使用advanced codec SD digital television service
0x17预留使用advanced codec SD NVOD time-shifted service
0x18预留使用advanced codec SD NVOD reference service
0x19预留使用advanced codec HD digital television service
0x1A预留使用advanced codec HD NVOD time-shifted service
0x1A预留使用advanced codec HD NVOD reference service
0x1C - 0x7F预留使用reserved for future use
0x80 - 0xFE用户定义user defined
0xFF预留使用reserved for future use
NOTE 1: MPEG-2 SD material should use this type
NOTE 2: digital radio sound service

SDT表

Parse SDT(Service Description Table)

"SDT描述了业务内容及信息,连接了NIT、EIT和PMT(PSI)"
SDT表主要提供关于Service的信息,如Service name,Service provider 等。
这里所说的业务,即Service;CCTV 1是一个Service(我们说“频道”),湖南卫视也是一个Service
PID = 0x0011
table_id = 0x42 (discribe actual TS,现行TS)
table_id = 0x46 (discribe not actual TS,非现行TS)

SDT表被切分成业务描述段(service_description_section),由PID为0x0011的TS包传输(BAT段也由PID为0x0011的TS包传输,但table_id不同)。

描述现行TS(即包含SDT表的TS)的SDT表的任何段的table_id都为0x42,且具有相同的table_id_extension(transport_stream_id)以及相同的original_network_id。 指向非现行TS的SDT表的任何段的table_id都应取0x46。

业务描述表SDT(见下一节的SDT表结构)中的每一个子表,都用来描述包含于一个特定的传输流中的业务。 该业务可能是现行传输流中的一部分,也可能是其他传输流中的一部分,可以根据table_id 来确定区分上述两种情况(见表2)。


SDT表的结构分析

SDT表被切分成业务描述段(service_description_section)。任何构成SDT表的段,都要由PID为0x0011的TS包传输。描述现行TS(即包含SDT表的TS)的SDT表的任何段的table_id值应为0x42,且具有相同的table_id_extension(tranport_stream_id)以及相同的original_network_id。指向一个现行TS之外的其它TS的SDT表的任何段的table_id值应取0x46。

下表是SDT结构:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
service_description_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
Reserved_future_use1bslbf预留使用
Reserved2bslbf保留
Section_length12uimsbf注释
transport_stream_id16uimsbf传输流标识符,给出TS的识别号
Reserved2bslbf保留
Version_number5bslbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
original_nerwork_id16uimsbf注释
reserved_future_use8bslbf预留使用
for(i=0;i<N;i++){
service_id16uimsbf注释
reserved_future_use8bslbf预留使用
EIT_schedule_flag1bslbf注释
EIT_present_following_flag1bslbf注释
running_status3uimsbf注释
freed_CA_mode1bslbf注释
descriptors_loop_length12uimsbf描述符循环长度
for(i=0;i<N;i++){
descriptor()
}
}
CRC_3232rpchof注释
}

SDT表的描述子


SDT表实例

在下图中,我们可以看到SDT表中的service_id=16403与PMT表中的program_number=0x4013(即16403)是对应的。 也就是说,通过解析SDT表获取到service_id=16403的节目信息后,可以存储到program_number=0x4013(即16403)的节目信息中。

SDT表与PMT表的映射关系

在下图中,我们可以看到SDT表的基本信息。

SDT表和它的业务描述子Service descriptor

EIT表

Parse EIT(Event Infomation Table)

"EIT按时间顺序提供每一个业务所包含的事件信息"
这里所说的事件,即Event;《新闻联播》是一个事件,《焦点访谈》也是一个事件。
举个例子来说,EIT表就是提供了中央一台(CCCT 1)各个时间段的节目列表的
PID = 0x0012
EIT表主要提供关于event的信息,如name, start time, duration等。共有四类EIT:
table_id = 0x4E (actual Transport Stream, present/following event information,当前TS流,当前/后续事件信息)
table_id = 0x4F (other Transport Stream, present/following event information,其他TS流,当前/后续事件信息)
table_id = 0x50 ~ 0x5F (actual Transport Stream, event schedule information,当前TS流,事件时间表信息)
table_id = 0x60 ~ 0x6F (other Transport Stream, event schedule information,其他TS流,事件时间表信息)

EIT即事件信息表(Event Information Table),它是EPG中绝大部分信息的携带者。 事实上,EPG主要就是通过SDT和EIT信息的获取和重组实现的。 SDT只提供了频道信息,而EIT则提供各频道下的所有节目的信息。 EIT的主要信息也是通过插入的描述符来实现的。 EIT按照时间顺序提供每一个业务所包含的事件的相关信息(如节目名称、节目简介)。

描述现行TS(即包含SDT表的TS)的SDT表的任何段的table_id都为0x42,且具有相同的table_id_extension(transport_stream_id)以及相同的original_network_id。 指向非现行TS的SDT表的任何段的table_id都应取0x46。

除准视频点播(NVOD)业务之外,当前/后续表中只包含在现行传输流或其他传输流中指定业务的当前事件和按时间顺序排列的后续事件的信息,因为NVOD业务可能包含两个以上的事件描述。无论是对现行传输流还是其他传输流,事件时间表都包含了以时间表的形式出现的事件列表,这些事件包括下一个事件之后的一些事件。EIT时间表是可选的,事件信息按时间顺序排列。


EIT表的结构分析

EIT表被切分成事件信息段。任何构成EIT表的段,都要由PID为0x0012的TS包传输。下表是EIT结构:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
event_information_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
Reserved_future_use1bslbf预留使用
Reserved2bslbf保留
Section_length12uimsbf注释
service_id16uimsbf注释
Reserved2bslbf保留
Version_number5bslbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
transport_stream_id16uimsbf注释
original_nerwork_id16uimsbf注释
segment_last_section_number8uimsbf注释
last_table_id8uimsbf注释
for(i=0;i<N;i++){
event_id16uimsbf事件标识符
start_time40bslbf注释
duration24bslbf注释
running_status3uimsbf注释
freed_CA_mode1bslbf注释
descriptors_loop_length12uimsbf描述符循环长度
for(i=0;i<N;i++){
descriptor()
}
}
CRC_3232rpchof注释
}

EIT表的描述子


EIT表实例

在下图中,两个部分的EIT信息都是针对当前的TS流(其table_id分别是0x4e和0x50,都是actual的EIT信息)。 其中,第一部分是针对当前TS流程中各业务的当前/后续事件信息(table_id=0x4e); 第二部分是针对当前TS流中各业务的事件时间表信息。

EIT表中的当前TS流信息

在下图中,红框内的信息即为一个EIT表的基本信息。这里的EIT表是当前TS流当前事件的EIT信息。

我们看的事件描述的描述子里,开始时间start_time为“2006/11/30 07:52:00”, 持续时间duration为“01:02:00”, 状态running_status为0x4(即running), CA模式free_CA_mode为0x0(即free)。

EIT表的基本信息和一个事件的描述

除了这些基本的事件信息,我们还可以继续往下一层的描述子查看更多信息。

如下图所示,这里有短事件描述子short_event_descriptor,它以文本方式提供了事件名称和该事件的简短描述;下图中,我们可以看到事件的编码为“DEU”(德语),以及事件名称。

此外,还有拓展事件描述子extended_event_descriptor;它给出了一个事件的详细文本描述。如果一个事件的信息长度超过256字节,可以使用多于一个相关联的扩展事件描述符来描述。文本信息可以分为两个栏目,一栏为条目的描述,另一栏为条目的内容。

EIT表中一个事件的详细

TDT表

Parse TDT(Time & Date Table)

"TDT仅传送UTC时间和日期信息,只有一个段"
TDT为时间和日期表(Time&Date Table),它仅传送UTC时间和日期信息。
PID = 0x0014
table_id = 0x70

TDT表的结构分析

TDT仅包含一个段,其结构如下:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
time_date_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
Reserved_future_use1bslbf预留使用
Reserved2bslbf保留
Section_length12uimsbf注释
UTC_time40bslbf注释
}

40位,包含了当前时间和日期(UTC),头16位表示日期(16 LSBs of MJD),后24位表示时间。

例如: 93/10/13 12:45:00表示为:“0xC079124500”


TDT表实例

下图可以看到,时间和日期是:2006/11/30 08:02:04

TDT表

TOT表

Parse TOT(Time Offset Table)

"TOT是TDT的一个扩展,增加了一个描述符"
TOT表提供了UTC时间和日期信息,以及和本地时间的时差。
它包含了UTC时间和日期信息,以及当地时间偏移(时差)等信息
PID = 0x0014
table_id = 0x73

TOT表的结构分析

TOT表结构如下:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
time_date_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
Reserved_future_use1bslbf预留使用
Reserved2bslbf保留
Section_length12uimsbf注释
UTC_time40bslbf注释
Reserved2bslbf保留
descriptors_loop_length12uimsbf描述符循环长度
for(i=0;i<N;i++){
descriptor()
}
CRC_3232rpchof注释
}

TOT表的描述子

注意到,这里的UTC_time和TDT表的UTC_time是一致的,都是以UTC和MJD形式表示当前时间和日期;其格式也与TDT的UTC_time相同,这里不再赘述。

    TOT表中的Descriptor():
  • Local time offset descriptor:查看!!

TOT表实例

下图可以看到,前面部分和TDT表是一致的,只是后面多了一个描述子。从local_time_offset字段可以看出,该地区的时区是东一区,即UTC+1。

TDT表

国家代码 country_code
24位字段,按照ISO 3166用3字符代码指明国家。 每个字符根据GB/T 15273.1-1994编码为8位,并依次插入24位字段。 假设3个字符代表了一个900至999的数字,那么country_code指定了一组ETSI定义的国家。 其分配见ETR 162。国家组的国家代码应该被限制在同一时区内。 例如:英国由3字符代码“GBR”表示,编码为:“01000111 0100 0010 0101 0010”。

国家区域标识符 country_region_id
6位字段,表示country_code指明的国家所在的时区。若国家内部里没有时差,则置“000000”。

country_region_id描述
00 0000未使用时区扩展
00 0001时区1(最东部)
00 0010时区2
00 0011时区3
......
11 1100时区60
11 1101 – 11 1111预留

本地时间偏移极性 local_time_offset_polarity
1位字段,用于指明随后的local_time_offset的极性。 置“0”时,极性为正,说明本地时间早于UTC时间(通常在格林威治以东);置“1”时,极性为负,说明本地时间晚于UTC时间。

本地时间偏移 local_time_offset
16位字段,指出由country_code和country_region_id确定的区域的相对于UTC的时间偏移,范围为-12小时至+13小时。 16比特含有4个4位BCD码,顺序为小时的十位,小时的个位,分的十位,分的个位。

时间变化 time_of_change
40位字段,指明时间改变时当前的日期(MJD)与时间(UTC),见附录C。 该字段分为两部分,前16位给出了LSB格式的日期(MJD),后24位给出了UTC时间(6个4位BCD码)。

下一时间偏移 next_time_offset
16位字段,指出由country_code和country_region_id确定的区域,当UTC时间变化时的下一个时间偏移,范围为-12小时至+13小时。 此16比特域为4个4位BCD码,依次为时的十位,时的个位,分的十位,分的个位。

BAT表

Parse BAT(Bouquet Association Table)

"BAT将网络中的所有业务分成了多个业务群,以此界定用户"
BAT表主要提供关于Bouquet的信息,Bouquet是一个services的集合。
PID = 0x0011 (和SDT相同,通过table_id区分)
table_id = 0x4A

BAT即业务群关联表(BouquetAssociation Table),它将网络中所有的业务分成了多个业务群,以此界定用户。 例如,将网络中所有业务分为两个业务群,一个是境内节目业务群,另一个是境外节目业务群。 这样,国内的运营商就可以利用这样划分的业务群,充分利用节目资源,在不违反现有广电总局规定的前提下,同时分别满足境内用户和境外用户。

BAT本身可以跨网络存在,但在国内运营体系来看几乎没有得到真正使用。 国内的运营使用中,BAT还可以存在分级运营的运营体系中,用于区分不同的地域用户。


BAT表的结构分析

BAT表被切分成业务群关联段。BAT中的任何段都在TS包中传输,其PID值为0x0011。BAT表中描述特定的业务群的子表的段,要具有bouqet_id字段,取值分配见ETR162。所有BAT段的table_id值都取为0x4A。

BAT表结构如下:

Syntax(句法结构)No. of bits(所占位数)Identifier(识别符)Note(注释)
network_information_section(){
table_id8uimsbf表标识符
Section_syntax_indicator1bslbf段语法指示符,通常设置为“1”
Reserved_future_use1bslbf预留使用
Reserved2bslbf保留
Section_length12uimsbf注释
bouquet_id16uimsbf注释
Reserved2bslbf保留
Version_number5uimsbf注释
Current_next_indicator1bslbf注释
Section_number8uimsbf注释
last_section_number8uimsbf注释
Reserved_future_use4bslbf预留使用
bouquet_descriptors_length12uimsbf业务群描述符长度
for(i=0;i<N;i++){
descriptor()First descriptor loop
}
reserved_future_use4bslbf预留使用
transport_stream_loop_length12uimsbf传输流循环长度
for(i=0;i<N;i++){
transport_stream_id16uimsbf注释
original_network_id16uimsbf注释
reserved_future_use4bslbf预留使用
transport_descriptors_length12uimsbf传输流描述符长度
for(i=0;i<N;i++){
descriptor()Second descriptor loop
}
}
CRC_3232rpchof注释
}

BAT表的描述子

对比NIT表的结构,BAT表和NIT表在结构上是一样的。BAT表也有两层的描述子。

BAT表各层的Descriptor()包括:

    第二层(Second descriptor loop)
  • Service list descriptor:查看!!


BAT表实例

下图中,可以看到bouquet_name_descriptor的bouquet_name为“Fransat SD”。

BAT表

本章小结

Summary

本资料来源于规范的资料,如有疏漏,请以European Standard提供的英文文档《En300468.V1.7.1_Specification for SI in DVB Systems》 和国家广播电影电视总局提供的中文文档《数字视频广播中文业务信息规范》为准。 如果这两者有冲突,以英文文档为准。

参考文档

References

#文档名称作者
1《PSI/SI教程:第一章:预备知识》林晓州
2《PSI/SI教程:第二章:从TS到PAT和PMT》林晓州
3《PSI/SI教程:第三章:深入学习PSI》林晓州
4《PSI/SI教程:第四章:深入学习SI》林晓州
5《En300468.V1.7.1_Specification for SI in DVB Systems》European Standard
6DVB和MPEG-II中的表格网络
7《数字视频广播中文业务信息规范》国家广播电影电视总局

版本信息

Version Information

#发布日期版本更新内容作者审核
12016年02月24日V1.0主要参考《PSI/SI教程:第三章:深入学习PSI》和《PSI/SI教程:第四章:深入学习SI》整理出该文档林晓州——