一种数字电视section数据的接收方法

文档序号:212857 发布日期:2021-11-05 浏览:14次 >En<

阅读说明:本技术 一种数字电视section数据的接收方法 (Method for receiving digital television section data ) 是由 周旭成 陈云 程志 安凤瑞 曾令刚 崔玉连 熊建勇 于 2021-08-02 设计创作,主要内容包括:本申请涉及数据处理技术领域,为了实现单个过滤器进行复杂的条件过滤,提供了一种数字电视section数据的接收方法,步骤A、创建数据过滤任务task:在数据申请者与dmux间设置数据过滤任务task;步骤B、定义过滤条件设置协议;步骤C、数据过滤任务task对过滤条件设置协议进行解析;步骤D、根据过滤条件进行数据过滤并存储;步骤E、数据读走通知。采用上述方式实现了单个过滤器进行复杂的条件过滤,降低了硬件资源消耗。(The application relates to the technical field of data processing, and provides a method for receiving digital television section data in order to realize complex condition filtering of a single filter, wherein the method comprises the following steps of A, creating a data filtering task: a data filtering task is set between the data applicant and the dmux; step B, defining a filtering condition setting protocol; step C, the data filtering task resolves the filtering condition setting protocol; d, filtering and storing data according to the filtering condition; and E, data reading notification. By adopting the mode, the complex condition filtering of the single filter is realized, and the hardware resource consumption is reduced.)

一种数字电视section数据的接收方法

技术领域

本发明涉及数据处理技术领域,具体是一种数字电视section数据的接收方法。

背景技术

随着时代的发展,数字电视发展突飞猛进,从传统的有线机顶盒到IPtv,从ecos系统到android系统,但无论其如何发展,其所遵循的数字电视协议从未变过,比如ISO13818协议等。机顶盒想要进行节目播放,必须按既定的编码协议将数字信号里的节目信息获取出来。而有的节目信息来的既快且多,如EPG、ECM等信息;当我们想要从非常多的数据里得到一部分我们想要的信息时,就会遇到难题:过滤器的设置问题;如果进行非常准确的过滤条件设置,我们可以精准的得到想要的信息,但就需要设置多个过滤器,加大了硬件资源的占用;如果放宽过滤条件,过滤效果不佳,数据获得者需要再次对数据进行鉴别,影响其工作效率;并且当section数据短时间内高密度的来临,可能会由于数据获取不及时而导致数据遗失。

现有数字电视机顶盒获取数据是由数据申请者向dmux通过设置过滤器,机顶盒硬件根据设置的过滤条件进行数据过滤,当有符合条件的数据到来时,dmux会向数据申请者发送消息,数据申请者根据消息从dmux读走数据,过滤条件由16个字节和其对应的mask组成。但是,现有的过滤器无法完成复杂条件的过滤,如当想让过滤器第一个字节不等于A,第二个字节在A~C之间,第三个字节某个bit必须为1,这样的过滤条件是无法对单个过滤器进行设置的,通常的做法是设置一个宽泛的过滤器,使其包含所有条件,然后由数据申请者在得到数据后,在后端再次进行数据判断。

发明内容

为了实现单个过滤器进行复杂的条件过滤,提供了一种数字电视section数据的接收方法。

本发明解决上述问题所采用的技术方案是:

一种数字电视section数据的接收方法,包括:

步骤A、创建数据过滤任务task:在数据申请者与dmux间设置数据过滤任务task;

步骤B、定义过滤条件设置协议;

步骤C、数据过滤任务task对过滤条件设置协议进行解析;

步骤D、根据过滤条件进行数据过滤并存储;

步骤E、数据读走通知。

进一步地,所述步骤B包括:

B1、定义判断模式:所述判断模式包括等于、不等于、大于等于、小于四种模式;

B2、定义过滤参数设置方法:所述过滤参数设置方法包括2字节的值,当判断模式为等于或不等于时:第一字节置0,第二字节为有效字节;当判断模式为大于等于或小于时:第一字节为开始值,第二字节为结束值;

B3、定义基本逻辑判断单元:所述基本逻辑判断单元为:判断模式+过滤参数;

B4、定义单个字节的多重过滤条件的设置方法:所述单个字节的多重过滤条件的设置方法为字节索引+模式个数+基本逻辑判断单元1+基本逻辑判断单元2+……+基本逻辑判断单元m,m为基本逻辑判断单元的个数;

B5、过滤条件设置协议具体为:字节设置个数+字节1的多重过滤条件+字节2的多重过滤条件+……+字节n的多重过滤条件,n等于字节设置个数。

进一步地,所述过滤条件设置协议还包括校验值,即所述过滤条件设置协议具体为:字节设置个数+字节1的多重过滤条件+字节2的多重过滤条件+……+字节n的多重过滤条件+校验值。

进一步地,所述步骤C包括:

C1、基本逻辑判断单元解析;

C2、单个字节的多重过滤条件解析;

C3、过滤条件设置协议解析。

进一步地,所述步骤D具体为:当dmux发送读取消息给数据过滤任务task后,数据过滤任务task立即从dmux读取数据,并将数据存储到自己的缓冲空间中;当缓冲空间已被用完而数据申请者还未将数据读走时,数据过滤任务task进入等待模式、覆盖模式或多缓冲空间模式。

进一步地,所述等待模式为:当缓冲空间满后不再去dmux读取数据,保持现有缓冲空间数据,任由dmux覆盖未被数据过滤任务task读走的数据;所述覆盖模式为:继续从dmux读取数据并且覆盖掉缓冲空间中最早得到的section数据;所述多缓冲空间模式为:保持现有缓冲空间数据,申请一块新的缓冲空间进行数据存储,如果再满则再次申请缓冲空间。

进一步地,数据过滤任务task的数据存储方法包括:

D1.1建立读信息结构体;

D1.2建立写信息结构体;

D1.3建立缓冲空间信息结构体;

D1.4建立缓冲区信息结构体;

D1.5数据判断并存储。

进一步地,所述步骤D1.5数据判断并存储具体为:数据过滤任务task从dmux读取到数据并根据过滤条件设置协议对数据内容进行判断,判定为有益数据则进行数据存储,当需要进行数据存储时:

a.为数据添加开始和结束标记;

b.写入数据。

进一步地,所述步骤E为立即通知或等数据申请者读走上一次的数据后再通知。

本发明相比于现有技术具有的有益效果是:通过重新定义过滤协议,使得在数据过滤时只需要设置一个过滤器,大大降低了硬件资源消耗;数据申请者只会得到期望的数据,优化其数据处理逻辑,减小开发难度;通过临时任务对数据进行有效缓冲,保障高密度数据来临时及时获取数据,不会造成数据遗漏。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

一种数字电视section数据的接收方法,包括:

步骤A、创建数据过滤任务task:在数据申请者与dmux间设置数据过滤任务task,数据申请者通过数据过滤任务task向dmux获取所需数据;

步骤B、定义过滤条件设置协议;

步骤C、数据过滤任务task对过滤条件设置协议进行解析;

步骤D、根据过滤条件进行数据过滤并存储;

步骤E、数据读走通知。

具体的,所述步骤B包括:

B1、定义判断模式:所述判断模式包括等于、不等于、大于等于、小于四种模式,在本实施例中将其分别表示为0xaa、0xbb、0xcc、0xdd。

B2、定义过滤参数设置方法:所述过滤参数设置方法包括2字节的值,当判断模式为等于或不等于时:第一字节置0,第二字节为有效字节;当判断模式为大于等于或小于时:第一字节为开始值,第二字节为结束值。

B3、定义基本逻辑判断单元:所述基本逻辑判断单元为:判断模式+过滤参数;例如:0xaa00ef表示过滤条件为:该过滤字节等于0xef,section数据内该字节的值等于0xef才是需要的section数据;0xcc05e0表示section数据对应字节从0x05~0xe0都是有效的section数据。

B4、定义单个字节的多重过滤条件的设置方法:所述单个字节的多重过滤条件的设置方法为字节索引+模式个数+基本逻辑判断单元1+基本逻辑判断单元2+……+基本逻辑判断单元m,m为基本逻辑判断单元的个数;字节索引表示section数据的16字节过滤条件索引,即0~15;例如:0x0203aa00efcc05e0bb00a0,表示过滤条件为:第二个过滤字节由三个判断条件组成:等于0xef,在0x05~0xe0之中,并且不等于0xa0。

B5、过滤条件设置协议具体为:字节设置个数+字节1的多重过滤条件+字节2的多重过滤条件+……+字节n的多重过滤条件,n等于字节设置个数。

进一步地,所述过滤条件设置协议还包括校验值,即所述过滤条件设置协议具体为:字节设置个数+字节1的多重过滤条件+字节2的多重过滤条件+……+字节n的多重过滤条件+校验值。在本申请中校验值采用crc校验值,crc校验值将字节个数到字节n的多重过滤条件的数据进行crc计算,用于校验过滤参数的准确性。

所述步骤C数据过滤任务task对过滤条件设置协议的解析包括:

C1、基本逻辑判断单元解析:根据B3的定义进行解析,每个逻辑判断单元具备四个unsigned short变量(该定义仅为示例):EqualValue、EqualMin、EqualMax、UnequalValue,将解析后的值赋给这四个变量,当变量未被使用时其默认值为无效值0xffff;例如:0xcc05e0,EqualValue=0xffff;UnequalValue=0xffff;EqualMin=0x05;EqualMax=0xe0。

C2、单个字节的多重过滤条件解析:根据B4的定义,定义单个字节的过滤信息结构体:包括字节索引、模式个数、模式信息链表或者模式信息数组;模式信息链表或模式信息数组由C1所述的四个变量组成。

C3、过滤条件协议解析:根据步骤B5的定义,定义完整过滤条件协议结构体:包括字节设置个数、单个字节的过滤信息结构体链表或数组;当定义中包含crc校验值时还应加上crc校验值。

所述步骤D具体为:当dmux发送读取消息给数据过滤任务task后,数据过滤任务task立即从dmux读取数据,并将数据存储到自己的缓冲空间buffer中;当缓冲空间buffer已被用完而数据申请者还未将数据读走时,数据过滤任务task进入等待模式、覆盖模式或多缓冲空间模式,所述等待模式为:当缓冲空间buffer满后不再去dmux读取数据,保持现有缓冲空间buffer中的数据,任由dmux覆盖未被数据过滤任务task读走的数据;所述覆盖模式为:继续从dmux读取数据并且覆盖掉缓冲空间buffer中最早得到的section数据;所述多缓冲空间模式为:保持现有缓冲空间buffer中的数据,申请一块新的缓冲空间buffer进行数据存储,如果再满则再次申请缓冲空间buffer。在本实施例中,数据过滤任务task使用的数据缓冲buffer采用循环buffer。

数据过滤任务task的数据存储方法包括:

D1.1建立读信息结构体:读保护信号量、读指针、可读数据长度、数据读走标识;

D1.2建立写信息结构体:写指针、可写buffer长度;

D1.3建立缓冲buffer信息结构体:读信息结构体、写信息结构体;

D1.4建立缓冲区信息结构体:缓冲区个数、当前缓冲区index、已满缓冲区个数、已满缓冲区index列表、缓冲buffer信息结构体1、缓冲buffer信息结构体2、......、缓冲buffer信息结构体x,x为缓冲buffer信息结构体的个数。

D1.5数据判断并存储:数据过滤任务task从dmux读取到数据并使用步骤C3建立的完整过滤条件协议结构体的内容进行判断,判定为有益数据则进行数据存储,当需要进行数据存储时:

a.首先再section数据的头和尾加上section开始和结束标记,当指针异常后能通过标记快速校正到正确的指针位置;

b.根据当前缓冲区index,使用对应的缓冲buffer信息结构进行读指针与写指针位置判断,根据判断结果将section数据写入写指针位置,完成后写指针往后移动相应长度,所述相应长度为section长度加上开始标记的长度及结束标记的长度。

具体的,当读写指针无交集,即写指针加上写入长度与读指针加可读长度无重合时,循环buffer指针的判定为常规方法,在此不再赘述。

当读写指针有交集,即写指针加上写入长度与读指针加可读长度有重合时:

等待模式:不存储数据,无下一步动作;

覆盖模式:计算重合长度,根据重合长度来确认需要覆盖多少个未读走的section数据;例如:重合长度为200字节,但是重合区域的section的长度为1000字节,那么可读指针的长度需要向后移动1000字节;如果重合区域的第一个section长度为100,第二个section长度为200,那么可读指针的长度需要向后移动300字节;

多缓冲空间模式:当一个buffer缓冲区满了之后,该缓冲区保持数据不变;task更新当前缓冲区index、并更新已满缓冲区个数、已满缓冲区index列表;在该模式下,当有多个缓冲区已满,数据申请者来读取数据时,则根据已满缓冲区index列表的顺序依次从对应的缓冲区读走数据;当已满缓冲区数据被完全读走后,task更新并更新已满缓冲区个数、已满缓冲区index列表,将已读走的缓冲区移除出已满缓冲区index列表。

数据存储还涉及到数据读取,在数据读取时的操作分为数据申请者读走数据及存储区内部调整,具体的:

数据申请者读走section数据:根据当前缓冲区index,数据申请者从对应的缓冲buffer信息结构体获取读保护信号量,然后读走数据,将数据读走标识设置为已读走,释放读保护信号量。

存储区内部调整:根据当前缓冲区指针,使用对应的缓冲buffer信息结构判断读信息结构体的数据读走标识,当数据被数据申请者读走后,此时数据读走标识为已读走,task获取读保护信号量,然后根据具体情况更新读指针、可读数据长度,将读指针移动至下一次读取数据的对应位置,并将数据读走标识设置为未读走,然后释放信号量。

所述步骤E为立即通知或等数据申请者读走上一次的数据后再通知。无论哪种模式,当task收到第一个section数据后都会立即通知数据申请者读数据,后续则根据对应方式进行通知发送。立即通知:task每得到一个有益section数据,则发消息通知数据申请者。等数据申请者读走上一次的数据后再通知:即D1.3 c步骤发生后,任务发送消息通知数据申请者读取数据。

本发明的简要流程是:将section数据的获取由申请者直接从dmux获取数据变更为:当数据申请者申请section数据时,将创建一个临时数据过滤任务task,task创建后首先根步骤B协议,解析过滤参数,生成判断条件队列;dmux的数据读取请求从发送给数据申请者变更为发送给task,task收到消息后从dmux读取section数据,并根据判断条件队列里的条件判断该section是否是有益数据,如果是则根据步骤D将数据存储起来,并按步骤E通知数据申请者获取数据。采用这种方式实现了在数据过滤时只需要设置一个过滤器,大大降低了硬件资源消耗;数据申请者只会得到期望的数据,优化其数据处理逻辑,减小开发难度;通过临时任务对数据进行有效缓冲,保障高密度数据来临时及时获取数据,不会造成数据遗漏。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种智能设备视频广告处理方法以及智能设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类