EPG功能实现介绍_第1页
EPG功能实现介绍_第2页
EPG功能实现介绍_第3页
EPG功能实现介绍_第4页
EPG功能实现介绍_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录EPG功能实现2第一章EPG简介21.EPG的产生2第二章.EPG信息的构成与传输31 EPG信息的构成32 基本EPG 信息的传输方式32.1 说明52.2 段到传送流(TS)包的映射62.3 PID 及表标识符字段编码62.4 重复率73 SI信息的插入84 网络信息84.1网络基本信息的构成84.2 TS流信息84.3 网络信息在NIT表中的表示95.PSI/SI主要字表之间逻辑关系11第三章 EPG在STB上的实现121 EPG信息的提取122 实际应用中EPG接收的步骤123 节目内容和时间信息的获取143.1 接收TDT表143.2 接收EIT表143.3 注意事项164.MJ

2、D和UTC时间转换17EPG功能实现第一章 EPG简介1.EPG的产生EPG的英文全称是Electronic Program Guide,一般称“电子节目指南”,它是传输流中所包含的信息。数字电视相对于传统的模拟电视而言,传输更多的数字化信息,多种业务可以混合在一起通过一个信道传输。因此,数字电视已经不是单一的电视业务,而是指通过电视传输通道传输的数字业务,包括视频、音频、图像、数据等。这就需要引入一个重要的概念-服务信息(Service Information, SI)。全球数字电视已经进入快速发展阶段,可以预见,在今后几年,与数字电视相关的业务将大幅度增长。随之而来的问题是,当数字电视能为

3、用户提供数倍于目前节目量的节目及多种业务时,用户怎样才能便捷地找到所要的节目和信息呢?通过SI信息实现的电子节目指南(EPG)能更好的帮助用户搜索数字电视频道,获得节目播出时间,了解节目内容,预定喜爱的节目,找到更多的对用户有用的信息,使数字电视具备更多的交互功能。因此,电子节目指南(EPG)显然是必不可少的工具。 数字电视与模拟电视节目选择的方式完全不同,模拟电视每个频道对应一个节目,只要调到相应的频率,就可以看到图像。而在数字电视中,多个节目被复用到一个码流中,每个节目只占有码流中的部分包,一个物理的频道只能给出包含多个节目的传输流,要观看其中的某个节目,还必须从码流中提取出节目对应的传输

4、包,然后再进行解码。怎样从众多的节目和服务中选取所需要的服务就变得比较复杂。此外,各种影响接收的技术参数对用户来说也是非常难懂的。为此,提供一些必要的服务信息以帮助用户选择节目使非常必要的。第二章.EPG信息的构成与传输1 EPG信息的构成EPG信息分为基本EPG信息和扩展EPG信息两种。基本EPG信息是用SI信息表进行描述,以文本格式表示的与节目描述有关的网络信息、节目群信息、业务描述信息和事件信息,可以完全通过GY/Z 174-2001中规定的NIT、BAT、SDT、EIT和EMT进行表示和传输,这些表被分为一个或若干个段(SECTION),每个分段包含有一部分或全部关于表的信息,然后插入

5、到TS流传输包中。构成图如下: 基本EPG信息的组成构成扩展EPG信息是在基本EPG信息基础上的扩充,它描述网络、业务群、业务、事件、EPG提供商以及广告等方面的扩充信息。当用于数字电视平台之间交换EPG信息时,按XML格式描述全部EPG信息,内容被封装成具有多级目录结构的文件系统,通过数据转盘传递,这些信息的入口采用EPG映射表(EMT)进行描述。基本EPG信息是必需的,扩展EPG信息是可选的。EPG信息组织层次图2 基本EPG 信息的传输方式基本EPG信息采用表传输方式。在数字电视中,所有视频、音频、文字、图片等经数字化处理后都变成了数据,并按照MPEG-2的标准打包,形成固定长度(188

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

7、系统所有码流的描述,描述系统传输内容、广播数据流的编排和时间表等的数据,它包括PSI信息。PSI即为节目专用信息。PSI由节目关联表(PAT)、条件接收表(CAT)、节目映射表(PMT)和网络信息表(NIT)组成。节目关联表(Program Association Table,PAT):PAT由PID0X0000标识,它的主要作用是指出传输码流中包括那些节目,节目的编号与对应的节目映射表(Program Map Table, PMT),并指定网络信息表(Network Information Table, NIT)所对应的PID。 条件接收表(Conditional Access Table,

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

9、,例如武汉电视台的传输频点为459MHz,调制方式为64QAM,纠错方式为RS方式等。SI信息共定义了9个表,但有一些表实际意义不大 :1)业务群关联表(BAT):- 业务群关联表提供了业务群相关的信息,给出了业务群的名称以及每个业务群中的业务列表。 2)业务描述表(SDT): - 业务描述表包含了描述系统中业务的数据,例如业务名称、业务提供者等。3)事件信息表(EIT): - 事件信息表包含了与事件或节目相关的数据,例如事件名称、起始时间、持续时间等。 - 不同的描述符用于不同类型的事件信息的传输,例如不同的业务类型。 4)运行状态表(RST): - 运行状态表给出了事件的状态(运行/非运行

10、)。运行状态表更新这些信息,允许自动适时切换事件。 5)时间和日期表(TDT): - 时间和日期表给出了与当前的时间和日期相关的信息。由于这些信息频繁更新,所以需要使用一个单独的表。 6)时间偏移表(TOT): - 时间偏移表给出了与当前的时间、日期和本地时间偏移相关的信息。由于时间信息频繁更新,所以需要使用一个单独的表。 7)填充表(ST): - 填充表用于使现有的段无效,例如在一个传输系统的边界。 8)选择信息表(SIT): - 选择信息表仅用于码流片段(例如,记录的一段码流)中,它包含了描述该码流片段的业务信息的概要数据。 9)间断信息表(DIT): - 间断信息表仅用于码流片段(例如,

11、记录的一段码流)中,它将插入到码流片段业务信息间断的地方。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的作用是提供对每个业务的描述,使用户能方便地了解每个业务

12、的内容。对于每一个TS都有一个SDT与之对应。EIT实际上是一个节目表,对于每一个节目都存在一个独立的EIT。EPG包含两个部分:一是播出前端的EPG编辑器;二是用户端接收机相应的控制软件,两部分一一对应,每个接收机的相关部分必须要按照前端定义的数据结构来定制,从而接收显示前端送出的业务信息。以上这些表在传送流中以数据段的形式传送,不同的信息表在传送流中通过赋予不同的特定的PID来进行区分。而具有相同PID的不同信息表则进行由表标识符TABLE ID来区分,在接收端通过查这些特定的PID来找到它们。这里说明一下,TS中有两种标识符,一种是包标识符,一种是表标识符。例如SI中的SDT的每一个表都

13、对一个特定TS中的业务进行描述,这些业务可能是这个表所存在的TS的一部分,也可能是其它TS的一部分,这些SDT的PID都是相同的,这时候我们就可以通过不同的表标识符来区分它们,从而识别出那一个表所描述的业务是那一个TS的。2.1 说明段的长度是可变的。除EIT表外,每个表中的段限长为1024 字节,但EIT中的段限长为4096 字节。每一个段由以下元素的组合唯一标识:a) 表标识符(table_id) 1) 表标识符标识段所属的表;2) 一些表标识符已分别被ISO 和ETSI 定义。表标识符的其它值可以由用户根据特定目的自行分配。b) 表标识符扩展(table_id_extension) 1)

14、 表标识符扩展用于标识子表;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 (

15、service_id ),相同的transport_stream_id 、original_network_id和version_number。当段语法指示(section_syntax_indicator )字段置“1”时,表标识符扩展(table_id_extension) 字段等同于段的第四和第五字节。c) 段号(section_number) 1) 段号字段用于解码器将特定子表的段以原始顺序重新组合。本指导性技术文件建议段按顺序传输,除非某些子表的段需要比其它的段更频繁地传输,例如出于随机存取的考虑;2) 在本指导性技术文件中指定的各种SI 信息表和EPG 映射表,段编号也适用于子表;

16、d) 版本号(version_number) 1) 当本指导性技术文件中规定的SI信息表和EPG映射表所描述的TS流特征发生变化时(例如:新事件开始,给定业务的组成的基本流发生变化),应发送更新了的业务信息数据。GY/Z 2032004 新版本的业务信息以传送一子表为标志,它与前子表具有相同的标识符,但版本号改为下一值;e) 当前/后续指示符(current_next_indicator) 每一段都要标以“当前”有效或“后续”有效。它使得新的SI版本可以在TS流特征发生变化之前传输,让解码器能够为变化做准备。然而,一个段的下一个版本的提前传输不是必需的,但如果被传输,它将成为该段的下一个正确版

17、本。2.2 段到传送流(TS)包的映射段可直接映射到TS包中。段可能起始于TS包有效负载的起始处,但这并不是必需的,因为TS包有效负载的第一个段的起始位置是由pointer_field 字段指定的。一个TS包内不允许存在多于一个的pointer_field 字段,其余段的起始位置均可从第一个段及其后各段的长度中计算出来,这是因为语法规定一个TS包中的段之间不应有空隙。在任一PID值的TS包中,一个段应在下一个段允许开始之前结束,否则就无法识别数据属于哪个段标题。若一个段在TS包的末尾前结束了,但又不便打开另一个段,则提供一种填充机制来填满剩余空间。该机制对包中剩下的每个字节均填充为0xFF 。

18、这样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值的业务信息段

19、,该段的最后一个字节与下一个段的首字节发送的最小时间间隔为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) 所有超过未来

20、八日的EIT 时间表的段应至少每30s传输一次,包括超过未来八日的其它传输流的EIT时间表的段;i) 所有TDT和TOT的段应至少每30s传输一次。3 SI信息的插入SI一般在复用器合成TS时插入。按照SI标准形成各表的数据段后,数据可以三种方式送入复用器: (1)将各表数据通过复用器生产厂家提供的应用软件接口(API),由复用器插入节目码流。其优点是结构简单、系统稳定;缺点是需要复用器厂家提供接口资料和硬件支持,对不同厂家复用器需要编写不同的软件。 (2)将各表数据段按MPEG-2标准打包,通过码流播出卡输出只包含SI信息的MPEG-2码流,再将之送入复用器异步串行接口(ASI)与节目码流复

21、用。其优点是不需要复用器厂家支持,有一定的通用性;缺点是系统复杂,稳定性、可靠性不如方法(1),系统资源有一些浪费。 (3)一些条件接收厂商在复用器后端的加扰器提供接口,因此可以通过局域网将各数据表送入加扰器,由加扰器向码流中插入SI信息。其优缺点与方式(1)类似。4 网络信息网络信息分为网络基本信息和TS流信息。它包含了与通过一个给定的网络传输的复用流/TS流的物理结构相关的信息,以及与网络自身特性的信息。4.1网络基本信息的构成包含网络标识、网络名称、多语言网络名称和连接信息。网络标识:在整个国家范围内唯一确定一个网络,用以区别其它的网络。网络标识通过NIT表中的网络标识符(network

22、_id)进行描述。网络名称:通过NIT中的网络名称进行描述符(network_name_descriptor)进行描述。多语言网络名称:通过NIT中的多语言网络名称描述符(multilingual_network_name_descriptor)进行描述,数字电视接收终端可以根据需要选择相应的语言显示网络名称。链接信息:通过NIT表中的链接描述符(linkage_descriptor)进行描述,用于给出与包含网络附加信息、EPG信息的业务的链接关系,或者用于给出与包含了全部网络SI信息的TS流的链接关系。a) 当linkage_type=1时,链接指向一个包含网络附加信息的业务;b) 当lin

23、kage_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而言,无论采用哪种传输网络,传输通道

24、的物理参数总是唯一的。a) 如果TS流在卫星传输网络传输,使用以下参数对传输通道进行描述:频率、轨道位置、东西标志、极化方式、调制方式、符号率、前向纠错内码。由NIT表中的卫星传输系统描述符(satellite_delivery_system_descriptor)描述。b) 如果TS在有线传输网络中传输,使用以下参数对传输通道进行描述:频率、前向纠错外码、调制方式、符号率、前向纠错内码。由NIT表中的有线传输系统描述符(cable_delivery_system_descriptor)描述。c) 如果TS在地面传输网络中传输,由NIT表中的地面传输系统描述符(terrestrial_deli

25、very_system_descriptor)描述,参数待定,国内并未出台相关规定。频率列表信息:给出了由多个频率传送的某个复用流的附加频率的完整列表,通过NIT表中的频率描述符(frequency_list_descriptor)描述。业务列表信息:给出了网络中包含的全部业务的标识及类型。通过NIT表中的业务列表描述(service_list_descriptor)描述,每个业务通过字段service_id唯一标识,通过字段service_type指名该业务的类型。Service_id相当于PMY表中的program_number,但业务类型值为0x04(service_type=0x04)

26、时(即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主要字表之间逻辑关系 理解了这张图

27、也就理解了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、E

28、IT等信息。机顶盒接收端的解析主要负责这些SI数据信息的重建。信息内容应与PSI和SI表中的信息相对应,它可按照Network-Transport Stream-Service-Event的分层顺序描述,同时内嵌Transport Stream-Program(Service)-Element Stream的分层顺序。利用DVB-SI表实现EPG流程图SI表的组织流程2 实际应用中EPG接收的步骤1) 输入频率、符号率、调制方式锁定频道。2) 接收当前频道上的PAT表,已知条件是PAT的PID固定为0,将PAT表解析保存。3) 从PAT中取得NIT表的PID: 方法是:当program_num

29、ber=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_de

30、scriptor(),从中可以得到所有几个频道的关键字段值frequency,modulation,symbol_rate。至此,网络信息资源已全部获得,这是关键的一步。6) 根据上述网络新,建上一个循环,分别各自锁定不同的频道。7) 在已锁定的频道下,接收当前PAT表(PID0)。通过分析program_number字段就可以知道在当前频道上共播放了多少个节目(服务),记录下每个服务的PMT表,解析并保存。8) 通过一个PMT表的PID就可以接收这个节目的PMT表,解析并保存。9) 在PMT表中取得以下几个关键字段:PCRPID,分别取得流类型字段stream_type各自对应的流的基本PI

31、D(elementary_PID),如:当stream_type=0x02时,表示是视频流,那么此时,elementary_PID代表Video_PID,当stream_type=0x04时,表示是音频流,此时,elementary_PID代表Audio_PID.。这里要着重注意:一个视频配套多个音频PID的情况。说明:到了这一步就可以实现一个节目的播放了。特别申明:在PMT表的第一个descriptor()循环中要检测是否有CAdescriptor()描述,如果有,则取出其中的CAsystem_ID和CAPID。通过这两个PID可以取得关于CA更详细的信息,关于CA这里不做更详细的解释和描述

32、。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)找到各自服务的名称(节目名,如:CCTV1等)。在SDT表中的service_id中找到service_descriptor(),从中可以取得service_name(如:CCTV1等)。注意:这里free_CA

33、_mode不能做为节目是否加密的判断标志,因为在有些加扰器里,并没有对该字段进行修改,比如barco的加扰器就是如此。还要注意两个特殊字段:EIT_schedule_flag,该值为1时,表示在当前频道上出现了时间表(用于报告一个服务里所包含的一天甚至一个月的节目预告)。当EIT_present_following_flag=1时,表示在当前频道上出现了出现/跟随事件信息表(当前时刻/下一时刻的信息)。12) 从第八步循环,完成的有节目信息的收集:说明:至此,除了节目时间、内容信息没有收集外,其余的节目信息已收集完毕,包括以下内容:a、 共多少个频道。b、 每个频道下有多少套可供播放的节目。c

34、、 每个节目的名称,相关PCR_PID,V_PID,A_PID等。根据以上信息可以组织菜单,实现节目的播放了。注意:要取得多语种描述的节目名称,可以从SDT表中的country_availability_descriptor()字段为:country_code=”CHN”代表中文,”ENG代表英文等”,但是要知道country_availability_descriptor()不是一定会播发的,也就是说这个表可能不存在。3 节目内容和时间信息的获取3.1 接收TDT表TDT信号在数字视频广播业务信息(SI)中作为时间和日期表,在规范里属于强制规定的基础数据,不能被加扰,以供公开使用。TDT表的

35、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可以任意定义,只要具备了

36、它的几个属性就是一个event。 EIT present/following表示的是两个事件。EIT present是正在播出的事件,EIT following是即将播出的事件。在任一频道上可以取得全网的所有的EIT表,EIT表的PID固定为0x0012当table_id=0x4e时,表示的是当前频道上实际的出现/跟随事件信息当table_id=0x4f时,表示的是其它频道上的出现/跟随事件信息当table_id=0x500x5f时,表示的是当前频道上的节目时间表当table_id=0x600x6f时,表示的是其它频道上的节目时间表当table_id=0x4e或0x4f时,如何区分当前出现时间

37、和跟随时间呢?通过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时,表示是当前频道,如果现在手中已有的当前频道的transpo

38、rt_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(节目简介

39、)。在数字电视中简介部分暂可以不取(text_char)。注意:当table_id=”0x4e”或”0x4f”时,for(;)里面描述的事件只有一个。只有当table_id=0x500x5f或0x600x6f时才能出现多个。同样,取下一时刻信息时,要判断的条件为section_number=0x01。举个例子: 假如现在时间是19:20,那么我们会收到下面这样的当前/后续事件: 19:00-19:30 新闻联播 event_id=0x01 (当前事件) 19:31-20:00 动画片 event_id=0x02 (后续事件) 如果时间到了19:35,那么我们将会收到下面这样更新的当前/后续事件

40、: 19:31-20:00 动画片 event_id=0x02 (当前事件) 20:01-22:00 黑客帝国 event_id=0x03 (后续事件) EIT Schedule用来发送大量的event信息,也就是EPG的节目单。例如中央1台一周的电视节目预告就需要用到EIT Schedule传送。 EIT Schedule被分成16个table_id传送。当table_id=0x500x5F,表示是现行传送流的表;当table_id=0x600x6F,表示是其他传送流的节目表。也就是说一个节目最多可以用16个子表用来发送节目预告。这16个table_id的EIT是按照时间先后顺序排列的。 这

41、里要注意的是EIT子表中引入节(segment)的概念。这是个很让人迷惑的东西,我在这里解释一下。 在普通子表中分段使用段(section),每个子表语法结构中都有个8bit字段last_section_number,用来表示一个子表最多由多少个段组成。由字长我们可以看出,一个子表最多有256个段。而EIT中在子表和段中插入了一个节的层次。关于节有如下的约定: l 一个EIT子表被分成32个节; l 每个节最多有8个段; l 一个EIT子表最多有256个段; l 每个节所包含的事件信息最长不能超过3个小时; l 如果在节中小于8个段在使用, 就需要靠字段segment_last_section

42、_number标识节中有哪些有效的段。EIT中传送的字段segment_last_section_number值算法为s0 + n 1。这里s0的值是节中的第一个段号,n表示该节中段的个数。 举个例子:如果某个EIT子表中第二个节只包含2个段,那么在这2个段中字段segment_last_section_number的值就是:8 + 2 - 1 = 9。大家想一想为什么这里的s08?因为每个节最多包含8个段,第一个节的段号是07,那么第二个节段号就是815,由此得出第二个节的s0为8。这一段约定有些难以理解,大家可以分析一些EIT sechudle的码流再结合上述就能明白了; l 节中包含所有

43、的段,也就是有8个段。那么字段segment_last_section_number值算法为s0 +7; l 如果节中包含所有的段是空段(段中没有任何事件信息),那么字段segment_last_section_number值算法为s0 +0; l EIT Table_id=0x50(或者0x60)的第一个节包含着今天00:0002:59:59 UTC时间的三个小时的事件信息,第二个节包含了03:00:00 and 05:59:59 UTC时间的三个小时的事件信息,依次类推下去,一个子表最多能包含4天的事件信息; 这样我们可以计算出一个EIT Schedule最多能存放多长时间的节目简介: 3

44、h(单个节最长时间)*32(最大的节个数)*16(最大的子表个数)1536h=64day一个service的EIT Schedule子表最多可以传送64天的EPG,一个子表最多可以传送4天的EPG。在实际运营中一般会只传一周的节目指南,也就是说只要两个子表就足够了最后我用一张示意图表示EIT中子表、节(segment)、段(section)之间的关系,对上述概念做一个回顾并出几道题给大家便于加深理解。EIT子表是EPG的关键,这部分一定要熟练掌握。 练习:Q1:这个EIT Schedule最多能传送几天的节目预告? Q2:Segment#0、Segment#1、Segment#31这3个节中的

45、section字段segment_last_section_number分别是多少? Q3:假设第一个子表0x50起始event时间是从2006年1月1日00:00开始的,那么图中Section0的起始时间是什么时间? 答案:A1:因为table_id从0x500x59,一共10个子表,一张子表最多包含4天事件信息,所以这个EIT Schedule最多能传送40天的节目信息。 A2:Segment#0中有8个section,所以segment_last_section_number077 Segment#1中只有2个section,所以segment_last_section_number82

46、19 Segment#31中有1个section但没有包含event内容,所以segment_last_section_number2480248 A3:因为0x50最多包含4天信息,所以0x51的Section0起始时间为2006年1月5日00:0002:59:59 这里有一个特殊的情况需要处理,那就是当running_status=0时,表示的是NVOD的参考事件描述,duration、start_time、event_name_char、text_char不属于DTV的EPG范畴,遇到这种情况需要屏蔽掉。通过以上条件的循环,在一个物理频道上,可以取得所有的节目时间表和内容,包括一天或一周

47、、一月、二个月的节目预告。至此,可以形成完整的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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论