做EPG都是4年前的事情了,现在忘得也差不多了,趁在还没有完全忘记之前,写下点东西,备份一下。
EIT:
TableID:0x4E (EIT actual, present/following) 当前/后续
TableID:0x4F (EIT other, present/following) 当前/后续
TableID:0X50-0X5F(EIT actual, schedule) 时间表
TableID:0X60-0X6F(EIT other, schedule) 时间表
EIT section结构说明:
event_infotmation_section()
{
table_id 8 uimsbf
section_syntax_indicator 1 bslbf
reserved_future_use 1 bslbf
reserved 2 bslbf
section_length 12 uimsbf
service_id 16 uimsbf
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_network_id 16 uimsbf
segment_last_section_number 8 uimsbf
last_table_id 8 uimsbf
for(i=0;i<N;i++)
{
event_id 16 uimsbf
start_time 40 bslbf
duration 24 uimsbf
running_status 3 uimsbf
free_CA_mode 1 bslbf
descriptors_loop_length 12 uimsbf
for(j=0;j<N;j++)
descriptor()
}
CRC_32 32 rpchof
}
EIT P/F
非VOD节目,每个节目将有两个分段(section)用于描述当前/后续事件信息
Section_number=0x00的分段用于描述当前时间信息,
section_number=0x01的分段用于描述后续信息。
即使没有当前或者后续事件存在时,我们也要传送Section_number=0x00 section_number=0x01的EIT P/F空分段。
EIT SCH
(1)EIT时间表分布于16个table_id,0x50-0x5f用于实际流,0x60-0x6f用于其他流。
(2)由于用8BIT表示section_number,所以一个子表最多可以用256个section,而这些section又被划分为32个segment,于是每个segment包含8个section.
(3)每个segment包含有关3小时内任何时间点开始的时间信息。
(4)每个子表最多可传输32 * 3 = 96h = 4 day,最多有16张子表,于是16 * 4 = 64 day.所以EPG最多可包含64天的时间表,具体看网络中的实际情况。
在EIT的循环描述符中可以为:
1 short event descriptor
短事件描述符
短事件描述符以文本方式提供了事件的名称和该事件的简短描述,见表75。
表75 短事件描述符
语 法 |
位数 |
助记符 |
short_event_descriptor(){ |
|
|
descriptor_tag |
8 |
uimsbf |
descriptor_length |
8 |
uimsbf |
ISO 639_2_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-2语言代码 ISO 639-2_language_code
24位字段,指明后续的文本字段的语言。该字段包含一个由ISO 639-2定义的3字符代码。ISO 639-2/B和 ISO 639-2/T都可以使用。每个字符都按照GB/T 15273.1-1994编码为8位,并依次插入24位字段。
例如:法语的3字符代码“fre”,可编码为:’0110 0110 0111 0010 0110 0101’。
事件名称长度 event_name_length
8位字段,以字节为单位给出事件名称的长度。
事件名称字符 event_name_char
8位字段,一个字符串给出事件的名称。文本信息编码所使用的字符集和方法见附录A。
文本长度 text_length
8位字段,以字节为单位给出后续描述事件的文本的长度。
文本字符 text_char
8位字段,一个字符串给出事件的文本描述。文本信息编码所使用的字符集和方法见附录A。
2 Extend event descriptor
扩展事件描述符给出了一个事件的详细文本描述。除了短事件描述符外,还可使用扩展事件描述符。如果一个事件的信息长度超过256字节,可以使用多于一个的相关联的扩展事件描述符来描述。文本信息可以分为两个栏目,一栏为条目的描述,另一栏为条目的内容。这种结构的典型应用是给出演职员列表,例如条目描述域可能是“制片人”,那么条目内容域可以给出制片人的名字。
表44 扩展事件描述符
语法 |
位数 |
助记符 |
extended_event_descriptor( ){ |
|
|
descriptor_tag |
8 |
uimsbf |
descriptor_length |
8 |
uimsbf |
descriptor_number |
4 |
uimsbf |
last_descriptor_number |
4 |
uimsbf |
ISO 639-2_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 |
8 |
uimsbf |
for(j = 0; j < N; j++){ |
|
|
item_char |
8 |
uimsbf |
} |
|
|
} |
|
|
text_length |
8 |
uimsbf |
for( i= 0; i< N; i++){ |
|
|
text_char |
8 |
uimsbf |
} |
|
|
} |
|
|
扩展事件描述符的语义:
描述符序号 descriptor_number
4位字段,给出了描述符的序号,用于描述使用多个扩展事件描述符时的关联信息。相关联的extend_event_descriptor集合的第一个extend_event_descriptor的descriptor_number应为“0x00”。随着本段内extended_event_descriptor个数的增加,descriptor_number以步长1递增。
尾描述符序号 last_descriptor_number
4位字段,给出了相关联的extend_event_descriptor集合中的最后一个描述符(即descriptor_number最大的描述符)的序号。
ISO 639-2语言代码 ISO 639-2_language_code
24位字段,包含了符合ISO 639-2标准的3字符语言代码,说明后面文本字段所用的语言。ISO 639.2/B和ISO 639.2/T都可以使用。每个字符都按照GB/T 15273.1-1994标准编码为8位,依次插入24位字段。
例如:法语的3字符代码“fre”,可编码为:’0110 0110 0111 0010 0110 0101’。
条目长度 length_of_item
8位字段,以字节为单位给出后续条目的长度。
条目描述长度 item_description_length
8位字段,以字节为单位给出条目描述的长度。
条目描述字符 item_description_char
8位字段,“item_description_char”串给出条目的描述。文本信息所使用的字符集和编码方法见附录A。
条目长度 item_length
8位字段,以字节为单位给出后续条目文本的长度。
条目字符 item_char
8位字段,“item_char”串给出条目的描述。文本信息所使用的字符集和编码方法见附录A。
文本长度 text_length
8位字段,以字节为单位给出未列进条目的文本长度。
文本字符 text_char
8位字段,“text_char”串给出未列进条目的文本的内容。文本信息所使用的字符集和编码方法见附录A。