http://blog.163.com/fusjwaters@126/blog/static/42178807200772191254450/
2007-08-21 09:12:54| 分类: 默认分类 | 标签: |字号大中小 订阅
主要负责:
管理电视节目PF信息的,
typedef struct tagEIT
{
int iTransport_stream_id;
int original_network_id;
int iEventId;
time* pstStartTime;
int iduration;
}EIT, PEIT;
EIT分类:
actual TS: present/following event information = table_id = 0x4E
other TS: present/following event information = table_id = 0x4F
actual TS: event schedual information = table_id = 0x50 to 0x4f
other TS: event schedual information : table_id = 0x60 to ox6F
所有的EIT sub-table为了绝对Ts流都有一个相同的transport_stream_id 和
original_network_id值。
/*=== EIT的事件分类 ===*/
/*-- PF的事件类型 --*/
#define EVENT_TYPE_PF_ACTUAL 0x4E
#define EVENT_TYPE_PF_OTHER 0x4F
/*-- Schedual的事件类型--*/
#define EVENT_TYPE_SCHEUDAL_ACTUAL 0x50-0x4F
#define EVENT_TYPE_SCHEUDAL_OTHER 0x60-0x6F
也可以用位与的操作来对16进制数据进行分解来得到EIT信息的分类。
EIT信息的存储方式:
分段存储。任何段的信息都由都应该在ts流中的PID为0x0012来表示。
enum _table_id_
{
program_association_section = 0x00,
condition_acess_section = 0x01,
program_map_section = 0x02,
transport_stream_descripton_section = 0x03,
reserved = 0x01~0x3F,
network_information_section_actual_network = 0x40,
network_information_section_other_network = 0x41,
service_description_section_actual_transport_stream = 0x42,
reserved = 0x43~0x45,
service_description_section_other_transport_stream = 0x46,
reserved = 0x47~0x49,
bouquet_association_section = 0x4A,
reserved = 0x4B~0x4D,
//FP信息
event_information_section_actual_transport_stream_presentAndfollowing = 0x4E,
event_information_section_other_transport_stream_presentfollowing = 0x4F,
//PF的预约信息
event_inforamtion_section_actual_transport_stream_schedule = 0x50~0x5F,
event_inforamtion_section_other_transport_stream_schedual
}table_id;
struct tagEIT
{
int table_id;
section_length;
int network_id;
int version_number;
}EIT, *PEIT;
EIT Schedule信息
1)EIT Schedule结构
遵从如下规则:
a、EIT/Schedule分配了16个table_id,0x50-0x5F给当前TS,0x60-0x6F给其它TS,这些id按照时间顺序排列;
b、子表下的256个section被分为32段(segment),每8个section一个段(segment)。Segment#1,从section0到7,
segment#2,从section8到15,等等;
c、每段包含三个小时内开始的事件信息;
d、段内事件信息按照时间排列;
e、如果一个段(segment)有n节(section),而n<8,这个信息必须放在段中前n个节中,还要显式指明最后一节的位置:S0+n-1(S0是段中第一节),这个值在EIT的segment_last_section_number中。例如,第二段只有两节,那么segment_last_section_number包含值8+2-1=9;
f、如果段中有节的话,段的segment_last_section_number应当有值s0+7;
g、完全空的段通过空节(不含任何loop over事件)表示,段的vsegment_last_section_number值为s0+0;
h、段中事件的安排遵从一个时间t0。
t0是通用时间坐标(Universal Time Coordinated(UTC))的“last midnight”。
举个例子:UTC-6的下午5点,就是UTC-0的下午11点,即从“last midnight”算起23小时。因此对于UTC-6,t0就是前一天的下午6点;
i、table_id 0x50(对其它TS是0x60)的第0段,包含从午夜(UTC时间)到“今天”02:59:59(UTC时间)(三个小时)的事件信息。第1段包含从03:00:00到05:59:59(UTC时间)的事件信息,依此类推。这就意味着,第一个子表包含从“今天”UTC午夜时间算起前4天的信息;
j、last_section_number用来指明子表的结束位置;
k、last_table_id用来指明整个EIT/Schedule结构的结束位置;
l、与过去事件相关的段可以用空段代替,参见g规则;
m、EIT/Schedule包含的事件定义中的running_status应当设为“为定义”即0x00;
n、EIT/Schedule表不适用于NVOD涉及的服务,因为这些服务带有未定义开始时间的事件;
2)EIT 加密
EIT Schedule表格可以被加密。为了与条件接入相联系,必须分配一个service_id(=MPEG-2 program_number)来描述加密的EIT Schedule Tables,这个service_id在PSI中。EIT在PMT中定义,service_id看成由一个private stream组成的各种电视节目(The EIT is identified in the Program Map Table (PMT) section for this service_id as a programme
consisting of one private stream),PMT包含一个或多个CA_descriptor来验证相关的CA码流。为达到这个目的,在DVB应用程序中service_id的值0xFFFF被保留