CN1625237A - 多频点电子节目指南信息的接收方法 - Google Patents

多频点电子节目指南信息的接收方法 Download PDF

Info

Publication number
CN1625237A
CN1625237A CN 200310116953 CN200310116953A CN1625237A CN 1625237 A CN1625237 A CN 1625237A CN 200310116953 CN200310116953 CN 200310116953 CN 200310116953 A CN200310116953 A CN 200310116953A CN 1625237 A CN1625237 A CN 1625237A
Authority
CN
China
Prior art keywords
data
guide information
execution
electronic program
program guide
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 200310116953
Other languages
English (en)
Other versions
CN1259797C (zh
Inventor
伍志刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kuanshi Software Technology Co., Ltd.
Original Assignee
BEIJING ZHONGSHILIAN DIGITAL SYSTEM Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIJING ZHONGSHILIAN DIGITAL SYSTEM Co Ltd filed Critical BEIJING ZHONGSHILIAN DIGITAL SYSTEM Co Ltd
Priority to CN 200310116953 priority Critical patent/CN1259797C/zh
Publication of CN1625237A publication Critical patent/CN1625237A/zh
Application granted granted Critical
Publication of CN1259797C publication Critical patent/CN1259797C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种多频点电子节目指南信息的接收方法,包括如下步骤:首先为接收电子节目指南信息分配资源;然后在回调程序中完成数据的接收;解析接收到的数据,得到电子节目指南信息;释放电子节目指南信息所用到的资源,最后将电子节目指南信息填充到固定的数据组织结构中,提供给EPG应用。本发明采用了先接收后解析的EPG接收方法,缩短了EPG的接收时间,在EPG接收中采用了内存池的管理机制,提高了内存利用率;给出了各个信息表的适合EPG应用使用的数据组织结构和最近7天EIT表的接收中按本地时间接收时的segment计算方法。

Description

多频点电子节目指南信息的接收方法
技术领域
本发明涉及一种接收数字电视节目指南信息的方法,尤其是一种接收来自多个频点的电子节目指南信息的方法。
背景技术
在数字电视系统的前端采用了复用技术,即将一个服务(Service)的视频、音频和其他数据分别打包编码复用形成一个单服务传输流,然后与同一个频道(Channel)的其他单节目流二次复用,再加上各种业务信息,形成一个多节目的传输流,然后经过调制,通过电缆、地面传输或卫星传输到用户端。在用户端的接收器通过调谐器解调,加密节目经过解扰器解扰,然后经过解复用器将不同节目的音视频流过滤出来,送到音视频解码器解码,最后经过DA变换,将用户选择的电视节目播放出来。
电子节目指南(EPG)信息包括网络信息、服务信息、业务群信息、节目信息和时间信息等。电子节目指南的出现成为数字电视传输的一种特色,而这些为用户提供节目导航功能的电子节目指南信息是和音视频信号一起复用在传输流里的,所以要将节目导航信息从传输流里提取出来,形成能供用户浏览和查询的数据结构。
电子节目指南信息主要来源于《数字视频广播中文业务信息规范》中的网络信息表NIT、服务描述表SDT、业务群关联信息表BAT、节目信息表EIT,时间日期表TDT/TOT等。这些信息表的结构在SI标准里有明确的定义。
网络信息表NIT、服务描述表SDT、业务群关联信息表BAT、节目信息表EIT可以被划分为多个子表,每个子表又被分为最多256个段(Section)。Section数据的组合通常是由硬件过滤器来完成的,设置好通道的PID,以及在过滤器设置中所需的table_id,transport_stream_id,section_number等信息,然后打开过滤器和通道,硬件芯片完成从传输流包到section的过滤。当有合适的section组合完毕,硬件产生中断,此中断服务程序在程序中也被称为回调程序。该回调程序得到一个缓冲区(buffer)的起始地址和长度,由软件对该buffer进行处理,提取所需的信息。
现有技术的处理方法是,在回调程序里作处理,获取电台节目信息。由于两个具有相同pid,table_id,table_id_extension,相同的或不相同的section_number的两个section之间的时间不能少于25ms(见SI标准的en300468的5.1.4),也就是说普通的机顶盒至少需要25ms的时间来处理一个section。SI信息的发送不能过快,否则接收端可能处理不过来,而且同一个表的section应该尽量分布均匀。如果发送数据量较大,而且以较快的速率发送,用以上的方法来处理可能在处理过程中错过很多section,从而需要频繁等待下一轮数据,导致接收的效率低下,接收时间成倍增加。
发明内容
本发明所要解决的技术问题在于提供一种多频点电子节目指南信息的接收方法,快速接收并解析来自多个频点的传输流里的多频点电子节目指南信息。
本发明所述的方法包括如下步骤:
步骤一、接收数据流中的电子节目指南信息的数据,如果在指定的时间内,电子节目指南信息全部被接收,则执行步骤二;否则,超出指定的时间,则强制停止接收过程,并释放占用的资源;
步骤二、解析步骤一得到的电子节目指南信息数据,得到电子节目指南信息,释放占用的资源;
步骤三、将步骤二得到信息填入到固定的数据结构中,提供给EPG应用。
本发明采用了先接收后解析的EPG接收方法,缩短了EPG的接收时间,在EPG接收中采用了内存池的管理机制,提高了内存利用率;给出了各个信息表的适合EPG应用使用的数据组织结构和最近7天EIT表的接收中按本地时间接收时,segment的计算方法。
附图说明
图1是本发明方法接收和解析过程的流程图;
图2是本发明方法分配资源的流程图;
图3是本发明方法接收数据的流程图;
图4是本发明方法Section回调程序的流程图;
图5是本发明方法停止通道和过滤器的流程图;
图6是本发明方法内存池的示意图;
图7是本发明方法解析数据流程图;
图8是本发明方法释放资源的流程图;
图9是本发明方法的单链表存储结构的示意图。
具体实施方式
本发明方法采用接收数据和解析数据两个步骤来完成电子节目指南信息的获得,可以避免接收数据时的频繁等待,加快整个接收处理过程。将接收过程分成两个步骤,其基本出发点是,回调程序类似于中断处理,时间要求严格,应尽量作最少的工作,以防止阻塞数据的连续接收。在回调程序里,在所接收的表的所有段完全接收完毕之后,停止接收,将数据拷贝到专门开辟的存储空间;然后再执行表的数据的解析过程,从而得到所需的信息。
本发明所述的方法,包括如下步骤:
步骤一、接收数据流中的电子节目指南信息的数据,如果在指定的时间内,电子节目指南信息全部被接收,则执行步骤二;否则,超出指定的时间,则强制停止接收过程,并释放占用的资源;
步骤二、解析步骤一得到的电子节目指南信息数据,得到电子节目指南信息,释放占用的资源;
步骤三、将步骤二得到信息填入到固定的数据结构中,提供给EPG应用。
电子节目指南信息数据的接收(步骤一)和解析(步骤二)是本发明的重点,其流程图如图1所示,将解析后的信息填入到固定的数据结构中,提供给EPG应用可以采用与现有技术完全相同的方式。
关于对于电子节目指南信息数据的接收,由于这些数据是复用在整个信息流中,经过前端的解复用器后,可以单独分离出来;对这些数据的处理与其他数据如视频数据,音频数据的处理方法类似,要单独分配资源,如通道、缓存等;只是电子节目指南信息数据流量并不大,所以占用的资源也比较少。
数据的接收过程具体包括:
步骤1.1、为接收电子节目指南信息数据分配系统资源,分配过滤器;
步骤1.2、检验系统资源是否可用,如果可用,则开始接收过程;
步骤1.3、接收电子节目指南信息数据,判断是否所有电子节目指南信息表都已经接收,如果是,则执行步骤二;否则,更换新的过滤器,继续接收过程;如果超时,则强制停止接收过程,并释放占用的资源。
数据的接收过程中,首先要为接收电子节目指南信息数据分配资源,并保证这些资源在整个接收过程中可用;由于接收不同类型的电子节目指南信息数据(不同类型的信息表)要采用不同的过滤器来获取,过滤器接收完其所接收的数据(全部子表和子表中全部的Section)后,再更换过滤器,重新启动新的过滤器进行接收,直到所有的过滤器已经全部接收完数据,结束接收过程。
也可能出现由于网络状态不好,出现接收的时间过长,考虑到这种情况,同样为了节省系统资源,在接收超过预先设定的时间后,强制停止接收过程,并释放占用的资源。
图2是本发明方法步骤1.1的流程图,包括如下步骤:
步骤1.11、从解复用器中分配未使用的通道;如果分配失败,则执行步骤1.16;
步骤1.12、为步骤1.11所分配的通道注册相应的回调程序(此程序在硬件监测到数据到达时被调用),如果注册失败,则执行步骤1.16;
步骤1.13、为步骤1.11所分配的通道分配缓存资源;如果分配失败,则执行步骤1.16;
步骤1.14、为步骤1.11所分配的通道设置PID值,此PID值为过滤器接收传输流的PID值;如果设置失败,则执行步骤1.16;
步骤1.15、为步骤1.11所分配的通道分配过滤器,结束步骤1.1;如果分配失败,则执行步骤1.16;
步骤1.16、释放资源,根据失败的类型,释放过滤器、通道及缓存,退出节目指南信息的接收。
过滤器的设置方法可以依照业务信息规范,对各个表的table_id值的预先分配值进行设置。网络信息表的通道PID设为0x10,过滤器table_id设为0x40/0x41,服务描述表的通道PID设为0x11,过滤器table_id设为0x42/0x46,业务群关联信息表的通道PID设为0x11,过滤器table_id设为0x4a,节目信息表的通道PID设为0x12,过滤器table_id设为0x4e/0x4f,或0x50-0x5f/0x60-0x6f,时间日期表的通道PID设为0x14,过滤器table_id设为0x70,时间偏移表的通道PID设为0x14,过滤器table_id设为0x73。
接收步骤中,根据所要接收的数据流首先为通道分配对应的PID,然后在设置对应的过滤器来接收对应通道的节目指南数据,实现电子节目指南信息的接收。
由于以上的过程中也可能会有错误发生,为了使使用者或管理者了解错误地方,以便作出相应的调整,本发明对于每个可能出现错误的地方设置了错误采集的机制,为不同的类型错误设置了不同的错误编号,使本发明使用更加灵活、方便和人性化。
图3给出了本发明所述方法中步骤1.2的流程图,包括如下步骤:
步骤1.21、判断通道是否有效,如果有效,执行步骤1.22;否则执行步骤1.26;
步骤1.22、判断过滤器是否有效,如果有效,执行步骤1.23;否则执行步骤1.26;
步骤1.23、设置过滤器参数,包括数据位和掩码(各种信息表的过滤器的设置方法依照SI标准指定的TABLE_ID等参数执行),如果成功,执行步骤1.24;否则执行步骤1.26;
步骤1.24、启动过滤器,如果成功,执行步骤1.25;否则执行步骤1.26;
步骤1.25、启动通道,如果成功,则开始接收节目指南信息数据,结束步骤1.2;否则执行步骤1.26;
步骤1.26、根据错误的类型,设置错误号,释放过滤器、通道及缓存,结束节目指南信息的接收过程。
在步骤1.1中通道、过滤器和缓存分配成功之后,要对资源的可用性进行检验,然后根据要接收的信息表种类来设置过滤器的数据位和掩码,并启动过滤器和通道,开始接收信息表数据。
在开始接收之后,执行步骤1.3来接收数据,直到所有信息表的数据被接收或者超时,具体包括:
步骤1.31、硬件检测到数据到达,调用Section回调程序,接收当前过滤器传来的Section数据,一个Section数据的数据完全被接收,回调程序将其拷贝到缓存中;
步骤1.32、重新调用Section回调程序,接收下一个Section的数据;
步骤1.33、如果一个信息表的全部数据(全部的子表和子表的全部Section数据)被接收,则更换新的过滤器,重新接收未接收信息表的Section数据;如果所有信息表的全部数据都已经被接收,则执行步骤二;如果超时,则强制停止接收过程,并释放占用的资源。
所需的数据到达时,回调程序就被调用;并且每接收一个Section的数据,回调程序就被调用一次。本发明在回调程序里接收数据,并检查Section数据的正确性,并执行Section数据的拷贝任务,判断整个信息表/子表是否完全被接收。
在回调程序里,所需的数据被拷贝到内存的缓冲区中。为了更有效的利用内存,本发明采用了缓冲池的方式来更合理的利用内存,防止随机进行内存分配而出现的大量的小块的内存无法利用的情况,提高内存的利用效率。
内存缓冲池采用预分配方式,用pool_start、pool_free、pool_length三个变量保存缓冲池的始末地址和长度;用一个section数组保存已存入的section在缓冲池中的起始地址和长度;用section_sum保存已存入的seciton总个数。当缓冲区的大小不够使用时(即pool_free和pool_start+pool_length的差值小于某个临界值),将缓冲区的大小增大一倍,同时保持已有数据不变。内存空间连续分配,防止了内存碎片的产生。图6所示为一个存有两个Section的缓冲池,section0和sectionl表示存储的数据,section0_start,和section0_length表示缓冲池的数据结构。
EPG数据存储区对所有不同的表采用一致的数据结构(即内存池),包含起始地址、长度、末尾地址,总的section个数等内容。每个内存池最多存放256个section,在多子表的情况下,一个完整的表包含多个内存池,每个内存池存放一个子表。内存池的初始大小根据信息表的种类各不相同,NIT表、BAT表、SDT表可以为20KB;OSDT表可以为40KB;PF-EIT表可以为80KB;SCH-EIT表可以为64KB;TDT/TOT表可以为4KB。
本发明采用如下方法判断所有所需的数据是否到达:
缓冲池内的Section总个数等于此接收子表的最后段编号lastSectionNumber,表示该子表已经被完全接收。
接收程序也不是无限制的等待数据完全被接收,在所设定的时间内没有收完全所有的Section,即缓冲池内所接收到的Section总数小于此接收子表的最后段编号lastSectionNumber,则强行停止接收,接收程序返回超时。
通过以上的描述可以看出,回调程序中完成主要的接收功能;回调程序由硬件启动,当通道打开而硬件检测到有数据到达,就自动调用回调程序。图4是上述的回调程序的工作流程图,包括:
步骤1.300、判断接收是否已经结束,如果已经结束,则退出回调程序;否则,执行步骤1.301;
步骤1.301、判断Section的数据版本是否正确,如果正确,则执行步骤1.302;否则,执行步骤1.305;
步骤1.302、判断数据是否正确,如果正确,则执行步骤1.303;否则,重新启动通道,接收该Section的数据,结束回调程序;
步骤1.303、判断是否缓冲区中已经存在该Section的完整数据,如果是,则抛弃接收的数据;否则执行步骤1.304;
步骤1.304、将数据添加到缓冲区中,如果成功,则重新设置过滤器;重新启动通道,结束回调程序;否则,执行步骤1.305;
步骤1.305、停止通道和过滤器,根据错误类型设置错误号,结束回调程序,退出电子节目指南信息的接收。
所述的步骤1.305,停止通道和过滤器,如图5所示,进一步包括如下步骤:
步骤1.3051、判断通道是否有效,如果有效,则停止通道;否则执行步骤1.3053;
步骤1.3052、判断过滤器是否有效,如果有效,则停止过滤器,结束回调程序;否则执行步骤1.3053;
步骤1.3053、根据错误类型,设置错误号,结束回调程序。
缓冲池内的数据根据section_num从小到大依次排列。对于某种表有多个子表的要考虑到不同频点之间的数据可能发生重复,对于多频点EPG前端尤其如此。比如某个频点的SDT表中不但保存着本频点的电台信息,而且可能包含其它频点的电台信息,在SI标准里是当作Other SDT表来传送。但是,在其它某个频点,这些Other SDT的信息可能就是它的SDT表。避免数据信息在内存中的重复就是必须要考虑的事情。在回调程序中,对此进行了考虑,比较了接收的Section数据与已有的Section数据。
由于网络信息和电台信息对于每个频点来说,实际的数据相同,只是放到不同的表中传送,而且这些信息不同于节目信息和时间信息,不是经常变化,所以这些数据只在开机后接收一次,解析后并存放到非易失存储介质中,便于以后应用。
在将所需要的所有数据拷贝到缓冲池之后,进行数据的解析。所有的表的字段和描述子的解析均严格依照业务信息规范进行。但其中不是所有的信息都进行提取,对于某些没有立即解析的数据提供单独的方法,用来在用户需要时提取,比如节目的详细描述信息,节目的Item列表等。
图7是本发明所述的步骤二解析数据的流程图,包括如下步骤:
步骤2.1、获取信息表的第一层循环的长度,如果大于零,则执行步骤3.2;否则执行步骤2.4;
步骤2.2、获取描述子内容,第一层循环长度减去此描述子长度,若内容正确,执行步骤2.3,否则回到步骤2.1;
步骤2.3、添加描述子内容到当前结果,回到步骤2.1;
步骤2.4、获取信息表第二层循环的长度,若大于零,则执行步骤2.5;否则结束步骤3;
步骤2.5、获取map内容,第二层循环长度减去此map长度,得到map内的第一个描述子的descriptor_id,根据SI标准解析此描述子,并将结构添加到当前结果;反复步骤2.5,直到解析完此map内所有的描述子;
步骤2.6、将步骤2.5中所获得的map内容中解析所得的内容添加到结果列表;返回步骤2.4。
对接收的电子节目指南信息表的解析,与现有技术的解析方式相同,并且,实际上并也不复杂,在SI标准中对于接收到的电子节目指南信息的数据结构有详细的描述,而解析的方法也容易实现。
解析之后,得到了完整的电子节目指南信息EPG,将其通过固定的数据结构存储在存储空间中,内存和通道等资源应该释放,归还系统。
图8是本发明所述的释放资源的流程图,包括如下步骤:
步骤4.1、判断过滤器是否有效,如果有效,释放过滤器及缓存;否则,执行步骤4.3;
步骤4.2、判断通道是否有效,如果有效,释放通道,结束释放资源;否则执行步骤4.3;
步骤4.3、根据错误类型,设置错误号,结束释放资源。
本发明所述的步骤三,进一步具体包括如下过程:
经过解析之后得到的数据按照固定的数据结构提供给EPG应用,即将数据赋值给数据结构中的对应的变量,便于EPG应用使用这些变量,完成相应的功能。对于多section的信息表(包括网络信息表NIT、服务描述表SDT、业务群关联信息表BAT、节目信息表EIT等),解析后存储的信息可以采用一致的单链表存储结构,见图9。采用一致的单链表存储结构可以很好的节约存储空间,并且更新电子节目指南信息也很方便。
下面给出各个信息表的数据结构的实例,用C语言描述如下:
网络信息表(NIT):
      typedef struct{

        unsigned short version;            /*版本号*/

        unsigned short original_network_id;/*网络识别号*/

        unsigned short stream_id;    /*复用流识别号*/

        unsigned long  frequency;    /*传输频率*/

        unsigned long  symbol_rate;    /*传输符号率*/

        int            delevery_type  /*传输网络类型*/

        dtvia_cable_delivery_ptr  p_cable_delivery_desc/*有线传输

      参数* /
        <!-- SIPO <DP n="10"> -->
        <dp n="d10"/>
     dtvia_satellite_delivery_ptrp_satellite_delivery_desc/*卫星传

  输参数*/

     int               name_length        /*网络名称长度*/

     unsigned char     *network_name      /*网络名称*/

     int            multilingual_sum;    /*多语言网络名称个数*/

     dtvia_multilingual_name_ptr p_mul_name/*多语言网络名称链表*/

     int        additional_frequency_sum; /*附加频率个数*/

     dtvia_frequency_list_ptr    p_a_frequency;  /*附加频率链表*/

     int               service_list_sum;     /*服务列表个数*/

     dtvia_service_list_ptr      p_service    /*服务链表*/

     EPG_NIT_INFO_PTR   p_next;

    }EPG_NIT_INFO,*EPG_NIT_INFO_PTR;
NIT链表:
    typedef struct {

      int                nit_sum;       /*网络个数*/

      EPG_NIT_INFO_PTR p_nit_list;      /*网络信息*/

      int            linkage_sum;       /*链接个数*/

     dtvia_linkage_ptr p_linkage_list;   /*linkage链表*/

    }dtiva_nit_head,*dtiva_nit_ptr;
业务群关联表(BAT):
    typedef struct{

      unsigned short     version;        /*版本号*/

      unsigned short     bouquet_id;     /*业务群识别号*/

      int                name_length;  /*名称长度*/

      unsigned char      *bouquet_name    /*业务群名称*/

      int            multilingual_sum;   /*多语言名称个数*/

      dtvia_multilingual_name_ptr p_mul_name/*多语言名称链表*/

      int               ca_identify_sum;   /*CA Identify个数*/

      dtvia_ca_identify_ptr p_ca_identify;   /*CA Identify链表*/

      int           available_country_sum;     /*允许国家个数*/

      dtvia_country_available_ptr p_available_country;/*允许国家链表

  */

      int            unavailable_country_sum;  /*不允许国家个数

  */

      dtvia_country_available_ptr p_un_available_country;/*不允许国家

  链表*/

      int               service_list_sum;    /*服务列表个数*/

      dtvia_service_list_ptr      p_service   /*服务链表*/

      int           linkage_sum   ;    /*链接个数*/

      dtvia_linkage_ptr p_linkage_list;    /*linkage链表*/

      EPG_BAT_INFO_PTR     p_next;

  }EPG_BAT_INFO,*EPG_BAT_INFO_PTR;
BAT链表
  typedef struct {
        <!-- SIPO <DP n="11"> -->
        <dp n="d11"/>
          int                    bat_sum;       /*BAT表个数*/

          EPG_BAT_INFO_PTR       p_bat_list;    /*BAT表链表*/

        }dtiva_bat_head,*dtiva_bat_ptr;
服务描述表SDT:
      typedef struct {

        unsigned short    version;            /*版本号*/

        unsigned short    original_network_id;/*网络识别号*/

        unsigned short    stream_id;        /*复用流识别号*/

        unsigned short    service_id;         /*电视台识别号*/

        unsigned short    service_type;     /*分类*/

        int               name_length;      /*电视台名长度*/

        unsigned char  *service_name;       /*电视台名称*/

        int            provider_length;     /*提供商名长度*/

        unsigned char  *service_provider;   /*提供商名*/

        unsigned short    free_ca_mode;     /*加扰模式*/

        unsigned short    schedule_flag;      /*schedule存在标志*/

        unsigned short    pf_flag;      /*present following存在标志*/

    int              multilingual_sum;  /*多语言个数*/

    dtvia_multilingual_service_desc_ptr  p_mul_service/*多语言名称链表*/

        int              ca_identify_sum; /*CA Identify个数*/

        dtvia_ca_identify_ptr   p_ca_identify;  /*CA Identify链表*/

        int          available_country_sum;     /*允许国家个数*/

        dtvia_country_available_ptr   p_available_country;/*允许国家链表

  */

        int          unavailable_country_sum;   /*不允许国家个数*/

        dtvia_country_available_ptr   p_un_available_country;/*不允许国

  家链表*/

        int          bouquet_name_length; /*业务群名称长度*/

        unsigned char    *bouquet_name          /*业务群名称*/

        int              linkage_sum;       /*链接个数*/

        dtvia_linkage_ptr   p_linkage_list;      /*linkage链表

  */

  int             data_broadcast_sum;    /*Data broadcast个数*/

  dtvia_data_broadcast_ptr  p_db_desc;   /*Data broadcast链表*/

  int             announcement_sum   /*通告个数0或者1*/

  dtvia_announcement_ptr   p_announcement;/*通告链表*/

      EPG_SDT_INFO_PTR p_next;

      }EPG_SDT_INFO,*EPG_SDT_INFO_PTR;

      //SDT链表:

  typedef struct {

  int                    sdt_sum;   /*SDT表个数*/

  EPG_SDT_INFO_PTR    p_sdt_list;   /*SDT表链表*/

  }dtiva_sdt_head,dtiva_sdt_ptr;
节目信息表EIT:
        typedef struct{

          unsigned short  version;                /*版本号*/

          unsigned short  original_network_id;    /*网络识别号*/
        <!-- SIPO <DP n="12"> -->
        <dp n="d12"/>
      unsigned short    service_id;         /*服务号*/

      unsigned short    stream_id;          /*传输流号*/

      unsigned short    event_id;        /*节目号*/

      unsigned short    year;            /*年*/

      unsigned short    month;              /*月*/

      unsigned short    day;             /*日*/

      unsigned short    start_hour;         /*节目起始时间(小时)

  */

      unsigned short    start_minute;    /*节目起始时间(分钟)*/

      unsigned short    duration_hour;      /*节目持续小时*/

      unsigned short    duration_minute;    /*节目持续分钟*/

      int               name_length;    /*节目名称长度*/

      unsigned char     *event_name;    /*节目名称  */

      int               short_desc_length;/*节目简短描述长度*/

      unsigned char     *short_desc;      /*节目简短描述*/

      unsigned short    event_state;      /*状态*/

      unsigned short    free_ca_mode;   /*加扰模式*/

      unsigned short    nibble1;          /*分类1*/

      unsigned short    nibble2;          /*分类2*/

      int               component_sum    /*组件个数*/

      dtvia_component_ptr  p_component     /*组件链表*/

      int               ca_identify_sum;  /*CA Identify个数*/

      dtvia_ca_identify_ptrp_ca_identify;   /*CA Identify链表

  */

      int               parent_rate_sum;  /*家长级别个数*/

      dtvia_parent_rate_ptrp_parent_rate;   /*家长级别链表*/

      int               detail_length      /*详细描述长度*/

      unsigncd char     *event_detail      /*详细描述*/

      int               item_sum        /*item个数*/

      dtvia_item_de sc_ptr     p_item      /*item链表*/

      int             linkage_sum;     /*链接个数*/

      dtvia_linkage_ptr p_linkage_list;   /*linkage链表*/

  int            data_broadcast_sum;   /*Data broadcast个数*/

  dtvia_data_broadcast_ptr p_db_desc;  /*Data broadcast链表*/

      EPG_EIT_INFO_PTR p_next

    }EPG_EIT_INFO,*EPG_EIT_INFO_PTR;
EIT链表
  typedef struct {

    int                   eit_sum;

    EPG_EIT_iNFO_PTR   p_eit_list;

  }dtiva_eit_head,dtiva_eit_ptr;
对于时间信息,TDT表中接收的是UTC标准时间,如果要接收本地时间,则需要接收TOT表。时间信息的存储结构如下(C语言描述):
  typedef struct {

    int m_year;       /*年*/

    int m_month;    /*月*/
        <!-- SIPO <DP n="13"> -->
        <dp n="d13"/>
    int m_day;         /*日*/

    int m_week_day;      /*星期*/

    int m_hour;          /*小时*/

    int m_minute;      /*分钟*/

    int m_second;      /*秒*/

  }dtvia_time,*dtvia_time_ptr;

  typedef struct local_time{

      dtvia_time local_time;                 /*本地时间*/

      short    current offset_hour;/*-12ˉ+13*/    /*时区偏移小时*/

      short    current_offset_minute;          /*时区偏移分钟*/

      short    time_change_sum;           /*时区变更时间总数*/

      TIME_CHANGE_PTR p_change_list;   /*时区变更时间列表*/

  }LOCAL_TIME,*LOCAL_TIME_PTR;
接收节目信息指南,一般在开机的时候进行;但是,由于某些表如TDT/TOT表的信息的发送频率较低,如果在每次开机时接收可能导致开机时间延长。为了解决开机时间延长的问题,可以采用本方法在后台设立一个EPG接收引擎,在系统空闲的时候去接收TDT/TOT以及其它一些SI信息。
TDT/TOT表里提供系统时钟的可能。在每次开机时接收TOT表,设置本地时钟,提供为电子节目指南里的时间显示和预定节目的参考时间。SI标准里规定,在节目信息表里的时间都是UTC时间,而EIT预告节目的子表table_id及segment的划分也是以UTC时间来计算的,在接收EIT表设置过滤器时就要注意到跨天的情况。
举个例子,比如一个用户在北京时间的星期二的上午九点想查看北京时间星期二零点到二十四点之间的节目信息,转成标准时间就是星期一的下午四点到星期二的下午四点。如果按照北京时间零点到二十四点来分table_id的话,它应该是table_id=0x50的segment0-segment7(每个segment包含8个section,对应于3小时),而按照SI标准,则必须是依照UTC的时间来划分,则在北京时间星期二的上午九点是UTC时间的星期二的一点,而这时table_id已经刚好更新一小时,所以实际上用户只能得到北京时间星期二八点到二十四点的节目信息,且这段时间对应于table_id=0x50的segment0-segment5。
本发明给出了一种接收一周(7天)预告节目的table_id及segment的换算方法,以便用户得到正确的时间信息,流程如下:
从TOT表中得到本地时间的偏移utc_offset;
设置预告天数偏移offset_day(取值范围0~6)
如果偏移utc_offset<0,则utc_offset=utc_offset+24;
如果当前小时hour>=utc_offset&&hour<24则:
  如果offset_day=4(这一天跨table_id)则接收
         table_id=0x50(如果是o-sch则为0x60),
         起始start_segment=31-utc_offse/3
         结束end_segment=31
         并接收
         table_id=0x51(如果是o-sch则为0x61),
         起始start_segment=0
         结束end_segment=(23-utc_offset)/3
  如果offset_day=0(当天)则
            table_id=0x50(如果是o-sch则为0x60),
            起始start_segment=0
            结束end_segment=(23-utc_offset)/3
  如果offset_day为其它值,则
              table_id=(offset_day-1)/4+0x50(如果是o-sch则
                      为(offset_day-1)/4+0x60),
              起始start_segment=8*((offset_day-1)%4)
                      +(24-utc_offset)/3
                 结束end_segment=start_segment+7
如果当前小时hour<utc_offset(locally second day)则
  如果offset_day=3(这一天跨table_id)则接收
          table_id=0x50(如果是o-sch则为0x60),
          起始start_segment=31-utc_offse/3
          结束end_segment=31
          并接收
          table_id=0x51(如果是o-sch则为0x61),
          起始start_segment=0
          结束end_segment=(23-utc_offset)/3
如果off_set_day为其它值,则
              table_id=offset_day/4+0x50(如果是o-sch则为
                       offset_day/4+0x60),
              起始start_segment=8*(offset_day%4)
                      +(24-utc_offset)/3
              结束end_segment=start_segment+7
最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。

Claims (18)

1、一种多频点电子节目指南信息的接收方法,其特征在于:包括如下步骤:
步骤一、接收数据流中的电子节目指南信息数据,如果在指定的时间内,电子节目指南信息数据全部被接收,则执行步骤二;否则,超出指定的时间,则强制停止接收过程,并释放占用的资源;
步骤二、解析步骤一得到的电子节目指南信息数据,得到电子节目指南信息,释放占用的资源;
步骤三、将步骤二得到电子节目指南信息填入到固定的数据结构中,提供给EPG应用。
2、根据权利要求1所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤一,包括:
步骤1.1、为接收电子节目指南信息数据分配系统资源,分配过滤器;
步骤1.2、检验系统资源是否可用,如果可用,则开始接收过程;
步骤1.3、接收电子节目指南信息数据,判断是否所有电子节目指南信息表都已经接收,如果是,则执行步骤二;否则,更换新的过滤器,继续接收过程;如果超时,则强制停止接收过程,并释放占用的资源。
3、根据权利要求2所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤1.1,包括:
步骤1.11、从解复用器中分配未使用的通道;如果分配失败,则执行步骤1.16;
步骤1.12、为步骤1.11所分配的通道注册相应的回调程序,如果注册失败,则执行步骤1.16;
步骤1.13、为步骤1.11所分配的通道分配缓存资源;如果分配失败,则执行步骤1.16;
步骤1.14、为步骤1.11所分配的通道设置PID值,此PID值为过滤器接收传输流的PID值;如果设置失败,则执行步骤1.16;
步骤1.15、为步骤1.11所分配的通道分配过滤器,结束步骤1.1;如果分配失败,则执行步骤1.16;
步骤1.16、释放资源,根据失败的类型,释放过滤器、通道及缓存,退出节目指南信息的接收。
4、根据权利要求2所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤1.2,包括:
步骤1.21、判断通道是否有效,如果有效,执行步骤1.22;否则执行步骤1.26;
步骤1.22、判断过滤器是否有效,如果有效,执行步骤1.23;否则执行步骤1.26;
步骤1.23、设置过滤器参数,包括数据位和掩码,如果成功,执行步骤1.24;否则执行步骤1.26;
步骤1.24、启动过滤器,如果成功,执行步骤1.25;否则执行步骤1.26;
步骤1.25、启动通道,如果成功,则开始接收节目指南信息数据,结束步骤1.2;否则执行步骤1.26;
步骤1.26、根据错误的类型,设置错误号,释放过滤器、通道及缓存,结束节目指南信息的接收过程。
5、根据权利要求2所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤1.3,包括:
步骤1.31、硬件检测到数据到达,调用Section回调程序,接收当前过滤器传来的Section数据,一个Section数据的数据完全被接收,回调程序将其拷贝到缓存中;
步骤1.32、重新调用Section回调程序,接收下一个Section的数据;
步骤1.33、如果一个信息表的全部的子表和子表的全部Section数据都被接收,则更换新的过滤器,重新接收未接收信息表的Section数据;如果所有信息表的全部数据都已经被接收,则执行步骤二;如果超时,则强制停止接收过程,并释放占用的资源。
6、根据权利要求5所述的多频点电子节目指南信息的接收方法,其特征在于:所述的回调程序用来接收Section数据,并检查Section数据的正确性,将Section数据的拷贝内存缓冲区,判断整个信息表是否完全被接收。
7、根据权利要求6所述的多频点电子节目指南信息的接收方法,其特征在于:所述的内存缓冲区,采用预分配的缓冲池方式管理;
所述的预分配的缓冲池对所有不同的表采用一致的内存池数据结构,对于不包括子表的情况,每个内存池存放一个完整信息表;对于多子表的情况下,一个完整的表放入多个内存池中保存,每个内存池存放一个子表。
8、根据权利要求7所述的多频点电子节目指南信息的接收方法,其特征在于:所述的内存池的初始大小根据信息表的种类各不相同,NIT表、BAT表、SDT表可以为20KB;OSDT表可以为40KB;PF-EIT表可以为80KB;SCH-EIT表可以为64KB;TDT/TOT表可以为4KB。
9、根据权利要求7所述的多频点电子节目指南信息的接收方法,其特征在于:如果所存储的数据超过缓冲池,即缓冲池中所有的内存池已经都存储有数据,再有新的数据要放入缓冲池中存储,则将缓冲池的大小增大一倍,同时保持已有数据不变。
10、根据权利要求7所述的多频点电子节目指南信息的接收方法,其特征在于:所述的缓冲池,其数据结构至少包括缓冲池的始末地址和长度、保存已存入的section在缓冲池中的起始地址和长度的数组和存入的seciton总个数。
11、根据权利要求7或10所述的多频点电子节目指南信息的接收方法,其特征在于:所述的内存池,其数据结构至少包括起始地址、长度、末尾地址,总的section个数。
12、根据权利要求5所述的多频点电子节目指南信息的接收方法,其特征在于:所述的回调程序,包括如下步骤:
步骤1.300、判断接收是否已经结束,如果已经结束,则退出回调程序;否则,执行步骤1.301;
步骤1.301、判断Section的数据版本是否正确,如果正确,则执行步骤1.302;否则,执行步骤1.305;
步骤1.302、判断数据是否正确,如果正确,则执行步骤1.303;否则,重新启动通道,接收该Section的数据,结束回调程序;
步骤1.303、判断是否缓冲区中已经存在该Section的完整数据,如果是,则抛弃接收的数据;否则执行步骤1.304;
步骤1.304、将数据添加到缓冲区中,如果成功,则重新设置过滤器;重新启动通道,结束回调程序;否则,执行步骤1.305;
步骤1.305、停止通道和过滤器,根据错误类型设置错误号,结束回调程序,退出电子节目指南信息的接收。
13、根据权利要求12所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤1.305,包括:
步骤1.3051、判断通道是否有效,如果有效,则停止通道;否则执行步骤1.3053;
步骤1.3052、判断过滤器是否有效,如果有效,则停止过滤器,结束回调程序;否则执行步骤1.3053;
步骤1.3053、根据错误类型,设置错误号,结束回调程序。
14、根据权利要求1所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤二,解析电子节目指南信息数据,包括:
步骤2.1、获取信息表的第一层循环的长度,如果大于零,则执行步骤2.2;否则执行步骤2.4;
步骤2.2、获取描述子内容,第一层循环长度减去此描述子长度,若内容正确,执行步骤2.3,否则回到步骤2.1;
步骤2.3、添加描述子内容到当前结果,回到步骤2.1;
步骤2.4、获取信息表第二层循环的长度,若大于零,则执行步骤2.5;否则结束步骤3;
步骤2.5、获取map内容,第二层循环长度减去此map长度,得到map内的第一个描述子的descriptor_id,根据SI标准解析此描述子,并将结构添加到当前结果;反复步骤2.5,直到解析完此map内所有的描述子;
步骤2.6、将步骤2.5中所获得的map内容中解析所得的内容添加到结果列表;返回步骤2.4。
15、根据权利要求14所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤二,解析电子节目指南信息后,还包括释放资源过程:
步骤4.1、判断过滤器是否有效,如果有效,释放过滤器及缓存;否则,执行步骤4.3;
步骤4.2、判断通道是否有效,如果有效,释放通道,结束释放资源;否则执行步骤4.3;
步骤4.3、根据错误类型,设置错误号,结束释放资源。
16、根据权利要求1所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤三,将经过解析之后得到的数据按照固定的数据结构提供给EPG应用,即将电子节目指南信息数据赋值给固定数据结构中的对应变量,便于EPG应用使用这些变量,完成相应的功能。
17、根据权利要求16所述的多频点电子节目指南信息的接收方法,其特征在于:对于多section的信息表,解析后存储的信息采用一致的单链表存储结构。
18、根据权利要求14所述的多频点电子节目指南信息的接收方法,其特征在于:所述的步骤二,还包括计算最近7天EIT表的接收中按本地时间接收时,segment的计算方法,具体包括:得到本地时间偏移,设置预告天数偏移,根据本地时间偏移及预告天数偏移计算segment。
CN 200310116953 2003-12-03 2003-12-03 多频点电子节目指南信息的接收方法 Expired - Fee Related CN1259797C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200310116953 CN1259797C (zh) 2003-12-03 2003-12-03 多频点电子节目指南信息的接收方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200310116953 CN1259797C (zh) 2003-12-03 2003-12-03 多频点电子节目指南信息的接收方法

Publications (2)

Publication Number Publication Date
CN1625237A true CN1625237A (zh) 2005-06-08
CN1259797C CN1259797C (zh) 2006-06-14

Family

ID=34760831

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200310116953 Expired - Fee Related CN1259797C (zh) 2003-12-03 2003-12-03 多频点电子节目指南信息的接收方法

Country Status (1)

Country Link
CN (1) CN1259797C (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100450160C (zh) * 2005-11-08 2009-01-07 中央电视台 中文epg频道分类的方法和装置
CN100454987C (zh) * 2005-11-08 2009-01-21 中央电视台 中文epg节目分类的方法和装置
CN101909140A (zh) * 2010-08-10 2010-12-08 福建新大陆通信科技股份有限公司 机顶盒快速接收epg数据的方法
CN102075804A (zh) * 2010-12-29 2011-05-25 青岛海信宽带多媒体技术有限公司 获取si数据的方法及装置
CN102131116A (zh) * 2011-01-25 2011-07-20 四川长虹电器股份有限公司 一种数字电视epg数据接收和解析方法
CN102215430A (zh) * 2011-06-02 2011-10-12 福建新大陆通信科技股份有限公司 一种机顶盒滤取epg避免数据溢出的方法
CN113613078A (zh) * 2021-08-02 2021-11-05 四川长虹网络科技有限责任公司 一种数字电视section数据的接收方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101459780B (zh) * 2007-12-12 2013-03-06 新奥特(北京)视频技术有限公司 一种主动式回调方法

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100450160C (zh) * 2005-11-08 2009-01-07 中央电视台 中文epg频道分类的方法和装置
CN100454987C (zh) * 2005-11-08 2009-01-21 中央电视台 中文epg节目分类的方法和装置
CN101909140A (zh) * 2010-08-10 2010-12-08 福建新大陆通信科技股份有限公司 机顶盒快速接收epg数据的方法
CN102075804A (zh) * 2010-12-29 2011-05-25 青岛海信宽带多媒体技术有限公司 获取si数据的方法及装置
CN102075804B (zh) * 2010-12-29 2014-01-01 青岛海信宽带多媒体技术有限公司 获取si数据的方法及装置
CN102131116A (zh) * 2011-01-25 2011-07-20 四川长虹电器股份有限公司 一种数字电视epg数据接收和解析方法
CN102131116B (zh) * 2011-01-25 2013-04-03 四川长虹电器股份有限公司 一种数字电视epg数据接收和解析方法
CN102215430A (zh) * 2011-06-02 2011-10-12 福建新大陆通信科技股份有限公司 一种机顶盒滤取epg避免数据溢出的方法
CN113613078A (zh) * 2021-08-02 2021-11-05 四川长虹网络科技有限责任公司 一种数字电视section数据的接收方法
CN113613078B (zh) * 2021-08-02 2023-06-23 四川长虹网络科技有限责任公司 一种数字电视section数据的接收方法

Also Published As

Publication number Publication date
CN1259797C (zh) 2006-06-14

Similar Documents

Publication Publication Date Title
CN1200566C (zh) 从单个电子节目指南服务器提供电子节目指南信息的方法和设备
CN1187931C (zh) 用于电视的多区域交互节目引导
CN1170422C (zh) 广播接收装置
CN1110950C (zh) 信息接收方法及使用此方法的信息接收装置
CN1170423C (zh) 提供用于显求节目指南的一组模板的方法及电视用户系统
CN1118197C (zh) 一种用于选择和合并数字化节目的方法、合并器和数字电缆端头
CN1178505C (zh) 用于广播发送媒体对象的方法和设备
CN1748417A (zh) 用于在广播节目中识别和插入广告的系统和方法
CN101036383A (zh) 广播接收装置
CN1875620A (zh) 数据广播
CN1874205A (zh) 使用接收的地面数字广播数据提供用户界面的方法
CN1799211A (zh) 突发传输
BR112013032377B1 (pt) Método para gravar múltiplos canais de conteúdo, sistema para gravar múltiplos fluxos de conteúdo em sintonizador único e meio não transitório de armazenagem legível por computador codificado
CN1625237A (zh) 多频点电子节目指南信息的接收方法
CN101068361A (zh) 用于升级编解码器的设备和方法
CN1801377A (zh) 内容使用系统、记录装置、重现装置以及系统控制方法
CN1878283A (zh) 在双模dmb接收机中提供综合epg的方法
CN1416648A (zh) 用于标题信息数字电视服务及其接收机的方法和设备
CN1640116A (zh) 信号处理设备和信号处理方法
CN1415165A (zh) 数字电视和视频业务网及接收机的交互业务方法和装置
CN1845595A (zh) 传输、提取并搜索节目信息的方法及搜索引擎、机顶盒
CN1801924A (zh) 具有软件升级能力的视频装置及其控制方法
CN1630351A (zh) 电视接收机、信息处理方法以及程序
CN1878178A (zh) 节目收视信息的处理方法和处理系统
CN1725848A (zh) 线缆调制解调器的跳频方法、线缆调制解调器及传输系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: BEIJING WIDE-SOFTWARE TECHNOLOGY CO.

Free format text: FORMER OWNER: BEIJING ZHONGSHILIAN DIGITAL SYSTEM CO., LTD.

Effective date: 20070302

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20070302

Address after: 100080, Beijing, Zhongguancun, Haidian District East Road, 66 century science and technology building, block B, 26

Patentee after: Beijing Kuanshi Software Technology Co., Ltd.

Address before: 100176, Beijing economic and Technological Development Zone Hongda North Road No. 5, 10 floor

Patentee before: Beijing Zhongshilian Digital System Co., Ltd.

C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060614

Termination date: 20121203