一种视频播放方法、装置、设备及存储介质与流程

文档序号:18940662发布日期:2019-10-23 01:07阅读:195来源:国知局
一种视频播放方法、装置、设备及存储介质与流程

本申请涉及视频处理技术领域,尤其涉及一种视频播放方法、装置、设备及存储介质。



背景技术:

视频解码是对已编码的数字视频进行还原解码操作的过程,在对视频数据进行播放时,需要通过视频解码器对待播放的视频数据进行解码,当解码成功时,才可以播放待播放视频数据。视频解码可分为硬解码和软解码,软解码是指使用cpu进行解码的操作过程,硬解码是指使用非cpu进行解码的操作过程。

在使用硬解码进行视频解码时,由于各种原因可能会出现硬解失败的情况,从而导致视频画面卡住不动而声音继续播放的现象,在此情况下如果不处理解码失败错误而继续解码会导致后续解码失败。



技术实现要素:

本申请所要解决的技术问题在于,提供一种视频播放方法、装置、设备及存储介质,能够通过将正在解码的图像帧放入缓存队列中,当解码器对当前的图像帧解码失败时,重启解码器并从缓存队列中拿出图像帧进行重新解码,以实现对解码失败的视频的继续播放。

为了解决上述技术问题,一方面,本申请提供了一种视频播放方法,所述方法包括:

响应于视频播放指令,获取待播放资源,将所述待播放资源存入第一缓存队列;所述待播放资源包括若干图像组以及相应的音频数据,每个图像组包括若干图像帧;

从所述第一缓存队列中确定当前读取的图像帧为目标图像帧;

将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码;

当对所述目标图像帧解码失败时,将所述第二缓存队列中的各图像帧插入到所述第一缓存队列的头部;确定所述目标图像帧所在的图像组为目标图像组,获取与所述目标图像组对应的目标音频数据;以所述第一缓存队列的头部的图像帧作为所述目标图像帧,重复执行步骤:将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码,直至对所述目标图像帧解码成功;显示解码成功后的图像以及播放所述目标音频数据。

另一方面,本申请提供了一种视频播放装置,所述装置包括:

播放指令响应模块,用于响应于视频播放指令,获取待播放资源,将所述待播放资源存入第一缓存队列;所述待播放资源包括若干图像组以及相应的音频数据,每个图像组包括若干图像帧;

目标图像帧确定模块,用于从所述第一缓存队列中确定当前读取的图像帧为目标图像帧;

缓存解码模块,用于将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码;

循环执行模块,用于当对所述目标图像帧解码失败时,将所述第二缓存队列中的各图像帧插入到所述第一缓存队列的头部;确定所述目标图像帧所在的图像组为目标图像组,获取与所述目标图像组对应的目标音频数据;以所述第一缓存队列的头部的图像帧作为所述目标图像帧,重复执行步骤:将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码,直至对所述目标图像帧解码成功;显示解码成功后的图像以及播放所述目标音频数据。

另一方面,本申请还提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述的视频播放方法。

另一方面,本申请还提供了一种计算机存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如上述的视频播放方法。

本申请通过确定从第一缓存队列中读取的当前图像帧为目标图像帧,将目标图像帧存入第二缓存队列并对目标图像帧进行解码;当对目标图像帧解码失败时,将第二缓存队列中的各图像帧插入第一缓存队列的头部,获取与目标图像帧所在的图像组对应的目标音频数据;以第一缓存队列头部的图像帧为目标图像帧,重复执行缓存和解码步骤,直至对目标图像帧解码成功;并显示解码成功后的图像以及播放所述目标音频数据。本发明避免了在视频播放过程中由于解码失败导致的画面和声音不同步的现象,加快了画面的显示速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。

图1是本申请实施例提供的应用场景示意图;

图2是本申请实施例提供的一种视频播放方法流程图;

图3是本申请实施例提供的一种图像帧读取方法流程图;

图4是本申请实施例提供的一种目标图像帧缓存方法流程图;

图5是本申请实施例提供的一种音频数据获取方法流程图;

图6是本申请实施例提供的第一示例示意图;

图7是本申请实施例提供的第二示例示意图;

图8是本申请实施例提供的第三示例示意图;

图9是本申请实施例提供的一种视频播放装置示意图;

图10是本申请实施例提供的目标图像帧确定模块示意图;

图11是本申请实施例提供的缓存解码模块示意图;

图12是本申请实施例提供的循环执行模块示意图;

图13是本申请实施例提供的音频处理模块示意图;

图14是本申请实施例提供的一种设备结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本申请的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。而且,术语“第一”、“第二”等适用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。

请参见图1,其示出了本申请实施例提供的应用场景示意图,该场景包括:至少一个视频播放终端110和视频播放服务器120,所述视频播放终端110和所述视频播放服务器120可通过网络进行数据通信。具体地,所述视频播放终端110可接收视频播放服务器120发送的待播放资源,视频播放终端110可对待播放资源进行解码播放;或者视频播放服务器120对待播放资源进行解码,并将解码后的视频数据发送给视频播放终端110进行播放。

所述视频播放终端110可以基于浏览器/服务器模式(browser/server,b/s)或客户端/服务器模式(client/server,c/s)与视频播放服务器120进行通信。所述视频播放终端110可以包括:智能手机、平板电脑、笔记本电脑、数字助理、智能可穿戴设备、车载终端等类型的实体设备,也可以包括运行于实体设备中的软体,例如应用程序等。比如,所述终端可以运行视频播放器软体,带有视频播放功能的社交软体等。本申请实施例中视频播放终端110上运行的操作系统可以包括但不限于安卓系统、ios系统、linux、windows等。

所述视频播放服务器120与所述视频播放终端110可以通过有线或者无线建立通信连接,该视频播放服务器120可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群,其中服务器可以是云端服务器。

在视频播放过程中,由于某些原因可能会导致视频图像帧的解码失败,从而会出现视频播放画面卡住不动但声音仍然继续的音画不同步的现象。为此,本申请实施例提供了一种视频播放方法,其可应用于视频播放终端侧,也可应用于视频播放服务器侧,请参见图2,所述方法具体包括:

s210.响应于视频播放指令,获取待播放资源,将所述待播放资源存入第一缓存队列;所述待播放资源包括若干图像组以及相应的音频数据,每个图像组包括若干图像帧。

这里的视频播放指令可以是由用户通过点击选中相应的播放视频而触发生成的,该视频播放指令中可包括待播放视频的名称或者标识,根据名称或者标识,可以找到待播放资源。

需要说明的是,本实施例中的待播放资源可以是本地资源,也可以是网络资源。当待播放资源为本地资源时,可以理解为视频的离线播放,即待播放资源是提前从播放服务器下载并存储到本地的,或者是从别的途径拷贝存储到本地的,在对其进行播放时,只需要从本地获取该播放资源,而不需要通过网络从播放服务器获取;当待播放资源为网络资源时,可以理解为在线播放,即根据播放进度需要实时从播放服务器端获取待播放资源进行播放。

当待播放资源为本地资源时,本实施例中后续对待播放资源的操作可不涉及到视频播放服务器,即后续操作均可由视频播放终端来实现;当待播放资源为在线资源时,后续对待播放资源的操作既可由视频播放终端来实现,也可由视频播放服务器来实现。

待播放资源包括若干图像组(groupofpictures,gop)以及与其相应的音频数据,其中每个图像组gop包括若干图像帧,具体地,gop是一组连续的画面,由一张i帧和数张b/p帧组成,i帧是内部编码帧(也称为关键帧),p帧是前向预测帧(前向参考帧),b帧是双向内插帧(双向参考帧)。简单地讲,i帧是一个完整的画面,而p帧和b帧记录的是相对于i帧的变化,如果没有i帧,p帧和b帧就无法解码。i帧可以独立编解码,p帧需要前向参考前面已经编解码出的i帧或p帧图像来完成编解码,b帧需要前后向参考两张已经编解码完成的p帧图像才能完成编解码。根据h.264的编码特点,解码器解码必须从关键帧开始。

s220.从所述第一缓存队列中确定当前读取的图像帧为目标图像帧。

第一缓存队列中存储的是待播放资源的若干图像帧,要播放视频,就需要对第一缓存中的图像帧依次进行读取、解码,并在解码成功后,才能播放视频,具体地,请参见图3,其示出了一种图像帧读取方法,包括:

s310.每次从所述第一缓存队列的头部读取一个图像帧,并确定读取的所述图像帧为所述目标图像帧。

在实际播放过程中,图像帧是一帧一帧地被读取出来并送入到解码器进行解码的,所以对于读取每个图像帧的时候,将当前时刻读取的图像帧确定为目标图像帧。

s320.将已被读取的图像帧从所述第一缓存队列中删除。

对于已被读取出的图像帧需要将其从第一缓存队列中删除,以避免重复读取。

s230.将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码。

根据本实施例上述的关于图像组gop的解释可知,每个gop均包括一个关键帧,所述关键帧处于该gop的第一帧的位置,并且对每个gop进行解码时,必须从该gop的关键帧开始解码。

为了确保第二缓存队列中只包含一个关键帧,在将目标图像帧存入第二缓存队列的时候,需要对存入的目标图像帧进行判断,具体地,请参见图4,其示出了一种目标图像帧缓存方法,所述方法包括:

s410.判断所述目标图像帧是否为所述关键帧。

s420.当所述目标图像帧为所述关键帧时,清空所述第二缓存队列,将所述目标图像帧存入清空后的所述第二缓存队列。

s430.当所述目标图像帧不为所述关键帧时,将所述目标图像帧存到所述第二缓存队列的尾部。

需要说明的是,当目标图像帧不是关键帧时,此时第二缓存队列中必然包含与目标图像帧处于相同gop中的关键帧,将目标图像帧按顺序存入第二缓存队列的尾部。

对于各图像帧,重复上述判断过程从而将图像帧缓存到第二缓存队列中。

在将目标图像帧存入第二缓存队列的同时,对该目标图像帧进行解码,本实施例中,采用硬解码的方式对各图像帧进行依次解码。

s240.当对所述目标图像帧解码失败时,将所述第二缓存队列中的各图像帧插入到所述第一缓存队列的头部;确定所述目标图像帧所在的图像组为目标图像组,获取与所述目标图像组对应的目标音频数据;以所述第一缓存队列的头部的图像帧作为所述目标图像帧,重复执行步骤:将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码,直至对所述目标图像帧解码成功;显示解码成功后的图像以及播放所述目标音频数据。

当对目标图像帧解码成功时,按照正常的播放流程,显示解码成功后的图像以及播放与所述目标图像帧对应的音频数据。

当对目标图像帧解码失败时,图像播放失败,需要对解码失败的目标图像帧进行重新解码才能重新播放该目标图像帧,本实施例中,将第二缓存队列中的各图像帧重新插入到第一缓存队列中,进行重新读取、解码。

根据本实施例上述对第二缓存队列中的图像帧的分析,所述第二缓存队列中至少包括所述目标图像组中的关键帧,并且对每个gop进行解码时,是从该gop的关键帧进行解码,所以在将第二缓存队列中的图像帧插入到第一缓存队列中时,需要保证目标图像帧所在的gop的关键帧处于第一缓存队列的头部,这样进行重新解码时,第一个读取出的图像帧便是该关键帧;因此,具体的图像帧插入方法包括:

从所述第二缓存队列的尾部开始,依次将所述图像帧插入到所述第一缓存队列的头部,以使得插入操作完成时,所述目标图像组中的关键帧处于第一缓存队列的头部。

由于图像数据与音频数据是对应的,在对解码失败的图像帧进行重新解码以使得对该图像帧重新播放的同时,对其相应的音频数据也需要回调,具体地,请参见图5,其示出了一种音频数据获取方法,包括:

s510.当对所述目标图像帧解码失败时,记录所述目标图像组的关键帧对应的音频位置。

在某帧图像解码失败时,重新解码时从该帧图像所在的gop的关键帧开始解码并显示图像的,所以对应的音频数据也是与该gop的第一帧,即关键帧开始重新播放的,记录下关键帧对应的音频位置。

s520.获取从所述音频位置开始的所述目标音频数据。

确定了关键帧对应的音频位置之后,可从该音频位置开始获取目标音频数据进行播放。

当解码成功时,显示解码成功后的图像以及播放所述目标音频数据,本实施例中只要某帧图像解码失败,重新解码播放时均是从该帧图像所在的图像组开始时的图像和开始时的音频位置进行播放,便于画面与声音的同步,减少从中间帧开始播放可能导致的音画不同步的不确定性。

本实施例中,由于各种原因可能会导致图像帧的解码失败,当解码失败之后,需要重启解码器,触发解码配置初始化,这样可以使得解码器进行重新解码。

为了清楚地说明本申请的具体实施方式,下面以一具体示例进行说明。

在视频播放过程中,由于多种原因可能会导致图像帧的解码失败,本实施例中以ios的硬解码为例来进行说明,ios的硬解码器能够降低播放器的cpu消耗,减少发热和耗电量,ios系统中硬解码采用的是videotoolbox框架,但是在具体应用videotoolbox时,会受到很多限制,例如在将正在播放视频的播放器切换到后台时,会导致其中的context失效。context失效带来的问题是后面的解码过程都会失败,必须重新初始化context。当再次将视频播放器从后台切换到前台运行时,由于解码失败,视频画面会卡住不动但声音会继续。针对该问题,可通过以下方法来解决:

具体地,请参见图6,假设待播放资源中包括图像组1,图像组2,图像组3,……,图像组n,其中,图像组1包括图像帧1,图像帧2,图像帧3,……,图像帧10,分别将图像组1至图像组n存入第一缓存队列,并且与各图像组对应的音频数据也被存到第一缓存队列中。在没有开始解码前,第二缓存队列中是空队列。

当开始播放视频时,从第一缓存队列中的图像组1中每次读取出一帧图像,分别送入到硬解码器以及第二缓存队列中;首先从第一缓存队列中读出图像组1中的图像帧1,并将图像帧1从第一缓存队列中删除,将读取的图像帧1存入到第二缓存队列中,以及将图像帧1送入到解码器,对图像帧1解码成功后,对解码成功后的图像进行渲染、显示并播放相应的音频数据;同样地,对于图像帧2,重复上述步骤后解码成功,经过图像渲染之后,显示图像并播放相应的音频数据。此时,第二缓存队列中缓存有两个已经解码成功并成功播放的图像帧1和图像帧2,其中,由于图像帧1是图像组1的第一帧,所以图像帧1位图像组1的关键帧;并且,图像帧1和图像帧2已从第一缓存队列中删除。

当从第一缓存队列中读取图像帧3进行解码时,此时由于后台切换操作,播放器被切换到后台运行,此时播放器停止播放;并且由于切后台操作,会导致解码器失效,即对图像帧3解码失败。请参见图7,当播放器被从后台切换到前台进行运行时,此时第二缓存队列中包括图像帧1、图像帧2和图像帧3,将第二缓存队列中的图像帧插入到第一缓存队列的头部,具体过程可以为:将图像帧3插入到图像帧4之前,将图像帧2插入到图像帧3之前,将图像帧1插入到图像帧2之前,这样保证了图像组1的关键帧图像帧1位于第一缓存队列的头部,重启硬解码,可以重新从图像帧1开始进行读取、缓存以及解码,每解码一帧便进行播放;相应地,获取对图像帧1对应的音频数据,当解码成功时,显示图像并播放相应的音频数据,恢复正常播放。这里播放的内容是从图像3所在的图像组1的第一帧图像内容进行播放,从图像显示上来讲,图像回退到了图像组1开始时的图像;从声音播放上来讲,声音回退到了图像组1开始时的音频位置。图像和声音均从图像组1开始时的位置进行播放,便于实现音画同步。通过记录关键帧对应的声音位置,在重启硬解码器时将声音回调,达到同步的效果。

由于第二缓存队列中的各图像帧被读出,为了节省存储资源,可将图像帧1、图像帧2以及图像帧3清除。依次对图像组1中的各帧图像进行解码,均解码成功,此时第二缓存队列中包括图像帧1至图像帧10;继续读取图像组2中的各图像帧,图像组2包括图像帧11,图像帧12,图像帧13,……,图像帧20,当读取出图像组2的图像帧11后,需要将其存入到第二缓存队列;由于图像帧11位图像组2的关键帧,而第二缓存队列中包含图像组1的关键帧,所以此时需要先清空第二缓存队列,保证第二缓存队列中的各图像帧属于同一个图像组;再将图像帧11缓存到第二缓存队列中,具体可参见图8。

重复上述步骤,便可实现对待播放资源的播放。

本申请实施例通过播放器内部缓存最近播放资源的图像帧以及相应的音频数据,当解码失败时,可将缓存的数据送入播放器进行重新播放,具体为:对缓存的图像帧进行重新解码,并结合音频数据进行重新播放;避免了将播放器从后台切换到前台时出现的音画不同步的现象,在解码成功时立刻显示图像,加快了画面显示速度。

本实施例还提供了一种视频播放装置,请参见图9,所述装置包括:

播放指令响应模块910,用于响应于视频播放指令,获取待播放资源,将所述待播放资源存入第一缓存队列;所述待播放资源包括若干图像组以及相应的音频数据,每个图像组包括若干图像帧。

目标图像帧确定模块920,用于从所述第一缓存队列中确定当前读取的图像帧为目标图像帧。

缓存解码模块930,用于将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码。

循环执行模块940,用于当对所述目标图像帧解码失败时,将所述第二缓存队列中的各图像帧插入到所述第一缓存队列的头部;确定所述目标图像帧所在的图像组为目标图像组,获取与所述目标图像组对应的目标音频数据;以所述第一缓存队列的头部的图像帧作为所述目标图像帧,重复执行步骤:将所述目标图像帧存入第二缓存队列,对所述目标图像帧进行解码,直至对所述目标图像帧解码成功;显示解码成功后的图像以及播放所述目标音频数据。

请参见图10,所述目标图像帧确定模块920包括:

读取模块1010,用于每次从所述第一缓存队列的头部读取一个图像帧,并确定读取的所述图像帧为所述目标图像帧。

删除模块1020,用于将已被读取的图像帧从所述第一缓存队列中删除。

请参见图11,所述缓存解码模块930包括:

第一判断模块1110,用于判断所述目标图像帧是否为所述关键帧。

队列清空模块1120,用于当所述目标图像帧为所述关键帧时,清空所述第二缓存队列,将所述目标图像帧存入清空后的所述第二缓存队列。

第二缓存模块1130,用于当所述目标图像帧不为所述关键帧时,将所述目标图像帧存到所述第二缓存队列的尾部。

其中,每个图像组均包括一个关键帧,所述关键帧处于所述图像组的第一帧的位置。

请参见图12,所述循环执行模块940包括:

图像帧插入模块1210,用于从所述第二缓存队列的尾部开始,依次将所述图像帧插入到所述第一缓存队列的头部,以使得插入操作完成时,所述目标图像组中的关键帧处于第一缓存队列的头部。

其中,所述第二缓存队列中至少包括所述目标图像组中的关键帧。

请参见图13,所述装置还包括音频处理模块1300,所述音频处理模块1300包括:

音频位置记录模块1310,用于当对所述目标图像帧解码失败时,记录所述目标图像组的关键帧对应的音频位置。

音频数据获取模块1320,用于获取从所述音频位置开始的所述目标音频数据。

所述视频播放装置还包括:

初始化模块,用于当对所述目标图像帧解码失败之后,触发解码配置初始化。

上述实施例中提供的装置可执行本申请任意实施例所提供方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的方法。

本申请通过确定从第一缓存队列中读取的当前图像帧为目标图像帧帧,将目标图像帧存入第二缓存队列并对目标图像帧进行解码;当对目标图像帧解码失败时,将第二缓存队列中的各图像帧插入第一缓存队列的头部,获取与目标图像帧所在的图像组对应的目标音频数据;以第一缓存队列头部的图像帧为目标图像帧,重复执行缓存和解码步骤,直至对目标图像帧解码成功;并显示解码成功后的图像以及播放所述目标音频数据。本发明避免了在视频播放过程中由于解码失败导致的画面和声音不同步的现象,加快了画面的显示速度。

本实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行本申请实施例上述的任一方法。

本实施例还提供了一种设备,其结构图请参见图14,该设备1400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)1422(例如,一个或一个以上处理器)和存储器1432,一个或一个以上存储应用程序1442或数据1444的存储介质1430(例如一个或一个以上海量存储设备)。其中,存储器1432和存储介质1430可以是短暂存储或持久存储。存储在存储介质1430的程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对设备中的一系列指令操作。更进一步地,中央处理器1422可以设置为与存储介质1430通信,在设备1400上执行存储介质1430中的一系列指令操作。设备1400还可以包括一个或一个以上电源1426,一个或一个以上有线或无线网络接口1450,一个或一个以上输入输出接口1458,和/或,一个或一个以上操作系统1441,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。本实施例上述的任一方法均可基于图14所示的设备进行实施。

本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤和顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或中断产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。

本实施例中所示出的结构,仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的设备的限定,具体的设备可以包括比示出的更多或更少的部件,或者组合某些部件,或者具有不同的部件的布置。应当理解到,本实施例中所揭露的方法、装置等,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分仅仅为一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元模块的间接耦合或通信连接。

基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域技术人员还可以进一步意识到,结合本说明书所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实现不应认为超出本申请的范围。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1