TS中的EPG解析

TS中的EPG解析

芈亚罗吧

1. 概述

EPG是ElectronicProgram Guide,即电子节目指南,通常用来传输节目预告。EPG信息的文档主要ETSI EN 300 468,该文档记录了SI信息。

MPEG-2中定义了PSI信息,即常见的节目关联表(PAT)、条件接收表(CAT)、节目映射表(PMT)和网络信息表(NIT)。后来DVB标准对MPEG-2的PSI进行了扩充,在PSI四个表的基础上再增加了九个表,形成SI,它是对整个系统所有码流的描述,描述系统传输内容、广播数据流的编排和时间表等的数据。

2. 解析目标

目前这个项目主要的目标是:从多套复用节目的TS流中将这些节目的节目预告(即主要是EPG信息)解析出来,而TS流中不存在的节目的EPG可以不用解析。

3. EPG相关的表

SI信息的9个表中,和节目预告相关的主要是:

l        业务描述表(SDT):描述系统业务数据,例如业务名称、业务提供者等。

l        事件信息表(EIT):节目预告中最重要的表,记录了节目相关的事件,例如事件名称、起始时间、持续时间等。

l        时间和日期表(TDT):当前的日期时间,但是这个是北京本地时间。

l        时间偏移表(TOT):当前日期时间和本地日期时间的偏移关系,比如北京时间的偏移量是+8:00:00。

在考虑随机存取的系统中,即使结构没有发生变化,也建议对EPG有关的SI段重复传输数次。

l        所有当前传输流的SDT的段应至少每2s传输一次;

l        所有其它传输流的SDT的段应至少每10s传输一次;

l        所有当前传输流的EIT当前/后续表的段应至少每2s传输一次;

l        所有其它传输流的EIT当前/后续表的段应至少每10s传输一次;

l        所有未来八日内的EIT 时间表的段应至少每10s 传输一次,包括八日内其它传输流的EIT 时间表的段;

l        所有超过未来八日的EIT 时间表的段应至少每30s传输一次,包括超过未来八日的其它传输流的EIT时间表的段;

l        所有TDT和TOT的段应至少每30s传输一次。

下面将重点讨论SDT、TDT、TOT和EIT表的解析。

4. SDT

SDT表主要需要解析的是各套节目对应的服务名(如BTV-1)和服务提供商名(如北京广电局)。

PID固定为0x0011。但SDT和BAT的PID完全一致,因此要通过table_id来区分。table_id=0x42表示是当前服务的SDT_Active表,table_id=0x46表示是其他频道上服务的SDT_Other表。

在这里就主要解析SDT_Active即可,SDT_Other可以不考虑。

重点关注的服务名和服务提供商名记录在表的service_descriptor里。

5. TDT和TOT

解析TDT、TOT的目的是为了知道当前当地的时间。

TDT、TOT的PID都是0x0014。只有通过table_id来区分,TDT的table_id为0x70,TOT 的table_id为0x73。

TDT中主要需要解析的字段为UTC_time,指的是世界统一时间,但这个时间通常都不是北京时间。北京时间通常是在此基础上加8小时,因为北京时间是东八区时间嘛。UTC_time的解析格式见ETSI EN 300 468的附录。

TOT主要需要解析的字段为UTCTime和LocalTimeOffset。UTCTime含义和值通常与TDT一样,LocalTimeOffset则记录了当地时间与UTCTime之间的差值,对北京而言这个值应该为+8小时。

注意:如果流不太正规只有TDT没有TOT,我的处理方式是按LocalTimeOffset为+8小时设定;如果只有TOT没有TDT,则就按照TOT的UTCTime设定UTCTime。

6. EIT

EIT是所有这些表里面最复杂但也是最关键最核心的。

标准里面将一个节目中的一个时间片断叫做一个Event (事件),它记载了起始时间、持续时间、事件名称和事件的简单描述。例如:一个事件为19:00---19:30播放新闻联播,它的起始时间是19:00;持续时间是30分钟;节目名称是新闻联播,简单描述无。 EIT中记录了大量的事件信息。

6.1 EIT功能表

EIT表按功能分为4类EIT功能表:

含义

Table_id

EIT ACTUAL PF

当前频道上实际的出现/跟随事件信息

0x4e

EIT OTHER PF

其它频道上的出现/跟随事件信息

0x4f

EIT actual schedule

表示的是当前频道上的节目时间表

0x50-0x5f

EIT other schedule

表示的是其它频道上的节目时间表

0x60-0x6f

对这四个类中做个简要说明:

l        active对应存在的频道中的事件信息,other对其他频道中的事件信息。

l        EIT ACTUAL PF和EIT OTHER PF的结构完全类似,EIT actual schedule 和EIT other schedule的结构完全类似。

l        由于项目的原因,只需要解析存在的频道中的事件信息,所以other中的信息将不考虑。其实active和other的结构是完全一样的。

6.2 子表

Table_id相同的EIT表。

EIT ACTUAL PF和 EIT OTHERPF最多只能有一个子表,EIT actual schedule和EIT other schedule则最多可能有16个子表。

6.3 段

一个子表(一个固定的tablee_id),最多只能有256个section,section_num从0—255。子表语法结构中都有个8bit字段last_section_number,表示该子表最多由多少个段组成。

6.4节

重点说明下EIT子表中引入的节(segment)这个概念。

节是这样定义的:节最多有8个段,一个EIT子表被分成32个节。每个节所包含的事件信息最长不能超过3个小时。

每个节所包含的事件信息最长不能超过3个小时,这才是引入节的原因,好控制事件的时间长度,否则这个时间要乱套。

每8个段组成一个节。Section_num = 0—7为segment 0,Section_num = 8—15,为segment 1,……Section_num = 248—255,为segment 31。

允许某节中只有前面几个段,后面的段没有,segment_last_section_number标识节中有哪些有效的段。

允许子表中只有前面的几个节,后面的节都不存在,last_section_number来标识。

意思就是说,假设上一節只有1个段,如section 0,那麼空下來的那些段號如section 1——section 7將無效,新的节將從對齊的位置(段號為8的倍數)開始,即从section 8开始。

包含的节目最大时间

EIT功能表(active p/f schedule等)

最多包含16个子表

64天

EIT子表

最多包含32个节

4天

Segment

最多包含8个段

3小时

Section

在实际运营中一般会只传一周的节目指南,也就是说只要两个子表就足够了。

EIT ACTUAL PF和EIT OTHER PF 只有两个段,分别表示正在播放和下一个节目。所以相对来说要简单的多。

图1:EIT active P/F的结构图

 

图2:EIT active schedule的结构图

6.5 解析步骤

输入:一个EIT Section

第1步:定位频道。transport_stream_id,在该频道下找到要检测的节目service_id。

第2步:利用table-id得知此EIT Section位于哪个功能表的哪个子表中。

第3步:利用section_num得知此EIT Section位于哪个节中。

第4步:解析此section信息。重点是解析其中的short_event_descriptor得到事件信息。

第5步:干掉不要的段。

       5.1 干掉不存在的子表。last_table_id之後的子表都不存在,即子表的所有段都不存在。

       5.2 干掉當前子表的段。LastSectionNumber之後的段都不存在。

       5.3 干掉當前节内的段。SegmentLastSectionNumber之後到下一個节之前的段不存在。

第6步:更新整个事件数据库。

附件

某個素材的某個頻道的電子節目指南(部份)

电子节目指南      

时间 2014/1/2817:40:21

   业务标识符:0x00cb

   业务名称:CETV-SD

   业务提供者名称:成都广电局

   业务服务类型:数字电视业务

   业务加扰状态:业务未被加扰

   传送流标识符:0x0002

   原始网络标识符:0x0001

   当地时间:2014-01-28 17:40:13

  GMT标准时间:2014-01-2809:40:13

事件序号   事件标识符  事件名称                  起始时间            持续时间       

00        0x1236      奇趣大自然                2006-06-14 01:16:00   00:30:00       

01        0x1237      奇趣宝典(270)           2006-06-14 01:46:00   00:42:00       

02        0x1238      留洋故事                  2006-06-14 02:28:00   01:02:00       

03        0x1239      教育资讯                  2006-06-14 03:30:00   00:38:00       

04        0x123a      午间剧场:都是天使惹的祸(4、5)2006-06-14 04:08:00  02:12:00       

05        0x123b      名家论坛                  2006-06-14 06:20:00   02:05:00       

06        0x123c      机器人大擂台(1)         2006-06-1408:25:00   00:26:00       

07        0x123d      看电影学英语              2006-06-14 08:51:00   00:42:00       

08         0x123e      七彩虹                    2006-06-1409:33:00   01:00:00       

09         0x123f      星奇吧(308)            2006-06-14 10:33:00   00:36:00         


猜你喜欢

转载自blog.csdn.net/samsho2/article/details/18844585