关键帧识别方法及装置与流程

文档序号:11235257阅读:1212来源:国知局
关键帧识别方法及装置与流程
本发明属于终端
技术领域
,尤其涉及一种关键帧识别方法及装置。
背景技术
:随着网络和终端技术的发展,各类网络游戏、单机游戏的开发发展迅速。游戏中的画面是由每个游戏实例的逻辑帧渲染而成,每一逻辑帧播放完以后需要查询下一个逻辑帧。游戏中普遍存在一个逻辑帧往往占用了多个逻辑帧的时间片的情况,如果被占用时间片内有关键帧,则播放关键帧,因此如何查找关键帧成为游戏画面显示的一个关键问题。现有技术中,通过穷举来查找关键帧,即枚举上一个播放的逻辑帧对应的时间到当前时间区间内所有的逻辑帧,判断每一个逻辑帧是否为关键帧,如果遇到关键帧,则播放关键帧,枚举结束,若未遇到关键帧,则播放当前时间对应的帧,此种技术的其线性的时间复杂度太高,往往不能满足游戏中“每秒几万帧”的读取需求,从而造成显示画面不流畅。技术实现要素:本发明提供一种关键帧识别方法及装置,用以通过构建逻辑帧结构体数组的方式查找关键帧,降低查找的时间复杂度,提高画面的流畅性。本发明提供的一种关键帧识别方法,包括:在每个逻辑帧播放结束后,确认所述播放结束的逻辑帧在已生成的逻辑帧的结构体数组中的第一位置,并根据所述第一位置确定下一个待播放的逻辑帧在所述结构体数组中的第二位置,所述结构体数组包括:按播放顺序排列的逻辑帧和在每个逻辑帧之前累计出现过的关键帧的数目;判断在所述结构体数组中,所述第一位置和所述第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同;若相同,则确认所述播放结束的逻辑帧与所述下一个待播放的逻辑帧之间无关键帧,并播放所述下一个待播放的逻辑帧;若不相同,则查找所述播放结束的逻辑帧与所述下一个待播放的逻辑帧之间的首个关键帧,并播放所述首个关键帧。本发明提供的一种关键帧识别装置,包括:第一确认模块,用于在每个逻辑帧播放结束后,确认所述播放结束的逻辑帧在已生成的逻辑帧的结构体数组中的第一位置,并根据所述第一位置确定下一个待播放的逻辑帧在所述结构体数组中的第二位置,所述结构体数组包括:按播放顺序排列的逻辑帧和在每个逻辑帧之前累计出现过的关键帧的数目;判断模块,用于判断在所述结构体数组中,所述第一位置和所述第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同;第二确认模块,用于若所述第一位置和所述第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目相同,则确认所述播放结束的逻辑帧与所述下一个待播放的逻辑帧之间无关键帧;播放模块,用于播放所述下一个待播放的逻辑帧;查找模块,用于若所述第一位置和所述第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目不相同,则查找所述播放结束的逻辑帧与所述下一个待播放的逻辑帧之间的首个关键帧;所述播放模块,还用于播放所述首个关键帧。从上述本发明实施例可知,本发明提供的关键帧识别方法及装置,在每个逻辑帧播放结束后,通过在已生成的结构体数组中确认该播放结束的逻辑帧的第一位置和下一个待播放的逻辑帧的第二位置,并判断第一位置和第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同,来判断该播放结束的逻辑帧与该下一个待播放的逻辑帧之间是否存在关键帧,若无,则播放该下一个待播放的逻辑帧,若有,则查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧,可简化判断、查找关键帧的过程,提高查找关键帧的速度,降低查找的时间复杂度,较大程度上加快了计算时间,提高画面播放的流畅度。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明第一实施例提供的关键帧识别方法的流程示意图;图2为本发明第二实施例提供的关键帧识别方法的流程示意图;图3为本发明第三实施例提供的关键帧识别装置的结构示意图;图4为本发明第四实施例提供的关键帧识别装置的结构示意图图5为本发明中执行关键帧识别方法的终端硬件结构图。具体实施方式为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。以下各本发明实施例的典型应用场景是在游戏运行时,在游戏画面的每个逻辑帧播放结束后,该逻辑帧可能会因播放时间长而占用其他逻辑帧的播放时长,因此需要判断在播放结束的逻辑帧和下一个待播放的逻辑帧之间是否存在关键帧,若无则直接播放该下一个待播放的逻辑帧,若有则查找并播放关键帧。具体技术方案的描述参见下述各实施例。请参见图1,图1为本发明第一实施例提供的关键帧识别方法的流程示意图,该关键帧识别方法可应用在终端中,该终端包括pc机(personalcomputer),手机、平板电脑、智能游戏机等。该方法包括:s101、在每个逻辑帧播放结束后,确认该播放结束的逻辑帧在已生成的逻辑帧的结构体数组中的第一位置,并根据该第一位置确定下一个待播放的逻辑帧在该结构体数组中的第二位置;该结构体数组包括:按播放顺序排列的逻辑帧(frameindex)和在每一逻辑帧之前累计出现过的关键帧的数目(numkeyframe)。具体地,若逻辑帧a、逻辑帧b、逻辑帧c、逻辑帧d、逻辑帧e按播放顺序,其中逻辑帧b连续播放2次,则该结构体数组的具体格式如表1:表1frameindexabbcdenumkeyframe011111该结构体数组每一列对应一个数组元素,每个数组元素对应二元组(frameindex,numkeyframe)。为了查找方便,为数组元素设置数组元素索引(arrayindex),表示逻辑帧的播放顺序以及逻辑帧的存储位置。arrayindex与该结构体数组中的frameindex和numkeyframe的对应关系如表2:表2arrayindex012345frameindexabbcdenumkeyframe011111下面详细描述该逻辑帧的结构体数组的结构,该结构体数组具体包括以下两部分:逻辑帧(frameindex),又称逻辑帧索引,各逻辑帧在结构体数组内按播放顺序排列,与数组元素索引arrayindex指示的位置相对应,即,逻辑帧a、逻辑帧b、逻辑帧c、逻辑帧d、逻辑帧e按播放顺序存储在该结构体数组中,其中逻辑帧b重复播放一次,使用与第一次播放不同的另一个数组元素存储,数组元素索引的值增加1。在每个逻辑帧之前累计出现过的关键帧的数目(numkeyframe),需要说明的是,当前逻辑帧若为关键帧,则当前逻辑帧对应的numkeyframe累计计数,即,将当前逻辑帧的numkeyframe的数目增加1。例如,表1中逻辑帧b为关键帧,之前无关键帧,则将逻辑帧b的numkeyframe记录由0修改为1。当逻辑帧b再次重复播放,不重复计数关键帧,因此该结构体数组中逻辑帧b之后播放的各逻辑帧的numkeyframe均记录为1。逻辑帧在结构体数组中的位置,是可以通过该逻辑帧自身保存的结构体数组的信息确定的,在各逻辑帧中存储有其自身在结构体数组中的位置,该信息是在该结构体数组生成的同时记录在各逻辑帧中的。例如,播放结束的逻辑帧为c,逻辑帧c中记录的其在表2的结构体数组中对应的arrayindex为3,则确定逻辑帧c的第一位置为3。本发明实施例中,该播放结束的逻辑帧为f,逻辑帧f在已生成的逻辑帧的结构体数组中的第一位置用数组元素索引arrayindex1表示,下一个待播放的逻辑帧为f’,逻辑帧f’在该结构体数组中的第二位置用数组元素索引arrayindex2表示。具体地,根据arrayindex1、逻辑帧f与逻辑帧f’之间的播放时差、各逻辑帧的切片时长,共同确定arrayindex2。s102、判断在该结构体数组中,该第一位置和该第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同;在该结构体数组中查找arrayindex1对应的numkeyframe,以及,查找arrayindex2对应的numkeyframe,判断arrayindex1对应的numkeyframe和arrayindex2对应的numkeyframe是否相同。例如,具体如表1所示,若该第一位置为1,则在结构体数组中对应的numkeyframe为1,若该第二位置为4,则在结构体数组中对应的numkeyframe为1,判断此两个numkeyframe是否相同。若相同,则执行步骤s103;若不相同,则执行步骤s104。s103、确认该播放结束的逻辑帧与该下一个待播放的逻辑帧之间无关键帧,并播放该下一个待播放的逻辑帧;若arrayindex1对应的numkeyframe与arrayindex2对应的numkeyframe相同,则确认逻辑帧f与逻辑帧f’之间无关键帧,可全部跳过,直接播放逻辑帧f’。s104、查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧。若arrayindex1对应的numkeyframe与arrayindex2对应的numkeyframe不相同,则可通过预置算法查找逻辑帧f与逻辑帧f’之间的首个关键帧,并播放该首个关键帧。在一个实例中,参见表2,在结构体数组中播放结束的逻辑帧为b,逻辑帧b是第一次播放,其对应的第一位置为1,对应的numkeyframe为1,下一个待播放的逻辑帧d的第二位置为4,对应的numkeyframe为1,此两个numkeyframe相同,因此,直接播放逻辑帧d。在另一个实例中,参见表2,在结构体数组中播放结束的逻辑帧为a,逻辑帧a对应的第一位置为0,对应的numkeyframe为0,下一个待播放的逻辑帧d的第二位置为4,对应的numkeyframe为1,此两个numkeyframe不同,因此,查找逻辑帧a和逻辑帧d之间的首个关键帧,即,第一个numkeyframe与逻辑帧a不同的逻辑帧,便是首个关键帧。表2中,第一个numkeyframe与逻辑帧a不同的逻辑帧是b,即,逻辑帧b即为查找到的关键帧,播放逻辑帧b。本发明实施例中,在每个逻辑帧播放结束后,通过在已生成的结构体数组中确认该播放结束的逻辑帧的第一位置和下一个待播放的逻辑帧的第二位置,并判断第一位置和第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同,来判断该播放结束的逻辑帧与该下一个待播放的逻辑帧之间是否存在关键帧,若无,则播放该下一个待播放的逻辑帧,若有,则查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧,可简化判断、查找关键帧的过程,提高查找关键帧的速度,降低查找的时间复杂度,较大程度上加快了计算时间,提高画面播放的流畅度。请参见图2,图2为本发明第二实施例提供的关键帧识别方法,可应用于终端中,该方法包括:s201、客户端启动加载初始网页时,按照播放时间顺序存储待播放的逻辑帧,并记录每个逻辑帧之前累计出现的关键帧数目,得到逻辑帧的结构体数组;该客户端可以是游戏类客户端,该客户端启动,游戏初始画面开始加载并渲染后显示在终端屏幕上。在客户端启动时载游戏画面,同时生成该游戏画面各逻辑帧的结构体数组。在该结构体数组中按照播放时间顺序存储待播放的逻辑帧,以及,记录每个逻辑帧之前累计出现的关键帧数目。具体地,该结构体数组包括:按播放顺序排列的逻辑帧和在每个逻辑帧之前累计出现过的关键帧的数目。该结构体数组每一列对应一个数组元素,每个数组元素对应二元组(frameindex,numkeyframe)。该结构体数组具体包括以下两部分:逻辑帧(frameindex),又称逻辑帧索引,各逻辑帧在表内按播放顺序排列,与数组元素索引相对应,即,逻辑帧a、逻辑帧b、逻辑帧c、逻辑帧d、逻辑帧e按播放顺序存储在该结构体数组中,其中逻辑帧b重复播放一次,使用与第一次播放不同的数组元素存储,数组元素索引值增加1;在每个逻辑帧之前累计出现过的关键帧的数目(numkeyframe),需要说明的是,当前逻辑帧若为关键帧,则执行累计计数,将当前逻辑帧的numkeyframe的数目增加1。为数组元素设置数组元素索引(arrayindex),表示逻辑帧的播放顺序以及逻辑帧的存储位置。逻辑帧的结构体数组的具体结构与前述第一实施例的表1相同,arrayindex与frameindex、numkeyframe之间的对应关系与前述第一实施例的表2相同。进一步地,若同一逻辑帧重复播放多次,则在该结构体数组中,按照该重复播放的逻辑帧的播放顺序,使用与逻辑帧播放次数相同数量的数组元素存储该重复播放的逻辑帧,即,一个逻辑帧播放多少次,便对应按照播放顺序使用多少个数组元素对重复播放的逻辑帧分别记录。例如,在表2中,逻辑帧b播放2次,便按照播放顺序,在arrayindex1和arrayindex2的两个位置2次存储逻辑帧b。s202、为各逻辑帧按照存储位置生成数组元素索引,并在每个逻辑帧中记录逻辑帧各自在该结构体数组中的位置;为存储的逻辑帧按照存储位置生成数组元素索引,可以迅速根据数组元素索引确定逻辑帧在该结构体数组中的位置,从而加快判断、查找关键帧的速度。同时,在每个逻辑帧中记录逻辑帧各自在结构体数组中的位置,通过查询各逻辑帧可以获知每个逻辑帧在该结构体数组中的存储位置。进一步提高确认逻辑帧在该结构体数组中位置的便捷性。s203、在每个逻辑帧播放结束后,确认该播放结束的逻辑帧在已生成的该结构体数组中的第一位置,并根据该第一位置确定该下一个待播放的逻辑帧在该结构体数组中的第二位置;本发明实施例中,该播放结束的逻辑帧为f,逻辑帧f在已生成的逻辑帧的结构体数组中的第一位置用数组元素索引arrayindex1表示,下一个待播放的逻辑帧为f’,逻辑帧f’在该结构体数组中的第二位置用数组元素索引arrayindex2表示。可通过查询逻辑帧f记录的信息,获知arrayindex1。例如,在表2中,播放结束的逻辑帧为e,逻辑帧e在结构体数组中对应的arrayindex是4,逻辑帧e在结构体数组生成的同时也记录自身在结构体数组中的位置,通过查询逻辑帧e的记录信息,可以确定逻辑帧e的位置为4。在每个逻辑帧播放结束后,arrayindex2可以是根据arrayindex1、逻辑帧f与逻辑帧f’之间的播放时差,以及,预设的各逻辑帧的时间切片长度共同确定。具体地,在逻辑帧f播放结束后,获取逻辑帧f的开始播放时间t1、逻辑帧f’的开始播放时间t2、每个逻辑帧的平均时间切片长度l,其中逻辑帧f’的开始播放时间t2即为逻辑帧f的结束播放时间。在时间区间[t1,t2]之间可能占用了多个逻辑帧的时间切片,根据逻辑帧的平均时长切片长度,计算逻辑帧f’在该结构体数组中的第二位置。令该第一位置为arrayindex1,令该第二位置为arrayindex2,则:arrayindex2=arrayindex1+(t2-t1)/ls204、判断在该结构体数组中,该第一位置和该第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同;在该结构体数组中查找arrayindex1对应的numkeyframe,以及,查找arrayindex2对应的numkeyframe,判断查找的arrayindex1对应的numkeyframe和arrayindex2对应的numkeyframe是否相同。若相同,则执行步骤s205;若不相同,则执行步骤s206。s205、确认该播放结束的逻辑帧与该下一个待播放的逻辑帧之间无关键帧,并播放该下一个待播放的逻辑帧;若arrayindex1对应的numkeyframe与arrayindex2对应的numkeyframe相同,则确认逻辑帧f与逻辑帧f’之间无关键帧,可全部跳过,直接播放逻辑帧f’。如果关键帧出现的概率是p,则通过对比在当前逻辑帧之前累计出现过的关键帧的数目,确认该播放结束的逻辑帧与该下一个待播放的逻辑帧之间无关键帧,可全部跳过,直接播放该下一个待播放的逻辑帧,可以降低时间复杂度,降低后的时间复杂度为非关键帧的概率(1-p)乘以查询时间o(1),即,o(1-p)。s206、查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧。若arrayindex1对应的numkeyframe与arrayindex2对应的numkeyframe不相同,则通过二分查找算法,查找逻辑帧f与逻辑帧f’之间的首个numkeyframe发生变化的位置。即查找arrayindex最小的数组元素对应的逻辑帧,并且满足该逻辑帧在该结构体数组中numkeyframe的值为(f.numkeyframe+1),其中,f.numkeyframe为在结构体数组中arrayindex1对应的位置记录的累计到逻辑帧f的关键帧的数目。其中,二分查找算法又称折半查找算法,适用于不经常变动而查找频繁的有序列表,该二分查找算法是在有重复元素的数组中,查找目标元素首次出现的位置,优点是比较次数少,查找速度快,平均性能好。具体地,在本实施例中,将该结构体数组两个位置arrayindex1和arrayindex2分别对应的numkeyframe值相比较,若相同,则说明arrayindex1和arrayindex2之间没有关键帧,直接播放arrayindex2处的逻辑帧即可;若不同,则说明arrayindex1和arrayindex2之间有关键帧,此时需要二分查找arrayindex1和arrayindex2之间首次出现关键帧的位置,即查找arrayindex1和arrayindex2之间numkeyframe的值首次为(f.numkeyframe+1)的逻辑帧。二分查找算法查找关键帧的过程是:首先取arrayindex1和arrayindex2的平均值mid,如果mid位置处的numberkeyframe值比(f.numkeyframe+1)小,则在[mid+1,arrayindex2]之间查找numkeyframe的值首次为(f.numkeyframe+1)的元素;如果mid位置处的numberkeyframe值比(f.numkeyframe+1)大或与(f.numkeyframe+1)相等,则在[arrayindex1,mid]之间查找numkeyframe的值首次为(f.numkeyframe+1)的逻辑帧,直到二分查找的左边界大于等于右边界,则停止查找。此时,左边界处的逻辑帧为第一个numkeyframe的值为(f.numkeyframe+1)的逻辑帧,所以该左边界处的逻辑帧为第一次出现的关键帧,将查找的该逻辑帧确定为该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该逻辑帧。如果关键帧出现的概率是p,那么通过通过二分查找算法,查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧,可以降低时间复杂度,降低后的时间复杂度为关键帧的概率p乘以查询时间o(logn),即o(p*logn)。本发明实施例中,在每个逻辑帧播放结束后,通过在已生成的结构体数组中确认该播放结束的逻辑帧的第一位置和下一个待播放的逻辑帧的第二位置,并判断第一位置和第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同,来判断该播放结束的逻辑帧与该下一个待播放的逻辑帧之间是否存在关键帧,若无,则播放该下一个待播放的逻辑帧,若有,则查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧,可简化判断、查找关键帧的过程,提高查找关键帧的速度,降低查找的时间复杂度,较大程度上加快了计算时间,提高画面播放的流畅度。请参见图3,图3为本发明第三实施例提供的关键帧识别装置,为了便于说明,仅示出了与本发明实施例相关的部分。该装置可内置于终端中,该装置包括:第一确认模块301、判断模块302、第二确认模块303、播放模块304和查找模块305。其中,第一确认模块301,用于在每个逻辑帧播放结束后,确认该播放结束的逻辑帧在已生成的逻辑帧的结构体数组中的第一位置,并根据该第一位置确定下一个待播放的逻辑帧在该结构体数组中的第二位置,该结构体数组包括:按播放顺序排列的逻辑帧和在每个逻辑帧之前累计出现过的关键帧的数目;该结构体数组可以包括:按播放顺序排列的逻辑帧和在每一逻辑帧之前累计出现过的关键帧的数目。逻辑帧(frameindex),又称逻辑帧索引,各逻辑帧在表内按播放顺序排列,与数组元素索引相对应。在每个逻辑帧之前累计出现过的关键帧的数目(numkeyframe),需要说明的是,当前逻辑帧若为关键帧,则累计计数,将当前逻辑帧的numkeyframe的数目增加1。为了查找方便,为数组元素设置数组元素索引(arrayindex),表示逻辑帧的播放顺序以及逻辑帧的存储位置。判断模块302,用于判断在该结构体数组中,该第一位置和该第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同。即判断该结构体数组中第一位置对应的numkeyframe和第二位置对应的numkeyframe是否相同。第二确认模块303,用于若该判断模块判断的结果是:该第一位置和该第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目相同,则确认该播放结束的逻辑帧与该下一个待播放的逻辑帧之间无关键帧。该播放结束的逻辑帧与该下一个待播放的逻辑帧之间若无关键帧,可全部跳过,直接播放该下一个待播放的逻辑帧。播放模块304,用于播放该下一个待播放的逻辑帧。查找模块305,用于若该判断模块判断的结果是:该第一位置和该第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目不相同,则查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧。播放模块304,还用于播放该首个关键帧。本发明实施例中的装置用于执行前述图1所述实施例的方法,未描述的技术细节与前述图1所示实施例相同,此处不再赘述。本发明实施例中,在每个逻辑帧播放结束后,通过在已生成的结构体数组中确认该播放结束的逻辑帧的第一位置和下一个待播放的逻辑帧的第二位置,并判断第一位置和第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同,来判断该播放结束的逻辑帧与该下一个待播放的逻辑帧之间是否关存在键帧,若无,则播放该下一个待播放的逻辑帧,若有,则查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧,可简化判断、查找关键帧的过程,提高查找关键帧的速度,降低查找的时间复杂度,较大程度上加快了计算时间,提高画面播放的流畅度。请参见图4,图4为本发明第四实施例提供的关键帧识别装置,为了便于说明,仅示出了与本发明实施例相关的部分。该装置可内置于终端中,本实施例所示的装置与图3所示的装置不同之处在于,该装置还一进步包括:生成模块406,用于在客户端启动加载初始画面时,按照播放时间顺序存储待播放的逻辑帧,并记录每个逻辑帧之前累计出现的关键帧数目,得到逻辑帧的该结构体数组。生成模块406,还用于为各逻辑帧按照存储位置生成数组元素索引。该客户端可以是游戏类客户端,该客户端启动,游戏初始画面开始加载并渲染后显示在终端屏幕上。在客户端启动时载游戏画面,同时生成该游戏画面各逻辑帧的结构体数组。在该结构体数组中按照播放时间顺序存储待播放的逻辑帧,以及记录每个逻辑帧之前累计出现的关键帧数目。同时,为存储的逻辑帧按照存储位置生成数组元素索引,可以迅速根据数组元素索引确定逻辑帧在该结构体数组中的位置,从而加快判断、查找关键帧的速度。该装置还可以进一步包括:记录模块407,用于在每个逻辑帧中记录逻辑帧各自在该结构体数组中的位置。通过查询各逻辑帧可以获知每个逻辑帧在该结构体数组中的存储位置。进一步提高确认逻辑帧在该结构体数组中位置的便捷性。进一步地,生成模块406,还用于若同一逻辑帧重复播放多次,则在该结构体数组中,按照该重复播放的逻辑帧的播放顺序,使用与逻辑帧播放次数相同数量的数组元素存储该重复播放的逻辑帧。即,一个逻辑帧播放多少次,便对应按照播放顺序使用多少个数组元素对重复播放的逻辑帧分别记录。例如,表2中,逻辑帧b播放2次,便按照播放顺序,在arrayindex1和arrayindex2的两个位置2次存储逻辑帧b。进一步地,查找模块305,具体用于通过二分查找算法,查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间,首个在当前逻辑帧之前累计出现过的关键帧的数目发生变化的位置。该装置还包括:确定模块408,用于将该位置的逻辑帧确定为该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧。该二分查找算法是在有重复元素的数组中,查找目标元素首次出现的位置。具体地,将该结构体数组两个位置arrayindex1和arrayindex2分别对应的numkeyframe值相比较,若不同,则说明arrayindex1和arrayindex2之间有关键帧,此时需要二分查找arrayindex1和arrayindex2之间首次出现关键帧的位置,即查找arrayindex1和arrayindex2之间numkeyframe的值首次为(f.numkeyframe+1)的元素。二分查找算法查找关键帧的过程是:首先取arrayindex1和arrayindex2的平均值mid,如果mid位置处的numberkeyframe值比(f.numkeyframe+1)小,则在[mid+1,arrayindex2]之间查找numkeyframe的值首次为(f.numkeyframe+1)的逻辑帧;如果mid位置处的numberkeyframe值比(f.numkeyframe+1)大或与(f.numkeyframe+1)相等,则在[arrayindex1,mid]之间查找numkeyframe的值首次为(f.numkeyframe+1)的逻辑帧,直到二分查找的左边界大于等于右边界,则停止查找,此时左边界处的逻辑帧为第一个numkeyframe的值为(f.numkeyframe+1)的逻辑帧,所以该左边界处的逻辑帧为第一次出现的关键帧,将查找的该逻辑帧确定为该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该逻辑帧。第一确认模块301,具体用于在每个逻辑帧播放结束后,获取该播放结束的逻辑帧的开始播放时间t1、以及该下一个待播放的逻辑帧的开始播放时间t2,以及,每个逻辑帧的平均时间切片长度l;令该第一位置为arrayindex1,令该第二位置为arrayindex2,则:arrayindex2=arrayindex1+(t2-t1)/l。本发明实施例中的未描述的技术细节,参见前述图1~图3所示各实施例相同,此处不再赘述。本发明实施例中,在每个逻辑帧播放结束后,通过在已生成的结构体数组中确认该播放结束的逻辑帧的第一位置和下一个待播放的逻辑帧的第二位置,并判断第一位置和第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同,来判断该播放结束的逻辑帧与该下一个待播放的逻辑帧之间是否关存在键帧,若无,则播放该下一个待播放的逻辑帧,若有,则查找该播放结束的逻辑帧与该下一个待播放的逻辑帧之间的首个关键帧,并播放该首个关键帧,可简化判断、查找关键帧的过程,提高查找关键帧的速度,降低查找的时间复杂度,较大程度上加快了计算时间,提高画面播放的流畅度。图5为本发明实施例提供的执行关键帧识别方法的终端结构示意图。本实施例中所描述的终端,包括:至少一个输入设备51;至少一个输出设备52;至少一个处理器53,例如中央处理器;以及,存储器54。上述输入设备51、输出设备52、处理器53和存储器54通过总线55连接。其中,输入设备51具体可为摄像头、触控面板、物理按键或者鼠标等等。输出设备52具体可为显示屏。存储器54可以是高速随机存取记忆体(ram,randomaccessmemory)存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。存储器54用于存储一组可执行程序代码,处理器53与存储器54耦合,上述输入设备51、输出设备52和处理器53用于通过存储器54中存储的可执行程序代码,执行如下操作:通过处理器53执行该代码,执行如前述图1~图2所示实施例中描述的关键帧识别方法。具体地,即在每个逻辑帧播放结束后,确认所述播放结束的逻辑帧在已生成的逻辑帧的结构体数组中的第一位置,并根据所述第一位置确定下一个待播放的逻辑帧在所述结构体数组中的第二位置,所述结构体数组包括:按播放顺序排列的逻辑帧和在每个逻辑帧之前累计出现过的关键帧的数目;判断在所述结构体数组中,所述第一位置和所述第二位置分别对应的在当前逻辑帧之前累计出现过的关键帧的数目是否相同;若相同,则确认所述播放结束的逻辑帧与所述下一个待播放的逻辑帧之间无关键帧,并播放所述下一个待播放的逻辑帧;若不相同,则查找所述播放结束的逻辑帧与所述下一个待播放的逻辑帧之间的首个关键帧,并播放所述首个关键帧。在本申请所提供的多个实施例中,应该理解到,所揭露的方法和装置,可以通过其它的方式实现。例如,以上所描述的装置的实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信链接可以是通过一些接口,装置或模块的间接耦合或通信链接,可以是电性,机械或其它的形式。所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。以上为对本发明所提供的关键帧识别方法和关键帧识别装置的描述,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1