一种数字电视section数据的接收方法
阅读说明:本技术 一种数字电视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数据的接收方法。
背景技术
随着时代的发展,数字电视发展突飞猛进,从传统的有线机顶盒到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通知数据申请者获取数据。采用这种方式实现了在数据过滤时只需要设置一个过滤器,大大降低了硬件资源消耗;数据申请者只会得到期望的数据,优化其数据处理逻辑,减小开发难度;通过临时任务对数据进行有效缓冲,保障高密度数据来临时及时获取数据,不会造成数据遗漏。
- 上一篇:一种医用注射器针头装配设备
- 下一篇:一种智能设备视频广告处理方法以及智能设备