SI信息解析
/*学习SI时看到一篇博客,内容非常好,只是少了一部分内容,我就从其他资料里面补上了那部分,可能不太好,请见谅*/
"SI是对多个TS流的描述,它包含了PSI"
PSI只提供了单个TS流的信息,使接收机能够对单个TS流中的不同节目进行解码;但是,它不能提供多个TS流的相关业务,也不能提供节目的类型、节目名称、开始时间、节目简介等信息。因此,DVB对PSI进行了扩展,提供了其他不同类型的表,形成了SI。
SI定义了PAT、PMT和CAT之外的9张表,通过组织SI提供的这些数据,可以生成类似节目报表的形式,方便用户查看多种信息,这就是所谓的电子节目指南(EPG)。
下面给出了SI定义的十张表(NIT的由SI规定的):
NIT |
Network Information Table |
网络信息表 |
描述整个网络,如多少TS流、频点和调制方式等信息 |
SDT |
Service Description Table |
业务描述表 |
包含业务数据(如业务名称、起始时间、持续时间等) |
BAT |
Bouquet Association Table |
业务群关联表 |
给出业务群的名称及其业务列表等信息 |
EIT |
Event Information Table |
事件信息表 |
包含事件或节目相关数据,是生成EPG的主要表 |
RST |
Running Status Table |
运行状态表 |
给出事件的状态(运行/非运行) |
TDT |
Time&Date Table |
时间和日期表 |
给出当前事件和日期相关信息,更新频繁 |
TOT |
Time Offset Table |
时间偏移表 |
给出了当前时间日期与本地时间偏移的信息 |
ST |
Stuffing Table |
填充表 |
用于使现有的段无效,如在一个传输系统的边界 |
SIT |
Select Information Table |
选择信息表 |
仅用于码流片段中,如记录的一段码流,包含描述该码流片段业务信息段的地方 |
DIT |
Disconnect Information Table |
间断信息表 |
仅用于码流片段,如记录的一段码流中,它将插入到码流片段业务信息间断的地方 |
SI定义的表,并不需要全部传输,其中,NIT、SDT、EIT和TDT是必须传输的;而又以NIT、SDT和EIT最为重要,利用这三个表可以构成功能不同的EPG,如提供节目附加信息、节目分类、节目预定和家长分级控制等。
一:BAT解析
PARSING OF BAT
"BAT将网络中的所有业务分成了多个业务群,以此界定用户"
BAT即业务群关联表(BouquetAssociation Table),它将网络中所有的业务分成了多个业务群,以此界定用户。例如,将网络中所有业务分为两个业务群,一个是境内节目业务群,另一个是境外节目业务群。这样,国内的运营商就可以利用这样划分的业务群,充分利用节目资源,在不违反现有广电总局规定的前提下,同时分别满足境内用户和境外用户。
BAT本身可以跨网络存在,但在国内运营体系来看几乎没有得到真正使用。国内的运营使用中,BAT还可以存在分级运营的运营体系中,用于区分不同的地域用户。
BAT被切分为业务群关联段,所有的业务群关联段都在TS中传输,其PID为0x0011。所有的业务群关联段的table_id都取0x4A。
提示:SDT的TS包PID也为0x0011,其table_id为0x42或0x46。
BAT的表结构分析
ANALYZE OF THE STRUCTURE OF BAT
下面给出了BAT表的段结构:
业务群关联段
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
bouquet_association_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
Reserved_future_use 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
bouquet_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
bouquet_descriptors_length 12 uimsbf
for(i=0;i<N;i++){
descriptor()
}
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()
}
}
CRC_32 32 rpchof 见注释
}
注意到BAT的结构和NIT类似,其作用和描述符的使用也与NIT大致雷同。其中,可以插入传输系统描述符、业务列表描述符等。这些表和NIT中的表已介绍,这里不再赘述。
BAT的业务群名称描述符结构分析
ANALYZE OF THE STRUCTURE OF BOUQUET_NAME_DESCRIPTOR IN BAT
下面给出的是业务群名称描述符,它以文本方式给出了业务群的名称:
业务群名称描述符
Syntax(句法结构) No. of bits(所占位数)Identifier(识别符)
bouquet_name_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
for(i=0;i<N;i++){
char 8 uimsbf
}
}
char(字符):8位字段,用于描述BAT子表叙述的节目业务群名称
业务名称描述符和网络名称描述符类型,只是作为业务群的一个代号,其实际意义只存在于用户界面上,可以给用户一个良好的操作体验。
二:SDT解析
PARSINGOF SDT
"SDT描述了业务内容及信息,连接了NIT与EIT和PMT(PSI)"
SDT即服务描述表(Service Description Table),它描述了一个业务中的内容以及信息,它承上启下,以transport_stream_ID连接了NIT和EIT;SDT的servicID必须与PMT中的Program_no一致,因此,SDT又与PSI的信息连接。
对于一般的音视频业务,SDT表中不会有太多的信息需要添加。如果是其他业务(如NVOD、马赛克、数据广播等),在SDT中需要插入相应业务的描述符。
SDT的表结构分析
ANALYZE OF THE STRUCTURE OF SDT
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的业务描述段:
业务描述段
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
service_description_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
Reserved_future_use 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
transport_stream_id 16 uimsbf 给出TS识别号
Reserved 2 bslbf
Version_number 5 uimsbf 见注释
Current_next_indicator 1 bslbf 见注释
Section_number 8 uimsbf 见注释
last_section_number 8 uimsbf 见注释
original_nerwork_id 16 uimsbf 见注释
reserved_future_use 8 bslbf
for(i=0;i<N;i++){
service_id 16 uimsbf 见注释
reserved_future_use 6 bslbf
EIT_schedule_flag 1 bslbf 见注释
EIT_present_following_flag 1 bslbf 见注释
running_status 3 uimsbf 见下面分析
freed_CA_mode 1 bslbf 见注释
descriptors_loop_length 12 uimsbf
for(j=0;j<N;j++){
descriptor()
}
}
CRC_32 32 rpchof 见注释
}
running_status(运行状态):表示业务状态,下表给出了业务状态
值 |
含义 |
0 |
未定义 |
1 |
未运行 |
2 |
几秒后开始(如录像) |
3 |
暂停 |
4 |
运行 |
5~7 |
预留 |
SDT是描述一个TS流中所有业务信息的一张表,重要的字段包含transport_stream_id,明确这些业务是属于哪个TS流的;另一个重要字段时候service_id,这是作为频道索引信息存在的。
SDT的业务描述符分析
ANALYZE OF THE STRUCTURE OF SERVICE_DESCRIPTOR IN SDT
业务描述符与业务类型一起,以文本形式给出业务提供者的名称和业务名称,如下表:
业务描述符
Syntax(句法结构) No. of bits(所占位数)Identifier(识别符)
service_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
service_type 8 uimsbf
service_provider_name_length 8 uimsbf
for(i=0;i<N;i++){
Char 8 uimsbf
}
service_name_length 8 uimsbf
for(i=0;i<N;i++){
Char 8 uimsbf
}
}
service_type(业务类型):这里的业务类型和NIT中的业务列表描述符中的service_type编码是一致的:
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 |
预留使用 |
业务描述符是SDT中最重要的描述符,也是运营商中必须的描述符。其中的service_type描述这个业务类型的域;service_name描述频道名。
SDT的实例分析
ANALYZE OF REAL EXAMPLE OF SDT
这里主要演示SDT如何连接PSI和NIT。
首先,根据SDT描述符的service_id可以和PMT中的program_number建立连接。如图所示,SDT的service_id=201=0xc9,与PMT中的program_number一致。
上图所示,根据SDT的transport_stream_id和NIT的transport_stream_id,可以将SDT和NIT联系起来。根据上图的信息,我们可以根据SDT获取该业务(频道)的业务列表信息和有线传输信息(位于NIT中)。
三:EIT解析
PARSING OF EIT
"EIT按时间顺序提供每一个业务所包含的事件信息"
EIT即事件信息表(Event Information Table),它是EPG中绝大部分信息的携带者。事实上,EPG主要就是通过SDT和EIT信息的获取和重组实现的。SDT只提供了频道信息,而EIT则提供各频道下的所有节目的信息。
EIT的主要信息也是通过插入的描述符来实现的。EIT按照时间顺序提供每一个业务所包含的事件的相关信息(如节目名称、节目简介)。
传输流 |
信息 |
table_id |
当前TS流 |
当前/后续事件信息 |
0x4E |
其他TS流 |
当前/后续事件信息 |
0x4F |
当前TS流 |
事件时间表信息 |
0x50~0x5F |
其他TS流 |
事件时间表信息 |
0x60~0x6F |
按照不同的table_id,一共有四类EIT。其中,当前TS流的所有EIT子表都有相同的transport_stream_id和original_stream_id。下图给出了一个实例的码流中的EIT信息,这里一共有三类EIT表,观察其table_id就可以知道它们代表什么类型的EIT。
第一个EIT_PF_Actual应该是当前TS流的“当前/后续事件信息”;第二个EIT_PF_Other是其他TS流的“当前/后续事件信息”;第三个EIT_Schedule_Actual是当前TS流的“事件时间表信息”。
EIT的表结构分析
ANALYZEOF THE STRUCTUREOF EIT
EIT表被切分成事件信息段。任何构成EIT的段都由PID=0x0012的TS包传输。下面给出的是事件信息段的结构:
事件信息段
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
event_information_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
Reserved_future_use 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
service_id 16 uimsbf 与PAT中的program_number一致
Reserved 2 bslbf
Version_number 5 uimsbf 见注释
Current_next_indicator 1 bslbf 见注释
Section_number 8 uimsbf 见注释
last_section_number 8 uimsbf 见注释
transport_stream_id 16 uimsbf 见注释
original_nerwork_id 16 uimsbf 见注释
segment_last_section_number 8 uimsbf 见注释
last_table_id 8 uimsbf 见注释
for(i=0;i<N;i++){
event_id 16 uimsbf 事件(节目)id
start_time 40 bslbf 事件(节目)开始时间
duration 24 bslbf 事件(节目)持续始时间
running_status 3 uimsbf 见注释
freed_CA_mode 1 bslbf 见注释
descriptors_loop_length 12 uimsbf
for(j=0;j<N;j++){
descriptor()
}
}
CRC_32 32 rpchof 见注释
}
start_time(开始时间):40位字段,指的是事件(节目)的开始时间,它包含以UTC和MJD形式表示的事件(节目)的起始时间及日期。此字段前16位表示MJD日期码,其余24位按4位BCD编码,表示6个数字。例如:93/10/13 12:45:00被编码为:“0xc079124500”
HINT(提示):如果事件起始时间未定,则所有位都置为“1”,例如对NVOD业务的一个事件。
duration(持续时间):24位字段,表示事件的持续时间,以时、分、秒的格式表示,即由6个4位BCD码显示。如:01:45:30被编码为“0x14530”。
running_status(运行状态):参看SDT表解析部分。
下面给出一个具体的例子:
EIT主要承载的信息就是Event的相关内容,即节目信息。其中,节目所在频道(service_id)、开始时间(start_time)、结束时间(start_time+duration)可在EIT子表获取;而节目描述、节目名称、节目分类等信息就要在插入EIT的描述符中获取了。
EIT的短事件描述符分析
ANALYZE OF THE STRUCTURE OF SHORT_EVENT_DESCRIPTOR IN EIT
短事件描述符(Short_event_descriptor)以文本方式提供了事件名称和该事件的简短描述。描述符结构如下:
短事件描述符
Syntax(句法结构) No.of bits(所占位数) Identifier(识别符)
short_event_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
ISO_639_language_code 24 bslbf
event_name_length 8 uimsbf
for(i=0;i<event_name_length;i++){
event_name_char 8 uimsbf
}
text_length 8 uimsbf
for(i=0;i<text_length;i++){
text_char 8 uimsbf
}
}
ISO_639_language_code(ISO 639-2语言代码):24位字段,指明后续文本字段的语言。该字段包含一个由ISO 639-2定义的3字符代码。ISO 639-2/B和ISO 639-2/T均可使用。每个字符按照GB/T15273.1-1994编码为8位,并依次插入24位字段。如:法语的3字符代码“fre”,可编码为:“0110 01100111 0010 0110 0101”。
event_name_char(事件名称字符):一个字符串给出事件的名字。
text_char(文本字符):一个字符串给出事件的文本描述。
下面给出的是一个实际案例的短时间描述符,可见中文的3字符代码是“chi”。
EIT的扩展事件描述符分析
ANALYZE OF THE STRUCTURE OF EXTENDED_EVENT_DESCRIPTOR IN EIT
扩展事件描述符(Extended_Event_Descriptor)扩展事件描述符给出了一个事件的详细文本描述。如果一个事件的信息长度超过256字节,可以使用多于一个相关联的扩展事件描述符来描述。文本信息可以分为两个栏目,一栏为条目的描述,另一栏为条目的内容。
下面给出了扩展事件描述符的结构。
扩展事件描述符
Syntax(句法结构) No. of bits(所占位数)Identifier(识别符)
extended_event_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
descriptor_number 4 uimsbf
last_descriptor_number 4 uimsbf
ISO_639_language_code 24 bslbf
length_of_items 8 uimsbf
for(i=0;i<N;i++){
item_description_length 8 uimsbf
for(j=0;j<N;j++){
item_description_char 8 uimsbf
}
item_length
for(j=0;j<N;j++){
item_char
}
}
text_length
for(i-0;i<N;i++){
text_char
}
}
下面给出的是一个实例截图
EIT的内容描述符分析
ANALYZE OF THE STRUCTURE OF CONTENT_DESCRIPTOR IN EIT
内容描述符的目的是为事件提供清晰的信息描述符。根据这个描述符的信息,接收机可以清晰地知道事件的分类,并告知观众。下面给出了内容描述符的结构:
内容描述符
Syntax(句法结构) No. of bits(所占位数)Identifier(识别符)
content_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
for(i=0;i<N;i++){
content_nibble_level1 4 uimsbf
content_nibble_level2 4 uimsbf
user_nibble 4 uimsbf
user_nibble 4 uimsbf
}
}
这里主要需要介绍的就是 content_nibble_level1和content_nibble_level2:根据EN 300 468V1.3.1(1998-02)中的Table 18可以确定该节目的具体分类。
下面给出了一个实例。
四:TDT解析
PARSING OF TDT
"TDT仅传送UTC时间和日期信息,只有一个段"
TDT为时间和日期表(Time&Date Table),它仅传送UTC时间和日期信息。并且TDT仅包含一个段,其结构如下:
时间和日期段
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
time_date_section(){
table_id 8 uimsbf
Section_syntax_indicator 1 bslbf 通常设为“1”
Reserved_future_use 1 bslbf
Reserved 2 bslbf
Section_length 12 uimsbf 见注释
UTC_time 40 bslbf 见注释
}
UTC_time(UTC时间):40位字段,包含以UTC和MJD形式表示的当前时间和日期。此字段前16位为MJD日期码,后24位按4位BCD编码,表示6个数字。如:93/10/13 12:45:00被编码为“0xC079124500”。
下图给出了一个实例:
五:TOT解析
PARSINGOF TOT
"TOT是TDT的一个扩展,增加了一个描述符"
TOT为时间偏移表(Time Offset Table),它包含了UTC时间和日期信息及当地时间偏移。传输此表的TS包PID为0x0014,table_id=0x73。下面给出了时间偏移段的结构:
时间偏移段
Syntax(句法结构) No. ofbits(所占位数) Identifier(识别符) Note(注释)
time_offset_section(){
table_id 8 uimsbf section_syntax_indicator 1 bslbf 通常设为“1”
reserved_future_use 1 bslbf
reserved 2 bslbf
section_length 12 uimsbf 见注释
UTC_time 40 bslbf 见注释
reserved 4 bslbf
descriptors_loop_length 12 uimsbf for(i=0;i<N;i++){
descriptor()
CRC_32 32 rpchof 见注释
}
这里的UTC_time和TDT表是一致的,都是以UTC和MJD形式表示当前时间和日期;其格式也与TDT的UTC_time相同,这里不再赘述。需要特别注意的是这里的描述符descriptor()。下面给出了本地时间偏移描述符的结构:
本地时间偏移描述符
Syntax(句法结构) No. of bits(所占位数) Identifier(识别符)
local_time_offset_descriptor(){
descriptor_tag 8 uimsbf
descriptor_length 8 uimsbf
for(i=0;i<N;i++){
coutry_code 24 bslbf
country_region_id 6 bslbf
reserved 1 bslbf
local_time_offset_polarity 1 bslbf
local_time_offset 16 bslbf
time_of_change 40 bslbf
next_time_offset 16 bslbf
}
}
国家代码 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 |
…….. |
…….. |
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码,依次为时的十位,时的个位,分的十位,分的个位。
六:运行状态表(RST)
运行状态表(RST)能准确而迅速地的更新一个或多个事件的时间状态。因为时间表的变化,事件的开始可能提前或滞后,所以RST表的存在是非常必要的。使用一个独立的表可以保证快速更新机制的实现。
按照表10语法,RST表被切分成运行状态段。任何构成RST表的段,都要由PID为0x0013的TS包传输,table_id值为0x71。
运行状态段表
语 法 |
位数 |
助记符 |
running_status_section(){ |
|
|
table_id |
8 |
uimsbf |
section_syntax_indicator |
1 |
bslbf |
reserved_future_use |
1 |
bslbf |
reserved |
2 |
bslbf |
section_length |
12 |
uimsbf |
for(i=0;i<N;i++){ |
|
|
transport_stream_id |
16 |
uimsbf |
original_network_id |
16 |
uimsbf |
service_id |
16 |
uimsbf |
event_id |
16 |
uimsbf |
reserved_future_use |
5 |
bslbf |
running_status |
3 |
uimsbf |
} |
|
|
} |
|
|
运行状态段的语义:
表标识符 table_id。
段语法指示符 section_syntax_indicator: 1位字段,应置“0”。
段长度 section_length:12位字段,前两位置“00”。它表示从该字段的下一个字节开始的本段的字节长度,并包含CRC。section_length不能超过1021,这样整个段的最大长度为1024字节。
传输流标识符 transport_stream_id:16位字段,RST表所描述的TS的标识,用以区别传输系统中的其他复用流。
原始网络标识符 original_network_id:16位字段,给出原始传输系统的network_id。
业务标识符 service_id:16位字段,用于在TS流中识别不同的业务。service_id 与program_map_section中的program_number取同一值。
事件标识符 event_id:16位字段,指示相关事件的标识号。
运行状态 running_status:3位字段,表示业务的状态。
七:填充表(ST)
填充表段用于在一个传输系统的边界使当前段无效,例如在一个有线系统前端。当子表中的一个段被改写(填充)时,则该子表中的所有段都需要重写,以便保持section_number字段的一致性。
表11 填充段
语 法 |
位数 |
助记符 |
stuffing_section(){ |
|
|
table_id |
8 |
uimsbf |
section_syntax_indicator |
1 |
bslbf |
reserved_future_use |
1 |
bslbf |
reserved |
2 |
bslbf |
section_length |
12 |
uimsbf |
for(i=0;i<N;i++){ |
|
|
date_byte |
8 |
uimsbf |
} |
|
|
} |
|
|
填充段的语义:
表标识符 table_id。
段语法指示符 section_syntax_indicator: 1位字段,可以取值“1”或“0”。。
段长度 section_length:12位字段,它表示从该字段的下一个字节开始的本段的字节长度,并包含CRC。section_length不能超过4093,这样整个段的最大长度为4096字节。
数据字节 data_byte:8位字段,可取任何值,没有具体意义。
八:间断信息表(DIT)
DIT表应插入SI信息可能间断的转变点,见下表。
间断信息段表
语 法 |
位数 |
助记符 |
discontinuity_information_section(){ |
|
|
table_id |
8 |
uimsbf |
section_syntax_indicator |
1 |
bslbf |
reserved_future_use |
1 |
bslbf |
reserved |
2 |
bslbf |
section_length |
12 |
uimsbf |
transition_flag |
1 |
uimsbf |
reserved_future_use |
7 |
bslbf |
} |
|
|
间断信息段的语义:
表标识符 table_id
段语法标识符 section_syntax_indicator
1位字段,应置“0”。
段长度 section_length
12位字段,应置为0x001.
转变标志 transition_flag
1位标志字段,指明TS中的转变类型。该位置“1”时,表示转变因起始码源变化所致。这种起始源的变化可能是原始TS发生变化和/或在TS的位置发生变化(如时间偏移)。该位置“0”时,表示转变仅因为选择的变化所致。例如:停留在同一个原始TS中的同一个位置上。
九:选择信息表(SIT)
SIT表描述了TS片断所携带的业务和事件。
选择信息段表
语 法 |
位数 |
助记符 |
selection_information_section(){ |
|
|
table_id |
8 |
uimsbf |
section_syntax_indicator |
1 |
bslbf |
DVB_reserved_future_use |
1 |
bslbf |
ISO_reserved |
2 |
bslbf |
section_length |
12 |
uimsbf |
DVB_reserved_future_use |
16 |
uimsbf |
ISO_reserved |
2 |
bslbf |
version_number |
5 |
uimsbf |
current_next_indicator |
1 |
bslbf |
section_number |
8 |
uimsbf |
last_section_number |
8 |
uimsbf |
DVB_reserved_for_future_use |
4 |
uimsbf |
transmission_info_loop_length |
12 |
bslbf |
for(i = 0; i < N; i++){ |
|
|
descriptor() |
|
|
} |
|
|
for(i = 0; i < N; i++){ |
|
|
Service_id |
16 |
uimsbf |
DVB_reserved_for_future_use |
1 |
uimsbf |
running_status |
3 |
bslbf |
service_loop_length |
12 |
bslbf |
for(i = 0; i < N; I++){ |
|
|
descriptor() |
|
|
} |
|
|
} |
|
|
CRC_32 |
32 |
rpchof |
} |
|
|
选择信息段的语义:
表标识符 table_id
段语法指示符 section_syntax_indicator
1位字段,应置“1”。
段长度 section_length
12位字段,它表示从该字段的下一个字节开始的本段的字节长度,并包含CRC。section_length不能超过4093,这样整个段的最大长度为4096字节。
版本号 version_number
5位字段,标识表的版本号。当表包含的信息发生变化时,version_number加1。当值增至31时,复位为0。当current_next_indicator置“1”时,则version_number为当前使用的表的版本号。当current_next_indicator置“0”时,则version_number为下一个使用的表的版本号。
当前后续指示符 current_next_indicator
1位字段,当被置“1”时,表示当前表正被使用。当其置“0”时,表示所传表尚未被使用,它是下一个将被使用的表。
段号 section_number
8位字段,给出了段号,应为“0x00”。
最后段号 last_section_number
8位字段,表示最后一个段的段号,应为“0x00”。
传输信息循环长度 transmission_info_loop_length
12位字段,以字节为单位给出了后续的描述TS片断的传输参数描述符循环的长度。
业务标识符 service_id
16位字段,用于在TS中识别不同的业务。service_id 与program_map_section中的program_number取同一值。
运行状态 running_status
3位字段,指明原始码流中的事件的运行状态,是原始的当前事件的运行状态, 若在原始码流中, 当前事件不存在,则认为”未运行”,running_status值的意义的定义见ETR 211 。
业务循环长度 service_loop_length
12位字段,以字节为单位给出了后续的TS片断中携带的业务和事件的相关SI信息的描述符循环的长度。
SI小结
SUMMARY OF SI