【TV】EPG

来源:互联网 发布:姑苏学办公软件 编辑:程序博客网 时间:2024/04/27 16:27

EPG

目录 

 

EPG功能实现...2

第一章      EPG简介... 2

1.EPG的产生...2

第二章.EPG信息的构成与传输...3

1  EPG信息的构成...3

2  基本EPG 信息的传输方式...3

2.1 说明...5

2.2 段到传送流(TS)包的映射...6

2.3 PID 及表标识符字段编码...6

2.4 重复率...7

3  SI信息的插入...8

4 网络信息...8

4.1网络基本信息的构成...8

4.2 TS流信息...8

4.3 网络信息在NIT表中的表示...9

5.PSI/SI主要字表之间逻辑关系...11

第三章EPG在STB上的实现...12

1  EPG信息的提取...12

2 实际应用中EPG接收的步骤...12

3 节目内容和时间信息的获取...14

3.1 接收TDT表...14

3.2 接收EIT表...14

3.3 注意事项...16

4.MJD和UTC时间转换...17


EPG功能实现

第一章    EPG简介

1.EPG的产生

EPG的英文全称是Electronic Program Guide,一般称“电子节目指南”,它是传输流中所包含的信息。

数字电视相对于传统的模拟电视而言,传输更多的数字化信息,多种业务可以混合在一起通过一个信道传输。因此,数字电视已经不是单一的电视业务,而是指通过电视传输通道传输的数字业务,包括视频、音频、图像、数据等。这就需要引入一个重要的概念--服务信息(ServiceInformation, SI)。全球数字电视已经进入快速发展阶段,可以预见,在今后几年,与数字电视相关的业务将大幅度增长。随之而来的问题是,当数字电视能为用户提供数倍于目前节目量的节目及多种业务时,用户怎样才能便捷地找到所要的节目和信息呢?通过SI信息实现的电子节目指南(EPG)能更好的帮助用户搜索数字电视频道,获得节目播出时间,了解节目内容,预定喜爱的节目,找到更多的对用户有用的信息,使数字电视具备更多的交互功能。因此,电子节目指南(EPG)显然是必不可少的工具。
    数字电视与模拟电视节目选择的方式完全不同,模拟电视每个频道对应一个节目,只要调到相应的频率,就可以看到图像。而在数字电视中,多个节目被复用到一个码流中,每个节目只占有码流中的部分包,一个物理的频道只能给出包含多个节目的传输流,要观看其中的某个节目,还必须从码流中提取出节目对应的传输包,然后再进行解码。怎样从众多的节目和服务中选取所需要的服务就变得比较复杂。此外,各种影响接收的技术参数对用户来说也是非常难懂的。为此,提供一些必要的服务信息以帮助用户选择节目使非常必要的。



第二章.EPG信息的构成与传输

1  EPG信息的构成

EPG信息分为基本EPG信息和扩展EPG信息两种。

基本EPG信息是用SI信息表进行描述,以文本格式表示的与节目描述有关的网络信息、节目群信息、业务描述信息和事件信息,可以完全通过GY/Z 174-2001中规定的NIT、BAT、SDT、EIT和EMT进行表示和传输,这些表被分为一个或若干个段(SECTION),每个分段包含有一部分或全部关于表的信息,然后插入到TS流传输包中。构成图如下:  

 基本EPG信息的组成构成

扩展EPG信息是在基本EPG信息基础上的扩充,它描述网络、业务群、业务、事件、EPG提供商以及广告等方面的扩充信息。当用于数字电视平台之间交换EPG信息时,按XML格式描述全部EPG信息,内容被封装成具有多级目录结构的文件系统,通过数据转盘传递,这些信息的入口采用EPG映射表(EMT)进行描述。基本EPG信息是必需的,扩展EPG信息是可选的。

EPG信息组织层次图

2  基本EPG 信息的传输方式

基本EPG信息采用表传输方式。

在数字电视中,所有视频、音频、文字、图片等经数字化处理后都变成了数据,并按照MPEG-2的标准打包,形成固定长度(188个字节)的传送包,然后将这些数据包进行复用,形成传送码流(TS),通常一个频道对应一个TS流,一个频道的TS流由多个节目及业务组成。在TS流中如果没有引导信息,机顶盒将无法找到需要的码流,所以在MPEG-2中,专门定义了PSI信息,其作用是自动设置和引导接收机进行解码。PSI信息在复用时通过复用器插入到TS流中,并用特定的PID(包标识符)进行标识。
     在MPEG-2标准中定义的节目信息PSI,是对单一码流的描述,由于系统通常存在多个码流,为了使使用者能在多码流中快速地找出自己需要的业务,在DVB标准中对MPEG-2的PSI进行了扩充,在PSI四个表的基础上再增加了九个表,形成SI。SI是对整个系统所有码流的描述,描述系统传输内容、广播数据流的编排和时间表等的数据,它包括PSI信息。

PSI即为节目专用信息。PSI由节目关联表(PAT)、条件接收表(CAT)、节目映射表(PMT)和网络信息表(NIT)组成。

节目关联表(ProgramAssociation Table,PAT):PAT由PID0X0000标识,它的主要作用是指出传输码流中包括那些节目,节目的编号与对应的节目映射表(Program Map Table, PMT),并指定网络信息表(Network Information Table,NIT)所对应的PID。
     条件接收表(ConditionalAccess Table, CAT):CAT由PID0X0001标识,CAT提供系统中条件接收的信息,指定CA系统与它们相应的授权管理信息EMM之间的联系,指定EMM的PID,以及其它相关的参数。在武汉数字电视平台中它指定爱迪德CA系统的EMM为0X66,永新同方CA系统的EMM为0X68,这样机顶盒根据这一数值去解析CA加密信息。
     PMT:PMT指出相应节目中包含的内容,即节目由那些流构成,以及这些流的类型(视频、音频、数据),指定节目中各流所对应的PID,以及该节目的PCR所对应的PID。
     NIT:NIT提供与多组传输流、物理网络及网络传输相关的一些信息,比如用于调谐的频率信息以及编码方式、调制方式等参数方面的信息,例如武汉电视台的传输频点为459MHz,调制方式为64QAM,纠错方式为RS方式等。

SI信息共定义了9个表,但有一些表实际意义不大 :
1)业务群关联表(BAT):

-     业务群关联表提供了业务群相关的信息,给出了业务群的名称以及每个业务群中的业务列表。

2)业务描述表(SDT):

-     业务描述表包含了描述系统中业务的数据,例如业务名称、业务提供者等。

3)事件信息表(EIT):

-     事件信息表包含了与事件或节目相关的数据,例如事件名称、起始时间、持续时间等。

-     不同的描述符用于不同类型的事件信息的传输,例如不同的业务类型。

4)运行状态表(RST):

-     运行状态表给出了事件的状态(运行/非运行)。运行状态表更新这些信息,允许自动适时切换事件。

5)时间和日期表(TDT):

-     时间和日期表给出了与当前的时间和日期相关的信息。由于这些信息频繁更新,所以需要使用一个单独的表。

6)时间偏移表(TOT):

-     时间偏移表给出了与当前的时间、日期和本地时间偏移相关的信息。由于时间信息频繁更新,所以需要使用一个单独的表。

7)填充表(ST):

-     填充表用于使现有的段无效,例如在一个传输系统的边界。

8)选择信息表(SIT):

-     选择信息表仅用于码流片段(例如,记录的一段码流)中,它包含了描述该码流片段的业务信息的概要数据。

9)间断信息表(DIT):

-     间断信息表仅用于码流片段(例如,记录的一段码流)中,它将插入到码流片段业务信息间断的地方。

GY/Z 174-2001中NIT、BAT、SDT、EIT都被分成为一个或若干个段表示,然后插入到TS包中。

段是一种用来把SI信息表和EPG信息表映射成TS包的语法结构。这些信息语法结构符合GB/T17975.1-2000定义的专用段语法结构。

EPG的功能均可通过SI来实现,也就是说SI是实现EPG功能的前提。在SI中,最重要的是NIT、EIT和SDT,利用这3个表中的数据就可以构成功能不同的EPG。
    NIT的作用在于提供调谐的频率信息以及编码方式、调制方式等参数方面的信息。SDT的作用是提供对每个业务的描述,使用户能方便地了解每个业务的内容。对于每一个TS都有一个SDT与之对应。EIT实际上是一个节目表,对于每一个节目都存在一个独立的EIT。EPG包含两个部分:一是播出前端的EPG编辑器;二是用户端接收机相应的控制软件,两部分一一对应,每个接收机的相关部分必须要按照前端定义的数据结构来定制,从而接收显示前端送出的业务信息。

以上这些表在传送流中以数据段的形式传送,不同的信息表在传送流中通过赋予不同的特定的PID来进行区分。而具有相同PID的不同信息表则进行由表标识符TABLE ID来区分,在接收端通过查这些特定的PID来找到它们。这里说明一下,TS中有两种标识符,一种是包标识符,一种是表标识符。例如SI中的SDT的每一个表都对一个特定TS中的业务进行描述,这些业务可能是这个表所存在的TS的一部分,也可能是其它TS的一部分,这些SDT的PID都是相同的,这时候我们就可以通过不同的表标识符来区分它们,从而识别出那一个表所描述的业务是那一个TS的。

2.1 说明

段的长度是可变的。除EIT表外,每个表中的段限长为1024 字节,但EIT中的段限长为4096 字节。每一个段由以下元素的组合唯一标识:

a)   表标识符(table_id)

1) 表标识符标识段所属的表;

2) 一些表标识符已分别被ISO 和ETSI 定义。表标识符的其它值可以由用户根据特定目的自行分配。

b)   表标识符扩展(table_id_extension)

1) 表标识符扩展用于标识子表;

2) 子表的解释:

子表 sub_table,具有相同表标识符(table_id)的段的集合,并且:

① 对NIT

具有相同的table_id_extension(network_id)和version_number;

②对BAT

具有相同的table_id_extension(bouquet_id)和version_number;

③ 对SDT

具有相同的table_id_extension(transport_stream_id ),相同的original_network_id 和

version_number;

④ 对EIT

具有相同的table_id_extension( service_id ),相同的transport_stream_id 、

original_network_id和version_number。

当段语法指示(section_syntax_indicator)字段置“1”时,表标识符扩展(table_id_extension)

字段等同于段的第四和第五字节。

c)   段号(section_number)

1) 段号字段用于解码器将特定子表的段以原始顺序重新组合。本指导性技术文件建议段按

顺序传输,除非某些子表的段需要比其它的段更频繁地传输,例如出于随机存取的考虑;

2) 在本指导性技术文件中指定的各种SI 信息表和EPG 映射表,段编号也适用于子表;

d)   版本号(version_number)

1) 当本指导性技术文件中规定的SI信息表和EPG映射表所描述的TS流特征发生变化时(例如:新事件开始,给定业务的组成的基本流发生变化),应发送更新了的业务信息数据。

GY/Z 203—2004

新版本的业务信息以传送一子表为标志,它与前子表具有相同的标识符,但版本号改为下一值;

e)   当前/后续指示符(current_next_indicator)

每一段都要标以“当前”有效或“后续”有效。它使得新的SI版本可以在TS流特征发生变化之前传输,让解码器能够为变化做准备。然而,一个段的下一个版本的提前传输不是必需的,但如果被传输,它将成为该段的下一个正确版本。

2.2 段到传送流(TS)包的映射

段可直接映射到TS包中。段可能起始于TS包有效负载的起始处,但这并不是必需的,因为TS包有效负载的第一个段的起始位置是由pointer_field 字段指定的。一个TS包内不允许存在多于一个的pointer_field 字段,其余段的起始位置均可从第一个段及其后各段的长度中计算出来,这是因为语法规定一个TS包中的段之间不应有空隙。

在任一PID值的TS包中,一个段应在下一个段允许开始之前结束,否则就无法识别数据属于哪个段标题。若一个段在TS包的末尾前结束了,但又不便打开另一个段,则提供一种填充机制来填满剩余空间。该机制对包中剩下的每个字节均填充为0xFF 。这样table_id 就不允许取值为0xFF ,以免与填充相混淆。一旦一个段的末尾出现了字节0xFF,该TS包的剩余字节必然都被填充为0xFF,从而允许解码器丢弃TS 包的剩余部分。填充也可用一般的adaptation_field机制实现。

2.3 PID 及表标识符字段编码

用于传送PSI、SI信息段和EPG信息段的TS包的PID值见表

 

表标识符值(table_id)的分配

 

2.4 重复率

在考虑随机存取的系统中,即使结构没有发生变化,也建议对EPG有关的SI段重复传输数次。在传输码率为100兆比特/秒的系统中,对于标有同一个PID、table_id及table_id_extension值的业务信息段,该段的最后一个字节与下一个段的首字节发送的最小时间间隔为25毫秒。

在卫星或有线传输系统中,建议采用以下最小重复率:

a) 所有NIT的段应至少每10s传输一次,包括其它网络的NIT的段;

b) 所有BAT的段应至少每10s传输一次;

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

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

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

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

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

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

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

3  SI信息的插入

SI一般在复用器合成TS时插入。按照SI标准形成各表的数据段后,数据可以三种方式送入复用器:

  (1)将各表数据通过复用器生产厂家提供的应用软件接口(API),由复用器插入节目码流。其优点是结构简单、系统稳定;缺点是需要复用器厂家提供接口资料和硬件支持,对不同厂家复用器需要编写不同的软件。

  (2)将各表数据段按MPEG-2标准打包,通过码流播出卡输出只包含SI信息的MPEG-2码流,再将之送入复用器异步串行接口(ASI)与节目码流复用。其优点是不需要复用器厂家支持,有一定的通用性;缺点是系统复杂,稳定性、可靠性不如方法(1),系统资源有一些浪费。

  (3)一些条件接收厂商在复用器后端的加扰器提供接口,因此可以通过局域网将各数据表送入加扰器,由加扰器向码流中插入SI信息。其优缺点与方式(1)类似。

4 网络信息

网络信息分为网络基本信息和TS流信息。它包含了与通过一个给定的网络传输的复用流/TS流的物理结构相关的信息,以及与网络自身特性的信息。

4.1网络基本信息的构成

包含网络标识、网络名称、多语言网络名称和连接信息。

网络标识:在整个国家范围内唯一确定一个网络,用以区别其它的网络。网络标识通过NIT表中的网络标识符(network_id)进行描述。

网络名称:通过NIT中的网络名称进行描述符(network_name_descriptor)进行描述。

多语言网络名称:通过NIT中的多语言网络名称描述符(multilingual_network_name_descriptor)进行描述,数字电视接收终端可以根据需要选择相应的语言显示网络名称。

链接信息:通过NIT表中的链接描述符(linkage_descriptor)进行描述,用于给出与包含网络附加信息、EPG信息的业务的链接关系,或者用于给出与包含了全部网络SI信息的TS流的链接关系。

a) 当linkage_type=1时,链接指向一个包含网络附加信息的业务;

b) 当linkage_type=2时,链接指向一个包含本网络的EPG信息的业务;

c)当linkage_type=4时,链接指向一个包含了全部网络SI信息的TS流。

4.2 TS流信息

每个网络都包含一个到多个TS流,对一个具体的TS流,它包含TS流标识、原始网络标识、TS流物理特性、TS流所包含业务列表信息。

TS标识与原始网络标识:共同标识在一个网络中的Ts流。这两个标识出现在NIT中,分别为transport_stream_id和original_network_id。

传输系统描述:传输系统描述给出了TS流在卫星、有线或者地面三种传输网络中传输时传输通道的参数。对一个TS而言,无论采用哪种传输网络,传输通道的物理参数总是唯一的。

a)      如果TS流在卫星传输网络传输,使用以下参数对传输通道进行描述:频率、轨道位置、东西标志、极化方式、调制方式、符号率、前向纠错内码。由NIT表中的卫星传输系统描述符(satellite_delivery_system_descriptor)描述。

b)     如果TS在有线传输网络中传输,使用以下参数对传输通道进行描述:频率、前向纠错外码、调制方式、符号率、前向纠错内码。由NIT表中的有线传输系统描述符(cable_delivery_system_descriptor)描述。

c)       如果TS在地面传输网络中传输,由NIT表中的地面传输系统描述符(terrestrial_delivery_system_descriptor)描述,参数待定,国内并未出台相关规定。

频率列表信息:给出了由多个频率传送的某个复用流的附加频率的完整列表,通过NIT表中的频率描述符(frequency_list_descriptor)描述。

业务列表信息:给出了网络中包含的全部业务的标识及类型。通过NIT表中的业务列表描述(service_list_descriptor)描述,每个业务通过字段service_id唯一标识,通过字段service_type指名该业务的类型。Service_id相当于PMY表中的program_number,但业务类型值为0x04(service_type=0x04)时(即NVOD参考业务)除外,这种情况下,service_id没有对应的program_number。

网络信息构成图

 

4.3 网络信息在NIT表中的表示

   NIT表在传输时被切分成网络信息段(network_information_section)。任何构成NIT表的段,都由PID为0x10的TS包传输。描述现行网络的NIT表的任何段的table_id值应为0x40,且具有相同的table_id_ectension(network_id)。指向一个现行网络之外的其它网络的NIT表的任何段的table_id值应取0x41。

                              

 

 

 

 

 

 

 

 

  网络信息在NIT段中的表示

 

5.PSI/SI主要字表之间逻辑关系

    理解了这张图也就理解了PSI/SI主要子表之间的逻辑关系,进而就掌握了SI标准的核心内容。

 

 


第三章 EPG在STB上的实现

1  EPG信息的提取

要实现EPG,利用SI表来实现是很自然的方法。在这种方法中,发送端和接收端必须达成协议。发送端必须发送接收端设备实现EPG所需的SI表,而接收端接收发送端发出的SI表,通过信息提取和信息重组,组织构成EPG,并显示给用户。

一般而言,PAT表的PID号为“0x00”,解复用器工作总是通过寻找PAT表开始。PAT给出了构成传送流中各个节目业务的PMT的PID,同时也给出了NIT的PID号。根据PID值及对应的Table ID值可以从流中解出相应的PMT、NIT、SDT、EIT等信息。机顶盒接收端的解析主要负责这些SI数据信息的重建。信息内容应与PSI和SI表中的信息相对应,它可按照Network-TransportStream-Service-Event的分层顺序描述,同时内嵌TransportStream-Program(Service)-Element Stream的分层顺序。

 

利用DVB-SI表实现EPG流程图

 

SI表的组织流程

 

2 实际应用中EPG接收的步骤

1)      输入频率、符号率、调制方式锁定频道。

2)      接收当前频道上的PAT表,已知条件是PAT的PID固定为0,将PAT表解析保存。

3)      从PAT中取得NIT表的PID:

    方法是:当program_number=0时,取得network_pid。当然将NIT表的PID固定认为是0x0010也是一种解决方法,但这种解决方法不是最基本的方式。

说明:如果从PAT表中找不到NIT的PID,则将NIT的PID默认为0x0010。

4)      根据NIT表的PID取得NIT表,解析并保存。

5)      从NIT表中的第一个descriptor()中取得network_name_descriptor可以得到网络名称,这个一般描述的是网络运营商的名称,可以在屏幕上显示,根据需要显示,不是必须的。从NIT表中的第二个descriptor()循环中取得当前网络所管理的频道资源信息表cable_delivery_system_descriptor(),从中可以得到所有几个频道的关键字段值frequency,modulation,symbol_rate。至此,网络信息资源已全部获得,这是关键的一步。

6)      根据上述网络新,建上一个循环,分别各自锁定不同的频道。

7)      在已锁定的频道下,接收当前PAT表(PID=0)。通过分析program_number字段就可以知道在当前频道上共播放了多少个节目(服务),记录下每个服务的PMT表,解析并保存。

8)      通过一个PMT表的PID就可以接收这个节目的PMT表,解析并保存。

9)      在PMT表中取得以下几个关键字段:PCR_PID,分别取得流类型字段stream_type各自对应的流的基本PID(elementary_PID),如:当stream_type=0x02时,表示是视频流,那么此时,elementary_PID代表Video_PID,当stream_type=0x04时,表示是音频流,此时,elementary_PID代表Audio_PID.。这里要着重注意:一个视频配套多个音频PID的情况。说明:到了这一步就可以实现一个节目的播放了。特别申明:在PMT表的第一个descriptor()循环中要检测是否有CA_descriptor()描述,如果有,则取出其中的CA_system_ID和CA_PID。通过这两个PID可以取得关于CA更详细的信息,关于CA这里不做更详细的解释和描述。

10)   接收SDT表,PID固定为0x0011,注意:由于SDT和BAT的PID完全一致,因此要通过table_id来区分,其中(table_id=0x4A表示是BAT表)table_id=0x42表示是当前服务描述SDT表,解析并保存。说明:table_id=0x46表示是其他频道上的服务描述SDT表。

11)   通过service_id(对应PMT表中的program_number)找到各自服务的名称(节目名,如:CCTV-1等)。在SDT表中的service_id中找到service_descriptor(),从中可以取得service_name(如:CCTV-1等)。注意:这里free_CA_mode不能做为节目是否加密的判断标志,因为在有些加扰器里,并没有对该字段进行修改,比如barco的加扰器就是如此。还要注意两个特殊字段:EIT_schedule_flag,该值为1时,表示在当前频道上出现了时间表(用于报告一个服务里所包含的一天甚至一个月的节目预告)。当EIT_present_following_flag=1时,表示在当前频道上出现了出现/跟随事件信息表(当前时刻/下一时刻的信息)。

12)   从第八步循环,完成的有节目信息的收集:说明:至此,除了节目时间、内容信息没有收集外,其余的节目信息已收集完毕,包括以下内容:

a、 共多少个频道。

b、 每个频道下有多少套可供播放的节目。

c、 每个节目的名称,相关PCR_PID,V_PID,A_PID等。

根据以上信息可以组织菜单,实现节目的播放了。

注意:要取得多语种描述的节目名称,可以从SDT表中的country_availability_descriptor()字段为:country_code=”CHN”代表中文,”ENG代表英文等”,但是要知道country_availability_descriptor()不是一定会播发的,也就是说这个表可能不存在。

 

 

3 节目内容和时间信息的获取

3.1 接收TDT表

TDT信号在数字视频广播业务信息(SI)中作为时间和日期表,在规范里属于强制规定的基础数据,不能被加扰,以供公开使用。

TDT表的PID固定为0x0014,在所有的频道上都有,字段为UTC_time,比如:0xc079124500代表:1993/10/13,12:45:00(后节会单独介绍时间如何获得),取得该时间后,就由STB的定时器自动去计算以后的时间了。

 

3.2 接收EIT表

什么是event(事件)?通俗的说事件就是一个节目中的一个时间片断。它有起始时间、持续时间、事件名称和事件的简单描述。也可以说一个service(节目)就是多个连续event的集合。例如:19:00---19:30的新闻联播就是一个event,它的起始时间是19:00;持续时间是30分钟;节目名称是新闻联播。由此看出event可以任意定义,只要具备了它的几个属性就是一个event。

EITpresent/following表示的是两个事件。EIT present是正在播出的事件,EITfollowing是即将播出的事件。

在任一频道上可以取得全网的所有的EIT表,EIT表的PID固定为0x0012

当table_id=0x4e时,表示的是当前频道上实际的出现/跟随事件信息

当table_id=0x4f时,表示的是其它频道上的出现/跟随事件信息

当table_id=0x50-0x5f时,表示的是当前频道上的节目时间表

当table_id=0x60-0x6f时,表示的是其它频道上的节目时间表

当table_id=0x4e或0x4f时,如何区分当前出现时间和跟随时间呢?通过section_number 来区分,当section_number= 0x00时表示是当前时刻,当section_number=0x01时,表示的是下一时刻。在EIT表中有几个非常关键的字段,一个是transport_stream_id表示频道,与SDT表中的对应,service_id表示服务号(节目号),同时与PMT表中的program_number对应,如何获取一个节目的事件信息呢?

首先定位频道:transport_stream_id,在该频道下找到要检测的节目service_id

当table_id=0x4e时,表示是当前频道,如果现在手中已有的当前频道的transport_stream_id和在此条件下EIT表中的transport_stream_id能对应上的话,说明正确。接下来,取得当前信息。方法是判断section_number=0x00的段确定后找到start_time,该事件的开始时间,duration持续时间,duration+start_time就是该事件(节目)的结束时间。通过descriptor()中的short_event_descriptor()可以取得多语种的节目名和节目简介信息,关键同为ISO_639_language_code(比如:“CHN”),event_name_char(比如:“新闻联播”),text_char(节目简介)。在数字电视中简介部分暂可以不取(text_char)。

注意:当table_id=”0x4e”或”0x4f”时,for(;;)里面描述的事件只有一个。只有当table_id=0x50-0x5f或0x60-0x6f时才能出现多个。同样,取下一时刻信息时,要判断的条件为section_number=0x01。

举个例子:

假如现在时间是19:20,那么我们会收到下面这样的当前/后续事件:

19:00----19:30新闻联播event_id=0x01 (当前事件)

19:31----20:00动画片event_id=0x02 (后续事件)

如果时间到了19:35,那么我们将会收到下面这样更新的当前/后续事件:

19:31----20:00动画片event_id=0x02 (当前事件)

20:01----22:00黑客帝国event_id=0x03 (后续事件)

     EIT Schedule用来发送大量的event信息,也就是EPG的节目单。例如中央1台一周的电视节目预告就需要用到EITSchedule传送。

EITSchedule被分成16个table_id传送。当table_id=0x50-0x5F,表示是现行传送流的表;当table_id=0x60-0x6F,表示是其他传送流的节目表。也就是说一个节目最多可以用16个子表用来发送节目预告。这16个table_id的EIT是按照时间先后顺序排列的。

这里要注意的是EIT子表中引入节(segment)的概念。这是个很让人迷惑的东西,我在这里解释一下。

在普通子表中分段使用段(section),每个子表语法结构中都有个8bit字段last_section_number,用来表示一个子表最多由多少个段组成。由字长我们可以看出,一个子表最多有256个段。而EIT中在子表和段中插入了一个节的层次。关于节有如下的约定:

l  一个EIT子表被分成32个节;

l  每个节最多有8个段;

l  一个EIT子表最多有256个段;

l  每个节所包含的事件信息最长不能超过3个小时;

l  如果在节中小于8个段在使用, 就需要靠字段segment_last_section_number标识节中有哪些有效的段。EIT中传送的字段segment_last_section_number值算法为s0+ n – 1。这里s0的值是节中的第一个段号,n表示该节中段的个数。

举个例子:如果某个EIT子表中第二个节只包含2个段,那么在这2个段中字段segment_last_section_number的值就是:8+ 2 - 1 = 9。大家想一想为什么这里的s0=8?因为每个节最多包含8个段,第一个节的段号是0-7,那么第二个节段号就是8-15,由此得出第二个节的s0为8。这一段约定有些难以理解,大家可以分析一些EITsechudle的码流再结合上述就能明白了;

l  节中包含所有的段,也就是有8个段。那么字段segment_last_section_number值算法为s0+7;

l  如果节中包含所有的段是空段(段中没有任何事件信息),那么字段segment_last_section_number值算法为s0+0;

l  EITTable_id=0x50(或者0x60)的第一个节包含着今天00:00-02:59:59UTC时间的三个小时的事件信息,第二个节包含了03:00:00and 05:59:59 UTC时间的三个小时的事件信息,依次类推下去,一个子表最多能包含4天的事件信息;

这样我们可以计算出一个EIT Schedule最多能存放多长时间的节目简介:

3h(单个节最长时间)*32(最大的节个数)*16(最大的子表个数)=1536h=64day

一个service的EITSchedule子表最多可以传送64天的EPG,一个子表最多可以传送4天的EPG。在实际运营中一般会只传一周的节目指南,也就是说只要两个子表就足够了

最后我用一张示意图表示EIT中子表、节(segment)、段(section)之间的关系,对上述概念做一个回顾并出几道题给大家便于加深理解。EIT子表是EPG的关键,这部分一定要熟练掌握。

 

练习:

Q1:这个EITSchedule最多能传送几天的节目预告?

Q2:Segment#0、Segment#1、Segment#31这3个节中的section字段segment_last_section_number分别是多少?

Q3:假设第一个子表0x50起始event时间是从2006年1月1日00:00开始的,那么图中Section0的起始时间是什么时间?

答案:

A1:因为table_id从0x50~0x59,一共10个子表,一张子表最多包含4天事件信息,所以这个EITSchedule最多能传送40天的节目信息。

A2:Segment#0中有8个section,所以segment_last_section_number=0+7=7

Segment#1中只有2个section,所以segment_last_section_number=8+2-1=9

Segment#31中有1个section但没有包含event内容,所以segment_last_section_number=248+0=248

A3:因为0x50最多包含4天信息,所以0x51的Section0起始时间为2006年1月5日00:00~02:59:59

 

 

这里有一个特殊的情况需要处理,那就是当running_status=0时,表示的是NVOD的参考事件描述,duration、start_time、event_name_char、text_char不属于DTV的EPG范畴,遇到这种情况需要屏蔽掉。

通过以上条件的循环,在一个物理频道上,可以取得所有的节目时间表和内容,包括一天或一周、一月、二个月的节目预告。至此,可以形成完整的EPG。

 

3.3 注意事项

1、当接收到一个表后,一定要将version_number保存下来,当第二次接收这个表时,如果发现version_number发生了变化,则一定要开始重新接收所有相关联的表。

2、还有一个可选机制,那就是接收RST表,该表用于描述EIT表的状态变化。RST表的播发不是必须的,不能作为EIT表接收的必要条件。

4.MJD和UTC时间转换

儒略日(JulianDay)是一种不用年月的计量很长时间的方法,它以公元前4713年1月1日为起点算,连续计算日期,这种发放便于求两节目之间相隔的天数。

在MJD+UTC 和 “local”MJD +local time 之间的转换是一种简单的加或减本地偏移的方法,这种方法势必会导致UTC 的进位或借位,进而会影响到MJD。下面以公式给出另外五种转换的路线图。

MJD: 修正的儒略日期;

UTC: 世界协调时;

Y : 从1900 年开始(例如:对于2003 年,Y=103);

M : 从1 月到12 月;

D : 从1 日 到 31 日;

WY : 从1900 年算起的星期数;

WN : 根据ISO 8601 规定的星期数;

WD : 从星期一到星期日(7);

K,L,M’,W,Y’:临时变量;

× :乘法;

Int:取整,忽略了余数;

Mod 7:模7,被7 除之后的余数(0 至6);

a) 如何从MJD 中计算Y,M,D。

Y′ = int[(MJD − 15078.2)/365.25]

M′ = int{[MJD −14956.1 − int(Y′ × 365.25)]/30.6001}

D = MJD −14956 − int(Y′ × 365.25)− int(M′ × 30.6001)

如果 M′ = 14 或M′ =15 ,那么K = 1;否则K = 0

Y = Y′ + K

M = M′ − 1 − K ×12

b) 如何根据Y,M,D 计算MJD

如果 M=1 或者M=2 那么L=1;否则 L=0

MJD = 14956 + D + int[(Y − L)× 365.25]+ int[(M + 1 + L ×12)× 30.6001]

c) 如何根据MJD 计算WD

WD =[(MJD + 2)mod7]+ 1

d) 如何根据WY,WN,WD 计算MJD

MJD = 15012 + WD + 7 ×{WN + int[(WY ×1461/28)+ 0.41]}

e) 如何根据MJD 计算WY,WN

W = int[(MJD/7)− 2144.64]

WY = int[(W × 28/1461)− 0.0079]

WN = W − int[(WY ×1461/28)+ 0.41]

例: MJD= 45 218 W= 4 315

Y=(19)82 WY=(19)82

M= 9(9 月) WN = 36

D = 6 WD = 1(1 月)

注:以上公式适用于19003 1日 至 2100 228 日。


第四章 EPG在机顶盒上的显示

当电视节目和EPG应用同时启动时,用户看到的可能是节目画面和EPG界面的叠加,用户所看到的电视画面从前到后可以分为三层,依次为图形层、视频层和背景层。

这里的图形层也就是下面所说的OSD(On Screen Display)层,OSD界面显示技术指在图像画面上叠加文字显示,使屏幕为用户提供更多的附加信息。视频层为当前正在收看的节目(解码出来的活动图像);背景层为没有播放电视节目和启动EPG菜单时的屏幕图像。EPG画面在图形层上构建,EPG画面是由许多EPG图形元素(如按钮、文本框、选择按钮、组件容器等)叠加而成。界面的状态转移是通过消息驱动的机制来实现的,在消息响应函数中进行消息处理。见到的屏幕图像是这三层的叠加(blend)后的图像。

EPG界面显示的总体思想是:SI数据与图形元素分离。包括以下几部分:SI数据的检索与提取,EPG界面所需的图形元素库,状态转移控制器,OSD层绘制引擎,OSD层图、视频层、背景层及这三层的Blend操作。SI数据检索模块快速的检索本地SI数据库,提供EPG界面当前输入焦点所需的数据信息;OSD层图形元素库提供界面所需的图形元素,该库存于本地机顶盒的ROM中;状态转移控制器接收用户遥控器的输入,提供当前显示所需的活动焦点,控制状态转移地流向;OSD层图像是指EPG界面图形元素合成后的图像;OSD绘制引擎决定显示的相应算法,接收各模块提供的数据,完成OSD层图形的绘制,最后是OSD层、视频层和背景层的blend操作。

数字电视的优势不仅仅是提供高质量的视频、音频节目,更重要的是采用数字化处理后,提供了业务的灵活性和多样性。其中电子节目指南,它描述节目的播出时间和简要内容,可帮助观众方便快速地寻找自己感兴趣的节目。将为观众收看电视带来极大的帮助,因此。必须重视数字电视的电子节目指南系统的研究和内容的制作。



0 0