背景技术
随着国家三网融合政策的大力推行,机顶盒增值业务的市场需求为整个社会发展带来了巨大的商机。目前致力于数字电视业务开发的中间件公司也随之增多,中间件的表现形式日趋多样化。浏览器、数据广播、股票***、互动游戏、以及涵盖数字电视各类应用的纯中间件***等多种增值业务在机顶盒终端得到了广泛移植和应用。
由于目前中间件的开发尚未标准化、统一化、流程化,各个中间件厂商设计出来的软件***架构千差万别,并且机顶盒厂商自身所采用的方案、软件架构以及CA模块实现方法也是多种多样,这些差异的存在无疑给机顶盒终端厂商对中间件的移植工作带来了很***烦。其中表现较为突出的是中间件内加密节目的解扰实现问题。
CA模块是机顶盒中一个非常重要的模块,CA模块直接决定着加密节目是否能够正常收看。而且,广电运营商为了控制节目的播控权,对原始节目流大都进行了加密。当加密发生在中间件所涉及的节目时,中间件的移植就会变得较为繁琐。对于中间件***内加密节目的解扰应该由中间件厂商完成还是由机顶盒厂商完成,其实在业界一直存在着不同意见,但考虑到入网机顶盒在CA认证方面的工作量和经费问题,目前CA解扰功能的实现大都在盒端由机顶盒厂家完成。在实际的中间件移植实施过程中,在节目播放方面,中间件与机顶盒终端的对接形式多种多样,这些形式归纳起来,大致有以下几种。
(M1)、当播放加密节目时,中间件以音频标志码传输包(Packet Identifier,PID)、视频PID、PCR PID作为输入参数定义节目播放函数与机顶盒对接。
(M2)、当播放加密节目时,中间件以音频PID、视频PID、PCR PID、音频ECM PID、视频ECM PID作为输入参数定义节目播放函数与机顶盒对接。
(M3)、当播放加密节目时,中间件以传送流的数据流(TS)ID和ServiceID作为输入参数定义节目播放函数与机顶盒对接。
(M4)、当播放加密节目时,中间件以节目的PMT表的PID作为输入参数定义节目播放函数与机顶盒对接。
(M5)、当播放加密节目时,中间件以节目的PMT表作为输入参数定义节目播放函数与机顶盒对接。
中间件与机顶盒终端在节目播放方面多种对接形式的存在,使得中间件启动盒端CA解扰模块的适配方法也多种多样,目前常用的方法归纳起来有以下几种:
(N1)、当中间件播放加密节目时所传递给机顶盒的参数为音频PID、视频PID、PCR PID或者TSID、Service ID时,仅凭音频PID、视频PID、PCR PID三个参数或者TS ID、Service ID两个参数,盒端现有的CA模块是无法直接为中间件启动解扰的,现有方法通常是在当前CA模块的架构上再增加一个接口,以音频PID、视频PID、PCR PID或者TS ID、Service ID作为匹配目标,通过查询的方式从节目搜索时已存储的数据库中,找到当前节目的PMT,或者采用即时接收PMT的方式,从正在播发的传送流中,收到当前节目所对应的PMT,CA模块从PMT中分析出加密节目的ECM PID信息,由此完成中间件加密节目的解扰功能。
(N2)、当中间件播放加密节目时所传递给机顶盒的参数为ECM PID时,现有方法通常是直接以ECM PID作为输入参数由CA模块定义一个接口,在此接口内完成中间件加密节目的解扰功能。
(N3)、当中间件播放加密节目时所传递给机顶盒的参数为PMT表的PID时,现有方法通常是以PMT PID作为输入参数,由CA模块定义一个接口,在该接口内采用即时接收的方法,通过创建节目影射表(Program Map Table,PMT)的解复用通道,并将PMT PID设入解复用通道中,从正在播发的传送流中接收到与之对应的PMT,从PMT中分析出加密节目的授权控制信息(ECM)PID信息,由此完成加密节目的解扰功能。
(N4)、当中间件播放加密节目时所传递给机顶盒的参数为PMT表时,现有方法通常是以PMT表的内存地址作为输入参数,由CA模块定义一个接口,在该接口内CA模块通过分析传入的PMT内容,得出加密节目的ECM PID信息,完成加密节目的解扰功能。
本发明的发明人在研究过程中发现,现有技术存在如下缺点:
(L1)、中间件与机顶盒在节目播放方面多种对接形式的存在,使得机顶盒在CA解扰实现方面与中间件的适配方法种类繁多,机顶盒通常都是根据不同种类的中间件所传递的不同形式的信息内容通过修改CA模块的接口,采用与其相配套的接口和方法完成CA解扰功能,这就要求机顶盒CA模块根据中间件的不同种类时常做出一些变更,使得机顶盒能够完成中间件内部业务的解扰功能。这样就会使得盒端CA模块与中间件种类的耦合性增强,加大了维护CA模块的工作量,同时,中间件的移植工作也变得非常繁琐,通常调通了一种中间件的CA解扰功能,在移植其他种类的中间件时,还需要再次做重复性的调试工作。
(L2)、通常数字电视传输网中单个频点下包含若干个节目(一般小于10),传送流以0.1~0.5秒的时间间隔循环传输一张节目关联表(Program AssociationTable,PAT)表,该表包含了每个节目与其对应的PMT PID之间的映射关系,并以0.1~0.5秒的时间间隔循环传输每个节目所对应的PMT表。当中间件播放加密节目所传递给机顶盒的参数形式需要CA模块必须采用即时接收PMT的方式启动CA解扰时,现有的方法通常是将当前频点下所有节目的PMT全部接收下来,从中找到与中间件加密节对应的PMT来启动CA解扰。因此,这种启动CA解扰的方法是需要一个时间过程的,而且中间件所在的频点中包含的节目和业务的个数越多,从这些节目中即时找到这些节目和业务的PMT表的接收时间就会越长,中间件播放加密节目启动CA解扰的过程耗时也就越长。
(L3)、由于运营商对前端随时都可能进行升级,每个节目的PMT都存在随时变动、调整的可能,当中间件启动CA解扰时,如果采用节目信息数据库中的PMT作为启动CA解扰的参数,当前正在播发的PMT可能与历史时刻用户搜索时所存储的PMT内容不一致,从而使得CA模块得到的是一个与当前加密节目不相匹配的PMT,造成CA模块的解扰失败。并且,为了缓解数字电视网络的通信负荷,很多中间件视频点播(Video On Demand,VOD)节目的PMT通常只有在用户请求点播时前端才会传送,因此,在用户进行节目搜索时,很多点播节目的PMT是无法获取到的,那么在点播***内,直接通过查询的方法是无法得到对应节目的PMT的。由此可见,通过节目信息数据库查询的方法获取PMT表完成CA解扰的启动,是不可靠的。
综上,如何降低CA模块与中间件的耦合性,减少开发人员维护CA模块的工作量,提高各类中间件移植工作的效率,是数字电视技术领域研究的方向之一。
发明内容
本发明实施例的目的在于提供一种数字电视的数据处理***及方法、数字电视接收终端,旨在降低CA模块与中间件的耦合性,减少开发人员维护CA模块的工作量,提高各类中间件移植工作的效率。
本发明实施例是这样实现的,一种数字电视的数据处理***,所述***包括中间件模块,CA模块和判断启动模块,所述中间件模块与所述CA模块之间还设置有一适配模块以及节目映射表缓存模块,
其中,所述中间件模块,用于向所述适配模块发送参数;
所述判断启动模块,用于判断所述中间件模块是否启动;
所述适配模块,用于获取所述中间件模块发送的参数的类型,在所述判断启动模块判断中间件模块启动,根据所述参数的类型在所述缓存模块中组成完整的节目映射表,所述节目映射表对应所述参数;
所述适配模块,还用于将完整的节目映射表发送至所述CA模块,由所述CA模块进行解扰;
所述节目映射表缓存模块,在未接收到适配模块发来的参数时,按照每个节目映射表的先后顺序进行接收,在接收到适配模块发来的参数时,优选处理所述参数对应的节目关联表;
所述节目映射表缓存模块,将节目映射表接收以及再接收的时间消耗控制在中间件模块***启动时或者中间件模块运行过程中频点发生跳转时或者终端监测到当前频点下的PAT版本发生变化时;
所述节目映射表缓存模块,还用于存储中间件模块在运行期间需要的不同频点下所有节目的节目关联表,其中,已存储的节目关联表不再重复接收。
优选的,所述判断启动模块,还用于判断所述中间件模块运行过程中频点是否发生跳转,若所述中间件模块运行过程中频点发生跳转,所述适配模块根据所述参数的类型在所述节目映射表缓存模块中组成完整的节目映射表。
优选的,所述判断启动模块,还用于判断当前频点下的节目关联表版本是否发生变化,若当前频点下的节目关联表版本发生变化,所述适配模块根据所述参数的类型在所述节目映射表缓存模块中组成完整的节目映射表,其中,频点一一对应节目关联表。
优选的,所述适配模块据所述参数的类型在所述缓存模块中组成完整的节目映射表的过程中,还判断接收所述节目映射表的时间是否大于***设置的阈值,若大于,则终止对所述节目映射表的接收。
本发明实施例的还一目的在于提供一种数字电视的数据处理方法,所述方法包括以下步骤:
提供中间件模块、CA模块和判断启动模块,以及所述中间件模块与所述CA模块之间的适配模块和节目映射表缓存模块,
所述中间件模块向所述适配模块发送参数;
所述判断启动模块判断所述中间件模块是否启动;
所述适配模块获取所述中间件模块发送的参数的类型,在所述判断启动模块判断中间件模块启动,根据所述参数的类型在所述缓存模块中组成完整的节目映射表,其中,所述节目映射表对应所述参数;
所述适配模块将完整的节目映射表发送至所述CA模块,由所述CA模块进行解扰;
所述节目映射表缓存模块,在未接收到适配模块发来的参数时,按照每个节目映射表的先后顺序进行接收;在接收到适配模块发来的参数时,优选处理所述参数对应的节目关联表;
所述节目映射表缓存模块,将节目映射表接收以及再接收的时间消耗控制在中间件模块***启动时或者中间件模块运行过程中频点发生跳转时或者终端监测到当前频点下的PAT版本发生变化时;
所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表时,所述节目映射表缓存模块,还存储中间件模块在运行期间需要的不同频点下所有节目的节目关联表,其中,已存储的节目关联表不再重复接收。
优选的,所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表的步骤之前,所述方法还包括以下步骤:
判断所述中间件模块运行过程中频点是否发生跳转,若所述中间件模块运行过程中频点发生跳转,则所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表。
优选的,所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表的步骤之前,所述方法还包括以下步骤;
判断当前频点下的节目关联表版本是否发生变化,若发生变化,则所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表,其中,频点一一对应节目关联表。
优选的,所述适配模块据所述参数的类型在所述缓存模块中组成完整的节目映射表时,还包括以下步骤:
判断接收所述节目映射表的时间是否大于***设置的阈值,若大于,则终止对所述节目映射表的接收。
本发明实施例通过在中间件模块与CA模块之间设置适配模块和节目映射表缓存模块,所述适配模块获取所述中间件模块发送的参数的类型,根据所述参数的类型在所述缓存模块中组成完整的节目映射表发送给CA模块,由所述CA模块进行解扰,极大的降低了机顶盒CA模块与中间件模块的耦合性,减少了开发人员维护CA模块的工作量,提高了各类中间件移植工作的效率。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例通过在中间件模块与CA模块之间设置适配模块和节目映射表缓存模块,所述适配模块获取所述中间件模块发送的参数的类型,根据所述参数的类型在所述缓存模块中组成完整的节目映射表发送给CA模块,由所述CA模块进行解扰
本发明第一实施例提供了一种数字电视的数据处理***,请参阅图1。
所述***包括中间件模块11,CA模块12,所述中间件模块11与所述CA模块12之间还设置有一适配模块13以及节目映射表缓存模块14。
其中,所述中间件模块11向所述适配模块13发送参数,所述适配模块13获取所述中间件模块11发送的参数的类型,根据所述参数的类型在所述缓存模块14中组成完整的节目映射表,所述节目映射表对应所述参数。
所述适配模块13将完整的节目映射表发送至所述CA模块12,由所述CA模块12进行解扰。
其中,所述***包括判断启动模块15,判断启动模块15判断所述所述中间件模块11是否启动,若所述中间件模块11启动,所述适配模块13根据所述参数的类型在所述节目映射表缓存模块14中组成完整的节目映射表。
其中,所述判断启动模块15还判断所述中间件模块11运行过程中频点是否发生跳转,若所述中间件模块11运行过程中频点发生跳转,所述适配模块13根据所述参数的类型在所述节目映射表缓存模块14中组成完整的节目映射表。
其中,所述判断启动模块15还判断当前频点下的节目关联表版本是否发生变化,若当前频点下的节目关联表版本发生变化,所述适配模块13根据所述参数的类型在所述节目映射表缓存模块14中组成完整的节目映射表,其中,频点一一对应节目关联表。
其中,所述节目映射表缓存模块14在未接收到适配模块发来的参数时,按照每个节目映射表的先后顺序进行接收;在接收到适配模块发来的参数时,优选处理所述参数对应的节目关联表。
其中,所述节目映射表缓存模块14存储中间件模块在运行期间需要的不同频点下所有节目的节目关联表,对于已存储的节目关联表不再重复接收。
其中,所述适配模块13据所述参数的类型在所述缓存模块14中组成完整的节目映射表时,还判断接收所述节目映射表的时间是否大于***设置的阈值,若大于,则终止对所述节目映射表的接收。
更具体的工作过程请参阅下文描述。
本发明实施例第二实施例提供的数字电视的数据处理方法的基本流程,请参阅图2。
在步骤S201中,提供中间件模块、机顶盒端的CA模块,以及所述中间件模块与所述CA模块之间的适配模块和节目映射表缓存模块。
在步骤S202中,中间件模块向所述适配模块发送参数。
在步骤S203中,适配模块获取中间件模块发送的参数的类型,根据参数的类型在所述缓存模块中组成完整的节目映射表,其中,节目映射表对应参数。
在步骤S204中,适配模块将完整的节目映射表发送至CA模块,由CA模块进行解扰。
其中,所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表的步骤之前,还判断所述中间件模块是否启动,若所述中间件模块启动,则所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表。
优选的,所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表的步骤之前,还判断所述中间件模块运行过程中频点是否发生跳转,若所述中间件模块运行过程中频点发生跳转,则所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表。
优选的,所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表的步骤之前,还判断当前频点下的节目关联表版本是否发生变化,若发生变化,则所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表,其中,频点一一对应节目关联表。
其中,适配模块根据参数的类型在缓存模块中组成完整的节目映射表的步骤之前,所述方法还包括:
所述节目映射表缓存模块,在未接收到适配模块发来的参数时,按照每个节目映射表的先后顺序进行接收;
在接收到适配模块发来的参数时,优选处理所述参数对应的节目关联表。
其中,所述适配模块根据所述参数的类型在所述缓存模块中组成完整的节目映射表时,所述节目映射表缓存模块,还存储中间件模块在运行期间需要的不同频点下所有节目的节目关联表,其中,已存储的节目关联表不再重复接收。
其中,所述适配模块据所述参数的类型在所述缓存模块中组成完整的节目映射表时,还包括以下步骤:
判断接收所述节目映射表的时间是否大于***设置的阈值,若大于,则终止对所述节目映射表的接收。
本发明实施例还提供了一种利用上述数据处理方法的数字电视终端,尤其是一种机顶盒,此处不再详述。
请参阅图3,图3为本发明实施例提供的数字电视的数据处理方法的详细流程。
为了便于确定不同中间件模块传递给机顶盒的参数类型,本发明实施例采用如下几种简化的字符串进行表示:
(a)Info=AudioPid.VideoPid.PcrPid;
(b)Info=AudioPid.VideoPid.PcrPid.AudioEcmPid.VideoEcmPid;
(c)Info=TsId.ServiceId;
(d)Info=PmtPid;
(e)Info=ServicePmt。
基于上述字符串形式,以下通过中间件模块定义的音、视频播放接口的适配流程来具体说明适配模块的工作原理。其中,本发明实施例的下述方法和步骤全部在中间件模块定义的音、视频节目播放接口内完成。
步骤S301,向节目映射表(PMT)缓存模块发送启动消息,通知PMT缓存模块创建并启动,转入步骤S302;
步骤S302,读取中间件模块通过音视频播放接口函数传递过来的参数,判定所述参数的类型,若为(a),则转入步骤S303;若为(b),则转入步骤S304;若为(c),则转入步骤S305;若为(d),则转入步骤S306;若为(e),则转入步骤S307;其他情况则提示参数无效,转入步骤S310;
步骤S303、将AudioPid、VideoPid、PcrPid作为匹配目标,设定阈值为3秒,查询PMT缓存模块搜索与之匹配的PMT,若在3秒内找到,则转入步骤S308;当查询时间超过3秒时,或者没有找到,则提示PMT获取失败,并转入步骤S310;
步骤S304、根据AudioPid、VideoPid、PcrPid、AudioEcmPid以及VideoEcmPid,构造一个PMT(具体构造方法请参阅图5以及针对图5的详细描述),并向PMT缓存模块发送携带PMT内容的消息,通知PMT缓存模块将当前PMT进行注入保存,转入步骤S308;
步骤S305、向PMT缓存模块发送携带ServiceID、TsId的消息,通知PMT缓存模块优先获取与当前ServiceID和TsId相对应的PMT,设定阈值为3秒,将ServiceID、TsId作为匹配目标,查询PMT缓存模块中的PmtBuffer,若在3秒内查询不为空,则转入步骤S308;若用时超过3秒,或者为空,则提示PMT获取失败,转入步骤S310;
步骤S306、向PMT缓存模块发送携带PMTPID的消息,通知PMT缓存模块优先获取与当前PMTPID相对应的PMT,设定阈值为3秒,将PMTPID作为匹配目标,查询PMT缓存模块中的PmtBuffer,若在3秒内查询不为空,则转入步骤S308;若超过3秒,或者为空,则提示PMT获取失败,并转入步骤S310;
步骤S307、读取中间件模块通过节目播放函数传递过来的PMT,并向PMT缓存模块发送携带PMT的消息,通知PMT缓存模块将当前PMT进行注入保存,转入步骤S308;
步骤S308、将获取到的PMT通过CA模块提供的以PMT作为输入参数的接口函数传递给盒端CA模块,请求CA模块启动解扰;
步骤S309、设定音频PID、视频PID、PCR PID,并启动解码器,之后,CA模块开始工作,加密节目正常播出。
步骤S310、结束返回。
在具体实施过程中,通常数字电视传输网中单个频点下包含若干个节目,传送流以0.1~0.5秒的时间间隔循环传输一张PAT表,该PAT表包含了每个节目与其对应的PMT PID之间的映射关系,以0.1~0.5秒的时间间隔循环传输每个节目所对应的PMT表,并通过PAT表第六个字节携带的版本号的变化情况,通知终端机顶盒前端环境对当前频点下所传送的节目PMT是否发生变更和调整。由此可见,PMT表的接收是需要一个时间过程的,而且中间件模块所在的频点中包含的节目和业务的个数越多,获取到这些节目和业务的PMT表的接收时间就会越长;并且通过对PAT版本号的监测,可以得知当前频点下的节目PMT的更新情况,为了使得各类中间件模块***在其启动时刻和整个运行过程中在请求终端播放加密节目时,中间件模块能够为之快速的获取PMT并传递给盒端CA解扰模块,以达到快速启动CA解扰的目的,提高中间件模块***内加密业务和节目的切换速度,并确保所请求播放的节目每个时刻都能获取到正确的PMT,本发明设计了一个PMT缓存模块。
本发明实施例提供的PMT缓存模块,主要包括有以下几个特征:
(1)、将PMT接收以及再接收的时间消耗控制在中间件模块***启动时或者中间件模块运行过程中频点发生跳转时或者终端监测到当前频点下的PAT版本发生变化时,只有检测到这些情况发生时,才启动缓存模块对PMT的接收。
(2)、PMT缓存模块将存储中间件模块***在整个运行期间需要的每个不同频点下所有节目的PMT,并控制同一个频点下相同节目和业务的PMT不能进行重复接收。
(3)、在中间件模块***启动时或者中间件模块***运行期间频点发生跳转时或者终端监测到当前频点下的PAT版本发生变化时,当PMT缓存模块在没有接收到适配模块发来的消息时,将按照每个节目的PMT PID在PAT中所描述的先后顺序,依次为其接收PMT;当PMT缓存模块接收到适配模块发来的消息时,缓存模块会立刻打破正常的接收顺序,根据得到的消息内容,从PAT中找到与消息内容对应的PMT PID,优先为适配模块正在请求的PMT安排接收;当PMT缓存模块检测到适配模块发来的消息携带PMT内容时,PMT缓存模块将会直接采用当前PMT,而不再为与之对应节目重复接收该PMT。
(4)、在中间件模块***运行期间,PMT缓存模块将自身收到的PMT或者中间件模块发送过来的PMT全部保存起来,以方便中间件模块的随时查询和调用。
通过运用PMT缓存模块的上述设计机制,为中间件模块PMT的快速获取和CA模块的快速启动提供了保障,并为中间件模块播放加密节目时对PMT的即时获取提供了条件,确保了加密节目PMT的即时性和准确性。
请参阅图4,图4所示的表格为PMT缓存模块元素信息构成列表。
本发明实施例将图4所示的表格的内容作为成员定义一个结构体,并采用该结构体申请一块内存,将此块内存作为中间件模块当前频点下获取PMT的缓存模块。其中,内存的大小根据中间件模块运行频点中所传送的节目和业务个数而定,内存的空间在中间件模块运行期间根据频点跳转情况进行动态分配,当中间件模块***退出时将其全部释放。
基于上述策略,请参阅图5,图5为本发明实施例PMT缓存模块的具体实施方法流程。
步骤S501、创建一消息队列,通过消息发送机制完成适配模块与PMT缓存模块的通信,转入步骤S502。
步骤S502、查询消息队列,当PMT缓存模块有启动消息到来时,则执行步骤S503,否则执行步骤S502。
步骤S503、锁定中间件模块运行的当前频点,创建PAT解复用通道,并将PAT的PID0X00设入解复用通道,启动解复用通道接收PAT,转入步骤S504。
步骤S504、分析PAT,从中得到当前频点下所传送的节目和业务总数TotalNum,采用标C函数sizeof计算出图4所示的表格中结构体暂用的内存空间大小M,然后以TotalNum×M作为空间大小分配一块内存作为当前频点下所有节目和业务的PMT缓存模块,转入步骤S505。
步骤S505、分析PAT,得到当前频点所在的TSID和传送的所有节目的ServiceID,以及每个ServiceID所对应的PMT的PID,并依次将其填充到缓存模块中的TSID、ServiceID以及PMTPID的成员中,转入步骤S506。
步骤S506、查询消息队列,当携带TSID和ServiceId的消息到来时,则执行步骤S509;当携带PMTPID的消息到来时,则执行步骤S5010;当携带PMT内容的消息到来时,则执行步骤S5011,否则执行步骤S5012。
步骤S507、分析PAT,得到PAT的版本号,检测是否发生变化,若是则将当前频点下PMT缓存模块中的所有成员全部置0,转入步骤S505;否则,转入步骤S508。
步骤S508、检测中间件模块所运行的频点是否发生跳转,若是,则执行步骤S503,否则执行步骤S506。
步骤S509、将消息中的TSID和ServiceId作为匹配目标查询PMT缓存模块,当与之对应的PmtBuffer内容为空时,则根据缓存模块中与之对应的PMT的PID,创建并设定PMT解复用通道,启动PMT的接收,并将得到的PMT存储到缓存模块中当前TsId和ServiceID所对应的PmtBuffer中;当PmtBuffer不为空时,不需要启动PMT接收过程,转入步骤S506。
步骤S510、将消息中的PMTPID作为匹配目标查询PMT缓存模块,当与之对应的PmtBuffer内容为空时,则根据缓存模块中与之对应的PMT表的PID,创建并设定PMT解复用通道,启动PMT表的接收,并将得到的PMT表存储到缓存模块中当前PMTPID所对应的PmtBuffer中;当PmtBuffer不为空时,不需要启动PMT接收过程,转入步骤S506。
步骤S511、分析通过消息传递过来的PMT内容,从中得到ServiceID,以ServiceID作为匹配目标查询PMT缓存模块,找到与之对应的存储PMT的位置PmtBuffer,并将PMT填充到该位置,转入步骤S506。
步骤S512、按照节目的PMT在PAT中所描述的先后顺序依次查询缓存模块中下一个ServiceID所对应的PmtBuffer,当PmtBuffer为空时,则根据与其对应的ServiceID所对应的PMT PID,创建并设定PMT解复用通道,设置超时为2秒,启动PMT的接收。若接收成功,则将得到的PMT存储到缓存模块中与之对应的PmtBuffer中,并转入步骤S506,若接收失败,则直接转入步骤S506;当PmtBuffer不为空时,不需要启动PMT接收过程,直接转入步骤S506。
当中间件模块通过音、视频播放接口函数传递过来的参数类型为(b)时,本发明将采用参数中的AudioPid、VideoPid、AudioEcmPid、VideoEcmPid的信息通过直接构造的方法形成一个PMT,提供给盒端CA模块,这样便可以节省从传送流中接收PMT的时间消耗,从而以最快的速度为中间件模块启动盒端CA解扰模块。通过分析PMT,我们知道,标准的PMT由12个字节的表头、若干个基本流描述子和CA描述子共同构成。其中表头的第一个字节为PMT约定的TableID号0x02,第二个字节的低四位和第三个字节为PMT的长度,从第13个字节开始存放基本流描述子和CA描述子的内容,最后4个字节为CRC校验值。基本流描述子包括了每个节目的类型、音频PID、视频PID以及该描述子的长度,CA描述子包括了PMT约定的加密标识0x09、CA厂商ID、加密节目的ECM PID以及CA描述子的长度。
请参阅图6,图6为音、视频节目PMT的构造方法的流程。
步骤S601、声明一个类型为unsigned char、长度为1024的数组uPmtBuf并初始化为0x00,用于存放构造的PMT内容,声明一个类型为unsigned char*的指针pPmtBuf,同时指向uPmtBuf,声明一个类型为unsigned short的变量nByteCnt,并赋初值为0,转入步骤S602。
步骤S602、将uPmtBuf的第一个字节填充为0x02(标准PMT约定的TableID),并将指针pPmtBuf偏移12个字节,将nByteCnt增加12,转入步骤S603。
步骤S603、将0x02(标准PMT约定的视频节目类型)赋值给pPmtBuf[0],将中间件模块传递过来的双字节视频PID的高8位取出来赋值给pPmtBuf[1],将双字节视频PID的低8位取出来赋值给pPmtBuf[2],将视频节目的CA描述子的长度0x06赋值给pPmtBuf[4],将指针pPmtBuf偏移5个字节,将nByteCnt增加5,转入步骤S604。
步骤S604、将0x09(标准PMT约定的CA描述子的标识)赋值给pPmtBuf[0],将视频ECM信息描述子的长度0x04赋值给pPmtBuf[1],根据机顶盒使用的CA种类,得到双字节CA厂商ID值,将CA厂商ID的高8位取出来赋值给pPmtBuf[2],将CA厂商ID的低8位取出来赋值给pPmtBuf[3],将中间件模块传递过来的双字节视频VideoEcmPid的高8位取出来赋值给pPmtBuf[4],将VideoEcmPid的低8位取出来赋值给pPmtBuf[5],将指针pPmtBuf偏移6个字节,将nByteCnt增加6,转入步骤S605。
步骤S605、将0x04(标准PMT约定的音频节目类型)赋值给pPmtBuf[0],将中间件模块传递过来的双字节音频PID的高8位取出来赋值给pPmtBuf[1],将双字节音频PID的低8位取出来赋值给pPmtBuf[2],将音频节目的CA描述子的长度0x06赋值给pPmtBuf[4],将指针pPmtBuf偏移5个字节,将nByteCnt增加5,转入步骤S606。
步骤S606、将0x09(标准PMT约定的CA描述子的标识)赋值给pPmtBuf[0],将音频ECM信息描述子的长度0x04赋值给pPmtBuf[1],根据机顶盒使用的CA种类,得到双字节CA厂商ID值,将CA厂商ID的高8位取出来赋值给pPmtBuf[2],将CA厂商ID的低8位取出来赋值给pPmtBuf[3],将中间件模块传递过来的双字节音频AudioEcmPid的高8位取出来赋值给pPmtBuf[4],将AudioEcmPid的低8位取出来赋值给pPmtBuf[5],将指针pPmtBuf偏移6个字节,将nByteCnt增加6,转入步骤S607。
步骤S607、将nByteCnt增加4(PMT末尾CRC校验位的字节个数),减少3(PMT表头的前三个字节),由此计算得到PMT的长度,将nByteCnt的高8位取出赋值给uPmtBuf[1],将nByteCnt的低8位取出赋值给uPmtBuf[2]。
本发明实施例通过在中间件模块与CA模块之间设置适配模块和节目映射表缓存模块,所述适配模块获取所述中间件模块发送的参数的类型,根据所述参数的类型在所述缓存模块中组成完整的节目映射表发送给CA模块,由所述CA模块进行解扰,极大的降低了机顶盒CA模块与中间件模块的耦合性,减少了开发人员维护CA模块的工作量,提高了各类中间件移植工作的效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。