视频解码方法、视频解码装置、存储介质与电子设备与流程

文档序号:22260324发布日期:2020-09-18 14:27阅读:239来源:国知局
视频解码方法、视频解码装置、存储介质与电子设备与流程
本公开涉及计算机
技术领域
,尤其涉及一种视频解码方法、视频解码装置、计算机可读存储介质与电子设备。
背景技术
:视频文件一般是通过特定的编码方式对数字图像信息进行压缩所形成的数字文件,在播放视频文件时,播放工具需要将其解码,以还原出图像信息,从而进行播放。因此,视频播放的速度受到解码速度的制约。解码速度与视频播放工具本身的处理能力以及电子设备的硬件水平相关,目前,在大部分电子设备上,常用的视频播放工具所能提供的解码速度大于一般视频的正常播放速度(即1倍速播放)。然而,在视频预览、视频编辑、用户手动调整快进等场合中,经常需要对视频进行高速播放,例如以2倍速、4倍速甚至更高速度播放,如果播放速度超过了解码速度的上限,会导致视频播放中出现卡顿、丢帧等现象,影响用户的观看体验。需要说明的是,在上述
背景技术
部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。技术实现要素:本公开提供了一种视频解码方法、视频解码装置、计算机可读存储介质与电子设备,进而至少在一定程度上改善现有技术中高速播放视频时容易出现卡顿、丢帧的问题。本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。根据本公开的第一方面,提供一种视频解码方法,包括:基于第一速度对目标视频解码;获取位于当前解码帧之后的下一idr帧的位置;判断所述下一idr帧是否位于当前预期解码位置之前;其中,所述当前预期解码位置为:计算所述目标视频按照预设的第二速度解码到当前时间,所预期到达的解码位置;当所述下一idr帧位于所述当前预期解码位置之前时,进行查找解码。根据本公开的第二方面,提供一种用于视频播放的解码装置,包括:解码模块,用于基于第一速度对目标视频解码;获取模块,用于获取位于当前解码帧之后的下一idr帧的位置;判断模块,用于判断所述下一idr帧是否位于当前预期解码位置之前;其中,所述当前预期解码位置为:计算所述目标视频按照预设的第二速度解码到当前时间,所预期到达的解码位置;查找模块,用于当所述下一idr帧位于所述当前预期解码位置之前时,进行查找解码。根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的方法。根据本公开的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一项所述的方法。本公开的示例性实施例具有以下有益效果:在以低于期望播放速度的解码速度解码目标视频的情况下,通过查找解码的方式,使实际解码进度追上预期播放进度,在查找解码前判断是否满足查找的条件,即当前解码帧后的下一idr帧是否在当前预期解码位置之前,从而保证查找时不会回到当前解码帧以前,避免执行重复解码或重复解码检测的过程,减小系统开销,提高处理效率。进一步的,本示例性实施例可以保证每次查找时实际解码进度向预期播放进度的有效逼近,使得解码器可以连续解码一定的帧数,减少相关技术中频繁丢帧的情况,改善视频播放卡顿及丢帧的问题,提高用户观看的流畅性。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1示出视频帧解码的示意图;图2示出高倍速播放视频的示意图;图3示出相关技术中查找解码的示意图;图4示出本示例性实施例中一种视频解码方法的流程图;图5示出本示例性实施例中另一种视频解码方法的流程图;图6示出本示例性实施例中一种视频解码装置的结构框图;图7示出本示例性实施例中一种用于实现上述方法的计算机可读存储介质;图8示出本示例性实施例中一种用于实现上述方法的电子设备。具体实施方式现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在视频压缩中,主要有帧内编码与帧间编码两种技术。帧内编码表示对某一帧的信息在空间上进行压缩并独立编码;帧间编码表示对某一帧的信息在时间维度上进行压缩,编码时会参考前面或后面的帧。例如常用的h264编码就采用了这两种编码技术,h264编码中,视频帧包括i帧、p帧、b帧三种类型:i帧:帧内编码帧。可以认为是经过图像压缩后生成,能够独立解码,不需要依赖其他帧。p帧:前向预测编码帧。p帧是一种帧间编码帧,通过依赖前面视频帧在时间维度上压缩生成,可获得比i帧更高的压缩率,解码时也需要依赖前面的视频帧;例如,如图1所示的帧序列中,每个p帧的前向参考帧个数为1且和它相邻。可以理解的,p帧的参考帧也可以是多帧或和它不相邻。b帧:双向预测内插编码帧。b帧也是一种帧间编码帧,与p帧不同的是它需要同时依赖前面和后面的帧进行压缩,压缩率比p帧更高,解码时也需要把前后依赖的帧先解出来之后才能解它本身。其中,i帧还包括一种特殊的类型,即idr(instantaneousdecodingrefresh,即时解码刷新)帧。普通i帧可能需要借助位于其之前的其他帧来解码之后的p帧和b帧;而idr帧除了其本身能够独立解码外,其之后的所有帧在解码时都无需也不能引用idr帧之前的帧,也就是说,视频可以从idr帧开始重新解码,无需参照idr帧之前的帧。以4倍速播放视频为例,可以每4帧抽1帧出来显示,如图2所示,一段h264视频以4倍速进行预览,只有第1、5、9……帧被显示出来。但解码时并不能每隔4帧抽出1帧来解码,因为解码p帧、b帧等需要参考前面的帧,即使在第1帧之后只需要显示第5帧,也要把第2、3、4帧都解码出来,只是它们不被显示而已。因此,在高倍速播放时,解码器的工作量并没有减少,对于一个30帧/秒(即每帧33ms)的视频,要做到1倍速播放只需要满足解码每帧小于33ms即可,但是要做到4倍速播放,必须保证解码每帧在8.33ms以内,否则解码就无法跟上播放的速度。为了解决上述问题,相关技术通常采用以下3种方案:1、将视频以高倍速转码生成一个新视频。有些视频编辑工具会采用这种方案,好处是生成的新视频能够以1倍速比较顺畅的编辑和播放,但是需要等待转码的时间,视频越长,等待的时间越长,而且如果用户并不确定哪个倍速更合适,希望先尝试多个速度,则需要多次转码,因此不适用于大部分应用场景。2、当播放速度超过解码速度时,无视播放速度的要求,以极限的解码速度顺序解码并播放。例如用户希望4倍速播放视频,但是解码最快只能到3倍速,则就以3倍速播放视频,导致最终只有前3/4的视频被播放出来,对于较长的视频,结尾缺少的视频内容会较多,因此实用性较差。3、采用查找解码的方式。首先以解码速度解码并播放视频,解码速度慢于预期播放速度,因此视频播放的实际进度落后于预期播放进度;当落后到一定程度时,跳过落后的部分,查找至预期播放位置,从该位置继续解码并播放视频,并依次循环下去。查找时调用seekto()方法,当期望seek到某个p帧的位置上,并把这个位置传给解码器,前面提过,解码器只有seek到idr帧,才能从中途解码并保证把后面的帧都能解出来,所以解码器实际可seek到的位置是距离目标位置最近且在其之前的idr帧。seek到idr帧之后,解码器必须顺序解码直到目标位置并将其播放出来。上述3种方案中,方案3具有较高的实用性,但是其也存在一定的问题。如图3所示的查找过程,在由当前解码位置x查找到预期播放位置y时,位置y可能是任何类型的帧,如果是p帧或b帧(图中未示出b帧),其解码需要参考前面的帧,因此实际可查找的位置z是位于y之前距离y最近的idr帧。实际应用中,可能出现z位于x之前的情况,这样在解码查找时,实际跳回到了更早的位置,导致重复解码的发生,效率低下,也会造成视频播放的卡顿。下面通过一个实例来进一步具体说明上述问题:待播放的视频帧率为30帧/秒,每4秒存在一个idr帧,即idr帧分布在第1帧、121帧、241帧……预期以120帧/秒的速度播放,即正常播放速度的4倍速,而解码器解码一帧所需的时间为10毫秒,其极限为100帧/秒,即正常播放速度的3.33倍速。如果当前解码进度时间落后预期播放进度达到300毫秒(即9帧)时触发查找,则播放情况如表1所示:实际解码进度(帧)预期播放进度(帧)1-451-545455-707071-919192-118118119-153153154-162162163-174174175-190190191-211211212-238238239-273表1起初可以流畅播放,当解码到第45帧时,预期播放进度到达第54帧,此时落后9帧,触发查找,实际查找到第54帧前最近的idr帧,也就是第1帧;然而第1帧到45帧已经解码过了,解码器即使不用重复解码,也会执行一个重复解码检测的过程,产生了算力上的浪费;当解码到第54帧时,预期播放进度到达第70帧,落后16帧,再次触发查找,和第一次查找的情况一样,实际仍然是查找到第1帧,重复第一次查找的处理流程;当解码到第70帧时,又落后预期播放进度很多,如此往复,导致实际播放的现象是除了起初的一段流畅播放外,后面一直在卡顿和丢帧,用户的观看体验很差。鉴于上述各种问题,本公开的示例性实施例提供了一种视频解码方法,图4示出了该方法的流程,包括步骤s410~s440:步骤s410:基于第一速度对目标视频解码。其中,目标视频即待播放的视频,第一速度为实际解码速度。本示例性实施例中,目标视频的预期播放速度比实际解码速度快,在开始播放视频后,可以维护两个时间进度:实际解码进度和预期播放进度。目标视频实际的播放是与解码同步进行的,即实际播放进度等于实际解码进度。在一示例性实施例中,第一速度为系统能够达到的最快解码速度。步骤s420,获取位于当前解码帧之后的下一idr帧的位置。其中,当前时刻所解码的帧为当前解码帧,位于其之后的下一idr帧是指位于当前解码帧之后、且距离当前解码帧最近的idr帧。当前解码帧和下一idr帧可以通过目标视频中的时间戳或帧的序数来表示,例如:将当前解码帧和下一idr帧表示为目标视频中的具体时刻,或者将当前解码帧和下一idr帧表示为目标视频中的第m帧和第o帧,本公开对此不做限定。在一示例性实施例中,下一idr帧的位置可以由以下方法获取:根据目标视频的各idr帧的位置信息,确定位于当前解码帧之后的下一idr帧的位置。其中,目标视频的各idr帧的位置信息可以由目标视频所携带的编码信息文件中得到,也可以通过解析目标视频而得到,例如:当解码至目标视频的任一帧时,获取当前帧的类型;若当前帧为idr帧,则记录当前帧的时间戳,以当前帧的时间戳作为对应的idr帧的位置信息,从而得到目标视频的各idr帧的位置信息。上述解析并记录帧类型的过程可以在首次播放目标视频时执行,通常解码包括解析和解码两个过程,以h264编码的视频为例说明:首先从目标视频中解析出视频帧,转换为一帧帧的h264数据,再通过h264数据确定帧类型,为idr帧或p帧等;然后将h264数据传送到解码器,解码器解码出可显示的图像数据。通过这样的方式,可以将idr帧的位置信息提取出来,存储于缓存或指定文件中,以便于后续播放或解码时使用。在得到各idr帧的位置信息后,可以将各idr帧和当前解码帧标注在目标视频的时间轴上,则通过其相互之间的位置关系,可以直接确定出下一idr帧的位置。在一示例性实施例中,还可以通过以下方法确定下一idr帧的位置:根据上一idr帧的位置和两个idr帧的间隔获取位于当前解码帧之后的下一idr帧的位置。其中,上一idr帧指位于当前解码帧之前、且距离当前解码帧最近的idr帧。在很多视频压缩编码中,idr帧是均匀设置的,即任意两相邻idr帧之间的间隔相等。基于此,通过两个idr帧的间隔可以确定任意两个相邻idr帧之间的时间间隔,因此在上一idr帧的位置加上该时间间隔,即可以计算出下一idr帧的位置。这种方法适用于首次播放视频等情况,在未解析过目标视频的idr帧位置信息时,也可以计算出下一idr帧的位置。进一步的,上述两个idr帧的间隔可以通过以下方法获取:获取位于当前解码帧之前的至少两个idr帧的位置,根据至少两个idr帧的位置确定两个idr帧的间隔。即可以由当前解码帧之前已解码的两个或多个idr帧的位置,确定idr帧之间的间隔。其中,上述至少两个idr帧可以包括两个相邻的idr帧,则其时间戳相减可得到两个idr帧的间隔;或者已解码两个不相邻的idr帧,但知晓其中间间隔的idr帧数量,也能够计算出两个idr帧的间隔;或者解码了多个idr帧,以其中相距最近的两个idr帧的间隔作为上述两个idr帧的间隔,等等。需要补充的是,上述根据间隔时间计算下一idr帧的方法可视为一种预测的方法。对于idr帧间隔不均匀的情况,预测的下一idr帧位置可能不准确,即使如此,由于视频中不同idr帧之间的间隔差别不会太大,预测的偏差也不会太大,本示例性实施例仍然具有一定的适用性。步骤s430,判断下一idr帧是否位于当前预期解码位置之前。其中,当前预期解码位置为:计算目标视频按照预设的第二速度解码到当前时间,所预期到达的解码位置,该位置也可以用时间戳或帧的序数等形式表示。第二速度为期望的解码或播放速度,例如可以是目标视频正常播放速度的2倍速度、4倍速度、8倍速度或16倍速度等。第一速度小于第二速度,即实际解码速度小于期望解码速度,实际解码速度不能满足期望播放速度的需要。例如:期望以正常播放速度的4倍速播放目标视频,而解码器的解码速度最多只能达到3倍速,则第一速度为3倍速,第二速度为4倍速,在解码时,实际解码进度落后于预期解码进度。本示例性实施例中,对于下一idr帧和当前预期解码位置之间的前后关系,可以通过时间戳来判断,例如:在步骤s420中获取下一idr帧的时间戳,计算当前预期解码位置对应的时间戳,对比两个时间,判断下一idr帧的时间是否早于预期解码位置的时间;也可以通过帧数来判断,例如:在步骤s420中获取下一idr帧为目标视频的第o帧,计算当前预期解码位置对应第n帧,判断o是否小于n。步骤s440,当下一idr帧位于当前预期解码位置之前时,进行查找解码。其中,查找解码是指跳转到查找指定的位置,并在该位置的临近区域内确定一个解码起始帧(例如可以是idr帧),从解码起始帧继续向后解码。例如,查找解码可以采用解码器的seekto()方法,该方法的逻辑是:使解码器查找到()中的时间位置,例如seekto(2000),则查找到目标视频的2000ms位置,如果该位置对应的帧不是idr帧,则解码器查找该位置之前最近的idr帧,实际查找到该idr帧,从该idr帧开始继续解码。具体地,在查找解码时,可以查找到下一idr帧进行解码,也可以查找到当前预期解码位置的前一idr帧进行解码;其中,当前预期解码位置的前一idr帧是指位于当前预期解码位置之前、且距离当前预期解码位置最近的idr帧。本示例性实施例中,目标视频由p帧、b帧和i帧组成,i帧包括普通i帧和idr帧。当然i帧并不是必需的,p帧和b帧中也可以只有一种。idr帧通常是间隔性设置的,可以是每间隔一定时间或帧数设置一个idr帧,也可以根据目标视频内容分段,每段的开始设置一个idr帧,本公开对此不做限定。两个相邻的idr帧之间的帧类型包括p帧、b帧和普通i帧中的至少一种。当查找到下一idr帧或当前预期解码位置的前一idr帧时,丢弃位于该idr帧之前的未解码帧,并清空之前的解码参照信息,从该idr帧开始重新解码,对后续的p帧、b帧解码,如果遇到i帧,可以独立解码,从而保证后续的帧都能够正常解码。在一示例性实施例中,当下一idr帧位于当前预期解码位置之后时,即不满足上述查找条件,此时当前解码帧和当前预期解码位置之间不存在idr帧,若执行查找,则必然回到当前解码帧之前,因此可以不进行查找,由当前解码帧继续解码。需要补充的是,如果下一idr帧恰好位于当前预期解码位置,可以将这种情况视为下一idr帧位于当前预期解码位置之前的特殊情况,执行步骤s440,也可以视为下一idr帧位于当前预期解码位置之后的特殊情况,不进行查找而继续解码,本公开对此不做限定。需要特别说明的是,本示例性实施例可以对目标视频逐帧解码并逐帧播放,解码一帧播放一帧,在此情况下,当前解码帧为当前待显示帧,每次解码当前解码帧后,显示当前解码帧。此外,在目标视频高倍速播放等情况下,也可以采取类似图2的抽帧播放的方式,例如每解码4帧播放一帧,则当前解码帧与当前待显示帧可以不同,例如图2中,如果当前解码到第3帧,当前待显示帧是第5帧,当前解码到第6帧,当前待显示帧是第9帧;基于此,步骤s420中也可以获取当前待显示帧之后的下一idr帧的位置,并以此进行步骤s430的判断,确定是否执行步骤s440的查找解码;如果满足步骤s430的条件,则从当前解码帧解码到当前待显示帧,并显示当前待显示帧后,再从当前待显示帧进行查找解码,这样可以避免未显示当前待显示帧即进行查找的情况,进一步提高视频解码与播放的效率。基于上述说明,本示例性实施例在以低于期望播放速度的解码速度解码目标视频的情况下,通过查找解码的方式,使实际解码进度追上预期播放进度,在查找解码前判断是否满足查找的条件,即当前解码帧后的下一idr帧是否在当前预期解码位置之前,从而保证查找时不会回到当前解码帧以前,避免执行重复解码或重复解码检测的过程,减小系统开销,提高处理效率。进一步的,本示例性实施例可以保证每次查找时实际解码进度向预期播放进度的有效逼近,使得解码器可以连续解码一定的帧数,减少相关技术中频繁丢帧的情况,改善视频播放卡顿及丢帧的问题,提高用户观看的流畅性。为了进一步提高每次查找时追赶预期进度的效率,使预期查找位置(即当前预期解码位置)与实际查找位置(下一idr帧,或当前预期解码位置的前一idr帧)差别尽可能的小。在一示例性实施例中,在目标视频开始播放后,由于当前解码帧和当前预期解码位置实时向后移动,步骤s420和s430可以实时执行,即可以每解码一帧,监测当前解码帧的下一idr帧位置,同时检测或计算当前预期解码位置,并判断下一idr帧与当前预期解码位置之间的位置关系,也可以以较短的时间间隔,周期性地执行上述过程,以达到实时的效果。相应的,在步骤s440中,可以响应于当前预期解码位置到达或超过下一idr帧的位置,立即执行查找解码。换而言之,一旦检测到满足当前预期解码位置到达或超过下一idr帧的位置的条件,此时当前预期解码位置等于下一idr帧的位置,或刚刚超出下一idr帧的位置,则可以进行查找解码。通常上述实时检测并判断查找条件的方案,能够在每次查找时都非常接近预期查找位置,可以连续解码较长的时间再进行下一次查找,使得用户能够观看到一段时间较长的视频连续画面,进一步改善播放卡顿及丢帧的问题。根据上述获取下一idr帧位置的实施方式可知,如果下一idr帧的位置根据目标视频中各idr帧的位置信息确定,下一idr帧的位置为真实位置;如果下一idr帧的位置根据上一idr帧的位置和两个idr帧的间隔确定,下一idr帧的位置为预测位置。如上所述,在步骤s420和s430实时进行的情况下,下一idr帧和当前预期解码位置的前一idr帧的关系及查找解码过程如下:若获得的下一idr帧的位置为准确位置,下一idr帧为当前预期解码位置的前一idr帧,可以直接查找到下一idr帧进行解码;若获得的下一idr帧的位置为预测位置,该预测位置和准确位置相匹配时(例如能够确定目标视频的idr帧为均匀设置的情况),下一idr帧为当前预期解码位置的前一idr帧,可以直接查找到下一idr帧进行解码;若获得的下一idr帧的位置为预测位置,预测位置和准确位置不匹配或无法确定匹配时(例如不确定目标视频的idr帧是否为均匀设置的情况),下一idr帧可能不是当前预期解码位置的前一idr帧,可以查找到当前预期解码位置的前一idr帧进行解码。可以理解的,步骤s420和s430可以是非实时进行的,则当前解码帧和当前预期解码位置之间可能存在超过一个idr帧的情况,这样在查找时,可以实际查找到当前预期解码位置的前一idr帧,其距离当前预期解码位置最近,有利于赶上预期播放进度。在一示例性实施例中,在步骤s440后,还可以执行以下步骤:当判断当前解码帧到达或超过上述当前预期解码位置时,继续获取位于当前解码帧之后的下一idr帧的位置。在该步骤中,有以下几点需要说明:1、每次查找时,期望查找到当前预期解码位置n,实际查找到n之前的idr帧位置o,由o顺序向后解码,在由o解码到n的过程中,可以不再任何执行查找的过程;直到当前解码帧到达或超过位置n,再启动上述步骤s420~s440。2、在播放目标视频的过程中,查找步骤s420~s440是依次循环执行的,即完成一次查找后,由实际查找位置o顺序解码到当前预期解码位置n,在此后的解码过程中,如果满足查找的条件,则再次进行查找解码,从而无论目标视频的长度如何,都可以通过本示例性实施例进行完整的解码与播放处理。3、当前预期解码位置n代表预期播放的进度,实际查找到位置o,由o到n这一段的视频帧,可以不播放,使得每次查找后快速追赶预期播放进度,以尽可能满足预期播放的逻辑;也可以播放,使得播放的视频内容更加完整。因此,上述步骤的执行能够在解码进度落后播放进度较多时,进一步增加每次查找的有效性,提高视频播放的流畅性。查找的目的是使实际解码进度赶上预期播放进度,当两个进度差别较大时,查找的作用更明显。基于此,图5示出了视频解码方法的另一种示例性流程,在图4方法步骤的基础上,在目标视频开始播放时,对其逐帧解码并播放,此外还可以包括以下步骤:步骤s411,监测当前解码帧落后于当前预期解码位置的差值;步骤s412,判断上述差值是否大于预设阈值;步骤s413,如果上述差值大于预设阈值,则执行步骤s420及其后续步骤。步骤s414,如果上述差值小于预设阈值,则执行步骤s450,由当前解码帧继续解码。其中,上述差值可以通过以下几种示例性方式计算,但下述方式不应对本公开的保护范围造成限定:(1)当前解码帧为第m帧,当前预期解码位置为第n帧,目标视频的帧率为r,帧率的单位为fps(framespersecond,即帧/秒),则当前解码帧落后于当前预期解码位置的差值t=(n-m)/r;(2)直接获取当前解码帧和当前预期解码位置在目标视频中的时间戳,两者相减得到差值;(3)如果第一速度为v1,期望解码速度为v2,单位都是fps,目标视频的帧率为r,当前发生过k次查找,每次查找跳过的帧数分别为h1、h2、…、hk,已播放时间(从开始播放到当前时间)ts,则差值t=[(v2-v1)·ts-(h1+h2+…+hk)]/r。预设阈值作为判断解码进度与预期播放进度的差别是否较大的标准,可以根据目标视频的长度、帧率、第一速度和第二速度的差值以及具体的应用需求等确定,本公开对此不做限定。在一示例性实施例中,根据经验,预设阈值可以是300ms;在一示例性实施例中,考虑到优化查找过程,使查找前后的画面跳跃不至于太大,预设阈值可以小于目标视频中相距最近的两个相邻idr帧之间的时间差,则每次查找时,当前解码帧和当前预期解码位置之间只有一个idr帧,不会出现有两个或两个以上idr帧的情况,因此查找时所跳过的帧数较少,并且不会跳过idr帧,从而进一步提高解码效率。应当理解,上述差值和预设阈值也可以表示为帧数的情况,即解码进度落后预期播放进度达到一定的帧数标准时,执行步骤s420及其后续步骤。其中,在确定帧数形式的差值和预设阈值时,所依据的原理和计算方法与上述示例性方式(1)~(3)类似,因而不再赘述。在图5中,执行步骤s410~s412后,后续相当于对能否进行查找解码实施双重判断,判断及执行结果包括以下几种情况:1、满足步骤s413和s430的条件,则执行步骤s413-s420-s430-s440,即进行查找解码;2、满足步骤s413的条件,但不满足步骤s430的条件,则执行步骤s413-s420-s430-s450,不进行查找解码;3、满足步骤s414的条件(即不满足步骤s413的条件),则执行步骤s414-s450,不进行查找解码。可见,只有同时满足双重判断条件时,才进行查找解码。需要补充的是,如果上述差值恰好等于预设阈值,在步骤s412~s414的判断中,可以将这种情况视为满足步骤s413条件的特殊情况,执行步骤s420,也可以视为满足步骤s414条件的特殊情况,执行步骤s450,本公开对此不做限定。在一示例性实施例中,在步骤s420中,下一idr帧的位置根据目标视频的各idr帧的位置信息确定,步骤s412中的预设阈值小于目标视频中相距最近的两个相邻idr帧之间的间隔。则满足上述查找条件时,当前解码帧和当前预期解码位置之间只存在一个idr帧,该idr帧即为步骤s420中确定的下一idr帧,且步骤s420所确定的位置是准确的;基于此,在查找时,可以直接查找到下一idr帧进行解码。从而无需由当前预期解码位置向前查找idr帧,可以进一步提高效率。采用图5的方法流程对表1中的视频进行播放,其播放情况可以如表2所示,从第1个idr帧(也就是第1帧)开始播放,在预期播放进度到达下一idr帧之前一直连续播放,到达下一idr帧也就是121帧时,解码进度落后于预期播放进度20帧,超过了300ms的阈值,查找至第121帧的位置继续解码。从而使得每段idr之间的视频都能被连续解码播放,流畅度大大提高。实际解码进度(帧)预期播放进度(帧)1-1001-120121-220121-240表2比较表1和表2的播放情况可知,采用相关技术的方案,视频前8秒实际只播放了55帧,而本示例性实施例播放了200帧,其效率是相关技术的3.6倍。本公开的示例性实施例还提供一种视频解码装置,如图6所示,该装置600可以包括:解码模块610,用于基于第一速度对目标视频解码;获取模块620,用于获取位于当前解码帧之后的下一idr帧的位置;判断模块630,用于判断下一idr帧是否位于当前预期解码位置之前;其中,当前预期解码位置为:计算目标视频按照预设的第二速度解码到当前时间,所预期到达的解码位置;查找模块640,用于当下一idr帧位于当前预期解码位置之前时,进行查找解码。在一示例性实施例中,查找模块640在进行查找解码时,可以查找到下一idr帧进行解码。在一示例性实施例中,查找模块640在进行查找解码时,可以查找到当前预期解码位置的前一idr帧进行解码。在一示例性实施例中,视频解码装置600还可以包括:监测模块650,用于监测当前解码帧落后于当前预期解码位置的差值;获取模块620可以用于如果上述差值大于预设阈值,则获取位于当前解码帧之后的下一idr帧的位置。在一示例性实施例中,解码模块610还可以用于如果上述差值小于预设阈值,则由当前解码帧继续解码。在一示例性实施例中,如果下一idr帧的位置根据各idr帧的位置信息确定,且预设阈值小于目标视频中相距最近的两个相邻idr帧之间的间隔,则查找模块640在进行查找解码时,可以查找到下一idr帧进行解码。在一示例性实施例中,预设阈值可以是300ms。在一示例性实施例中,如果下一idr帧的位置根据目标视频中各idr帧的位置信息确定,查找模块640,可以用于响应于当前预期解码位置到达或超过下一idr帧的位置,查找到下一idr帧进行解码。在一示例性实施例中,如果下一idr帧的位置根据上一idr帧的位置和两个idr帧的间隔确定,查找模块640在进行查找解码时,可以查找到当前预期解码位置的前一idr帧进行解码。在一示例性实施例中,当查找模块640进行查找解码后,获取模块620可以用于当判断当前解码帧到达或超过当前预期解码位置时,继续获取位于当前解码帧之后的下一idr帧的位置。在一示例性实施例中,解码模块610还可以用于当下一idr帧位于当前预期解码位置之后时,由当前解码帧继续解码。在一示例性实施例中,视频解码装置600还可以包括:显示模块660,用于在解码模块610解码当前解码帧后,显示当前解码帧。在一示例性实施例中,视频解码装置600还可以包括:记录模块670,用于当解码模块610解码至目标视频的任一帧时,获取当前帧的类型,若当前帧为idr帧,则记录当前帧的时间戳,以当前帧的时间戳作为对应的idr帧的位置信息。在一示例性实施例中,获取模块620可以用于根据目标视频的各idr帧的位置信息,确定位于当前解码帧之后的下一idr帧的位置。在一示例性实施例中,获取模块620可以用于根据上一idr帧的位置和两个idr帧的间隔获取位于当前解码帧之后的下一idr帧的位置。在一示例性实施例中,获取模块620还可以用于获取位于当前解码帧之前的至少两个idr帧的位置,根据至少两个idr帧的位置确定两个idr帧的间隔。在一示例性实施例中,上述至少两个idr帧包括至少两个相邻的idr帧。在一示例性实施例中,目标视频中两个相邻的idr帧之间的帧类型包括p帧、b帧和普通i帧中的至少一种。在一示例性实施例中,第一速度为解码速度;第二速度包括:目标视频正常播放速度的2倍速度、4倍速度、8倍速度或16倍速度等。上述装置中未披露的方案细节内容可以参见方法部分的实施例内容,因而不再赘述。所属
技术领域
的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。本公开的示例性实施例还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。参考图7所示,描述了根据本公开的示例性实施例的用于实现上述方法的程序产品700,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。本公开的示例性实施例还提供了一种能够实现上述方法的电子设备。下面参照图7来描述根据本公开的这种示例性实施例的电子设备700。图7显示的电子设备700仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。如图8所示,电子设备800可以以通用计算设备的形式表现。电子设备800的组件可以包括但不限于:上述至少一个处理单元810、上述至少一个存储单元820、连接不同系统组件(包括存储单元820和处理单元810)的总线830和显示单元840。存储单元820存储有程序代码,程序代码可以被处理单元810执行,使得处理单元810执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元810可以执行图4或图5所示的方法步骤等。存储单元820可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)821和/或高速缓存存储单元822,还可以进一步包括只读存储单元(rom)823。存储单元820还可以包括具有一组(至少一个)程序模块825的程序/实用工具824,这样的程序模块825包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。总线830可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。电子设备800也可以与一个或多个外部设备900(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备800交互的设备通信,和/或与使得该电子设备800能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口850进行。并且,电子设备800还可以通过网络适配器860与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与电子设备800的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备800使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开示例性实施例的方法。此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施例,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本
技术领域
中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1