一种视频处理方法、装置、终端和存储介质与流程

文档序号:17773490发布日期:2019-05-28 19:44阅读:265来源:国知局
一种视频处理方法、装置、终端和存储介质与流程

本发明涉及视频处理技术领域,特别是涉及一种视频处理方法、装置、终端和存储介质。



背景技术:

在过去的几年,智能手机的处理能力飞速上升,用户对短视频的需求越来越强烈。在众多视频特效中,视频倒放可以产生非常有趣的效果,如用手将飞盘扔出,倒放后看起来似乎手有种神奇的力量,可以将飞盘从远处吸过来。

苹果系统视频处理接口封装较好,实现视频倒放较容易,但安卓端由于接口封装不完善,并且各厂商研发实力不均匀,导致安卓端实现倒放时,普遍速度较慢。

现有技术中,安卓端在对视频进行倒放显示时,需要从最后一个gop(groupofpicture,画面组)开始进行处理,在对每个gop进行处理时,必须从该gop的关键帧开始解码,一直解码到该gop中未处理的最后一帧,才能显示该最后一帧。例如,在倒放显示一个gop时,如果该gop包括3个视频帧,第一帧为关键帧,则在倒放显示时需要按照第三帧、第二帧到第一帧的顺序进行显示,在显示第三帧时,需要从关键帧开始解码,即解码第一帧、第二帧和第三帧,解码第三帧后显示第三帧,在显示第二帧时,还需要从关键帧开始解码,即解码第一帧和第二帧,并显示第二帧,在显示第一帧时,还需要再解码一次第一帧,才可显示第一帧。即对gop中的每一帧进行倒放显示时,都需要从关键帧开始进行逐帧解码,直到解码到要显示的视频帧才可显示该视频帧,因此需要耗费较长的时间。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种视频处理方法、装置、终端和存储介质。

依据本发明的第一方面,提供了一种视频处理方法,包括:

针对需要倒序播放的画面组gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中;

当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

可选的,在针对需要倒序播放的gop,对所述gop从关键帧开始进行逐帧解码之前,还包括:

针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

可选的,所述针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop,包括:

创建解码线程;

所述解码线程按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop;

所述针对需要倒序播放的gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中,包括:

所述解码线程创建与所述需要倒序播放的gop对应的数据文件;

所述解码线程对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到所述数据文件中。

可选的,所述解码线程对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到所述数据文件中,包括:

所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码,并将解码后的视频数据帧输出至第一指定存储位置中空闲状态的缓冲器进行缓存,将该缓冲器的状态修改为忙碌状态;

所述解码线程使用开放图形库从所述第一指定存储位置中忙碌状态的缓冲器中读取解码后的视频数据帧,并将读取到的视频数据帧保存到所述数据文件中,释放该缓冲器。

可选的,所述解码线程将读取到的视频数据帧保存到所述数据文件中,包括:

所述解码线程使用开放图形库对读取到的视频数据帧进行缩放处理,并将缩放后的视频数据帧保存到所述数据文件中。

可选的,所述解码线程对所述gop从关键帧开始进行逐帧解码,包括:

所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码成明亮度-色度-浓度yuv数据,将所述yuv数据作为所述解码后的视频数据帧。

可选的,所述解码线程将解码后的视频数据帧保存到所述数据文件中,包括:

所述解码线程使用转换库对所述解码后的视频数据帧进行缩放处理和/或颜色空间转换处理,并将处理后的视频数据帧按照顺序保存到所述数据文件中。

可选的,还包括:

针对从所述待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完所述待处理视频的所有gop对应的数据文件,得到所述待处理视频对应的倒放视频。

可选的,所述针对从所述待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完所述待处理视频的所有gop对应的数据文件,得到所述待处理视频对应的倒放视频,包括:

创建编码线程;

所述编码线程获取未进行编码处理的数据文件;

所述编码线程按照从最后一帧到第一帧的顺序,读取所述数据文件中的视频数据帧;

所述编码线程对读取到的视频数据帧进行编码,继续获取下一个未进行编码处理的数据文件并进行上述的编码处理,直至处理完所有未进行编码处理的数据文件,得到所述待处理视频对应的倒放视频。

可选的,所述编码线程对读取到的视频数据帧进行编码,包括:

所述编码线程使用开放图形库将读取到的视频数据帧上传至硬编码对应的第二指定存储位置,并使用硬编码对所述第二指定存储位置中的视频数据帧进行编码。

可选的,在按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码之后,还包括:

删除该gop对应的数据文件。

依据本发明的第二方面,提供了一种视频处理装置,包括:

解码模块,用于针对需要倒序播放的画面组gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中;

倒放显示模块,用于当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

可选的,还包括:

gop获取模块,用于针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

可选的,所述gop获取模块包括:

解码线程创建单元,用于创建解码线程;

gop获取单元,用于通过所述解码线程按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop;

所述解码模块包括:

数据文件创建单元,用于通过所述解码线程创建与所述需要倒序播放的gop对应的数据文件;

解码单元,用于通过所述解码线程对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到所述数据文件中。

可选的,所述解码单元包括:

第一解码子单元,用于通过所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码,并将解码后的视频数据帧输出至第一指定存储位置中空闲状态的缓冲器进行缓存,将该缓冲器的状态修改为忙碌状态;

第一视频数据保存子单元,用于通过所述解码线程使用开放图形库从所述第一指定存储位置中忙碌状态的缓冲器中读取解码后的视频数据帧,并将读取到的视频数据帧保存到所述数据文件中,释放该缓冲器。

可选的,所述第一视频数据保存子单元具体用于:

通过所述解码线程使用开放图形库从所述输出指定存储位置中读取解码后的视频数据帧,并使用开放图形库对读取到的视频数据帧进行缩放处理,将缩放后的视频数据帧保存到所述数据文件中。

可选的,所述解码单元包括:

第二解码子单元,用于通过所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码成yuv数据,将所述yuv数据作为所述解码后的视频数据帧。

可选的,所述解码单元包括:

第二视频数据保存子单元,用于通过所述解码线程使用转换库对所述解码后的视频数据帧进行缩放处理和/或颜色空间转换处理,并将处理后的视频数据帧保存到所述数据文件中。

可选的,还包括:

编码模块,用于针对从所述待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完所述待处理视频的所有gop对应的数据文件,得到所述待处理视频对应的倒放视频。

可选的,所述编码模块包括:

编码线程创建单元,用于创建编码线程;

数据文件获取单元,用于通过所述编码线程获取未进行编码处理的数据文件;

视频数据读取单元,用于通过所述编码线程按照从最后一帧到第一帧的顺序,读取所述数据文件中的视频数据帧;

编码单元,用于通过所述编码线程对读取到的视频数据帧进行编码,继续获取下一个未进行编码处理的数据文件并进行上述的编码处理,直至处理完所有未进行编码处理的数据文件,得到所述待处理视频对应的倒放视频。

可选的,所述编码单元包括:

第二编码子单元,用于通过所述编码线程使用开放图形库将读取到的视频数据帧上传至硬编码对应的第二指定存储位置,并使用硬编码对所述第二指定存储位置中的视频数据帧进行编码。

可选的,所述编码模块还用于:

在按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码之后,删除该gop对应的数据文件。

依据本发明的第三方面,提供了一种终端,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面中所述的视频处理方法。

依据本发明的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面中所述的视频处理方法。

针对在先技术,本发明具备如下优点:

本发明提供的视频处理方法、装置、终端和存储介质,通过针对需要倒序播放的gop,从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中,当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧,由于在对gop进行解码时通过对应的数据文件来保存该gop中从关键帧开始解码得到的视频数据帧,倒放显示时可以直接从数据文件中获取对应的视频数据帧并显示,从而一个gop只需进行一次解码就可以进行倒放显示,无需进行重复解码,减少了重复解码浪费的时间,从而减少了视频倒放的时间。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。

图1是本发明实施例提供的一种视频处理方法的步骤流程图;

图2是本发明实施例提供的一种视频处理方法的步骤流程图;

图3是本发明实施例提供的一种视频处理方法的步骤流程图;

图4是本发明实施例提供的一种视频处理方法的步骤流程图;

图5是本发明实施例提供的一种视频处理方法的步骤流程图;

图6是本发明实施例提供的一种视频处理方法的步骤流程图;

图7是本发明实施例提供的一种视频处理装置的结构框图;

图8为本发明实施例提供的一种终端的结构框图。

具体实施方式

下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。

针对一个顺序编码后的视频,在进行倒放时,需要将该视频按照从最后一帧到第一帧的顺序进行显示,从而实现倒放。在显示每一帧时,需要对该帧进行解码,得到对应的视频数据帧后才可显示。而一个视频包括至少一个gop,现有技术中,对每个gop进行倒放显示时,需要先显示最后一帧,显示最后一帧时需要从该gop的关键帧开始解码,直至解码至最后一帧才可显示最后一帧;而对倒数第二帧进行显示时,还需要从该gop的关键帧开始解码,直至解码至倒数第二帧才可显示倒数第二帧,对其他的视频帧进行显示时也需从关键帧开始进行解码直至解码到该视频帧才可以显示,因此,对于一个gop中的视频数据帧进行了多次重复解码,耗费了较长的时间。本发明实施例为了解决该问题,提供了以下的技术方案。

图1是本发明实施例提供的一种视频处理方法的步骤流程图,该方法可以应用于终端,如图1所示,该方法可以包括:

步骤101,针对需要倒序播放的画面组gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中。

其中,一个gop是一组连续的画面,是一段图像编码后的数据流,是mpeg(movingpictureexpertsgroup,动态图像专家组)编码的最基本单位。,mpeg编码将画面分为i、p、b三种,i是关键帧,p是前向预测帧,b是双向内插帧。i帧是一个完整的画面,而p帧和b帧记录的是相对于i帧的变化。一般,每个gop的第一帧为关键帧,在编码时关键帧不参考其他帧,非关键帧(p/b帧)需要参考其他帧(如关键帧i帧)。从而编码过程决定了,解码必须从关键帧开始。

所述数据文件为dat文件,用于保存解码后的视频数据帧。

在对一个gop进行倒序播放时,需要按照从该gop的最后一帧到第一帧的顺序播放显示该gop中的各个视频数据帧,在对该gop从关键帧开始进行解码时,将解码得到的各个视频数据帧保存到该gop对应的数据文件中,便于后续倒放显示时,直接从数据文件中获取要显示的视频数据帧。

步骤102,当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

当一个gop的所有视频数据帧都解码完毕后,就可以对该gop进行倒序播放了,在倒序播放时,需要按照从最后一帧到第一帧的顺序进行播放,针对已经解码完毕并保存到数据文件中的视频数据帧,按照从最后一帧到第一帧的顺序,从数据文件中依次获取视频数据帧并显示,从而实现了对gop的倒序播放。通过数据文件保存一个gop解码后的视频数据帧,从而通过一次解码就可以实现对该gop的倒序播放。

本实施例提供的视频处理方法,通过针对需要倒序播放的gop,从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中,当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧,由于在对gop进行解码时通过对应的数据文件来保存该gop中从关键帧开始解码得到的视频数据帧,倒放显示时可以直接从数据文件中获取对应的视频数据帧并显示,从而一个gop只需进行一次解码就可以进行倒放显示,无需进行重复解码,减少了重复解码浪费的时间,从而减少了视频倒放的时间。

图2是本发明实施例提供的一种视频处理方法的步骤流程图,本实施例在上述实施例的基础上,针对一个需要倒序播放的待处理视频,可以按照从最后一个gop到第一个gop的顺序获取该待处理视频中的gop,作为当前需要倒序播放的gop,其中的每个gop均按照上述方式进行倒序播放。如图2所示,该方法可以包括:

步骤201,针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

其中,待处理视频可以是用户刚录制完成的视频(例如通过短视频应用程序录制的视频),也可以是根据用户指定的存储路径获取到的视频。针对需要倒序播放的待处理视频,根据待处理视频的gop,按照从最后一个gop到第一个gop的顺序,对每个gop进行解码处理并显示。这时,可以先获取待处理视频的最后一个gop,将该gop作为需要倒序播放的gop,对该gop进行后续的解码处理及显示;之后,再获取待处理视频的倒数第二个gop,将该gop作为需要倒序播放的gop,对该gop进行后续的解码处理及显示;之后再获取待处理视频的倒数第三个gop,将该gop作为需要倒序播放的gop,对该gop进行后续的解码处理及显示,即按照从最后一个gop到第一个gop的顺序依次获取待处理视频中的gop,并对获取到的gop进行后续的解码处理及显示,直至将该待处理视频的第一个gop解码处理并显示完成。

步骤202,针对需要倒序播放的画面组gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中。

本步骤的具体内容与上述实施例中的步骤101的具体内容相同,这里不再赘述。

步骤203,当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

本步骤的具体内容与上述实施例中的步骤102的具体内容相同,这里不再赘述。

本实施例提供的视频处理方法,通过针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取待处理视频中的gop,并将获取到的gop作为需要倒序播放的gop,从而对该gop从关键帧开始进行逐帧解码并将解码后的视频数据帧保存到该gop对应的数据文件中,当该gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序从数据文件中依次获取视频数据帧并显示,从而针对一个gop只需进行一次解码处理就可以进行倒序显示,无需进行重复解码,减少了重复解码浪费的时间,针对一个包括至少一个gop的待处理视频,每个gop均只需进行一次解码,从而减少了视频倒放的时间。

图3是本发明实施例提供的一种视频处理方法的步骤流程图,本实施例在上述实施例的基础上,针对从待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完待处理视频的所有gop对应的数据文件,得到待处理视频对应的倒放视频。如图3所示,该方法具体可以包括:

步骤301,针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

本步骤的具体内容与上述实施例中的步骤201的具体内容相同,这里不再赘述。

步骤302,针对需要倒序播放的画面组gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中。

本步骤的具体内容与上述实施例中的步骤101的具体内容相同,这里不再赘述。

步骤303,当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

本步骤的具体内容与上述实施例中的步骤102的具体内容相同,这里不再赘述。

步骤304,针对从所述待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完所述待处理视频的所有gop对应的数据文件,得到所述待处理视频对应的倒放视频。

针对倒序获取到的待处理视频的gop,对该gop进行解码处理完成并将解码后的数据保存到该gop对应的数据文件中后,就可以对该数据文件进行编码处理,即按照从最后一帧到第一帧的顺序读取该数据文件中的视频数据帧并进行编码,从而得到倒放视频的一个gop。按照从最后一个gop到第一个gop的顺序,对每个gop均进行上述的解码处理并编码后,得到待处理视频对应的倒放视频。

可选的,在按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码之后,还包括:删除该gop对应的数据文件。

对一个数据文件中的视频数据帧进行编码之后,就可以将该数据文件删除,从而可以及时释放存储空间。

需要说明的是,上述步骤303和步骤304的顺序不限于上述的顺序,即可以先执行步骤303,再执行步骤304;或者,也可以先执行步骤304,再执行步骤303;或者,步骤303和步骤304还可以同时执行。

本实施例提供的视频处理方法,通过针对从待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完待处理视频的所有gop对应的数据文件,得到待处理视频对应的倒放视频,后续再需要对待处理视频进行倒放显示时,可以直接播放该待处理视频对应的倒放视频,从而避免了每次对待处理视频进行倒放显示时均需要重复解码的情况,减少了视频倒放的时间。

图4是本发明实施例提供的一种视频处理方法的步骤流程图,本实施例在上述实施例的基础上,通过解码线程来对每个gop进行解码处理,通过编码线程来对解码后得到的数据文件中的解码后的视频数据帧进行编码处理。如图4所示,该方法具体可以包括:

步骤401,创建解码线程。

可以创建一个解码线程,通过该解码线程来对倒序获取到的gop进行解码处理。

步骤402,所述解码线程按照从最后一个gop到第一个gop的顺序,依次获取待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

步骤403,所述解码线程创建与所述需要倒序播放的gop对应的数据文件。

解码线程获取到一个gop后,在存储空间中创建与该gop对应的数据文件,创建的数据文件用于保存该gop解码后的视频数据帧。

步骤404,所述解码线程对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到所述数据文件中。

步骤405,当所述gop的所有视频数据帧都解码完毕后,所述解码线程按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

步骤406,所述解码线程判断所述待处理视频的gop是否都处理完成,如果否,则执行步骤402,如果是,则退出所述解码线程。

步骤407,创建编码线程。

可以创建一个编码线程,通过该编码线程来对数据文件中的视频数据帧进行编码处理。

步骤408,所述编码线程获取未进行编码处理的数据文件。

步骤409,所述编码线程按照从最后一帧到第一帧的顺序,读取所述数据文件中的视频数据帧。

步骤410,所述编码线程对读取到的视频数据帧进行编码。

步骤411,所述编码线程判断是否还有未进行编码处理的数据文件,如果是,则执行步骤408,如果否,则退出编码线程,得到所述待处理视频对应的倒放视频。

需要说明的是,解码线程和编码线程可以并行执行,即步骤401-406与步骤407-411可以并行执行,从而解码线程将倒序获取到的gop进行解码,并将解码后的视频数据帧保存到该gop对应的数据文件中,编码线程可以获取未进行编码处理的数据文件,对该数据文件中的视频数据帧进行编码处理。

本实施例提供的视频处理方法,通过解码线程按照从最后一个gop到第一个gop的顺序,依次获取待处理视频中的gop,创建该gop对应的数据文件,并对该gop从关键帧开始进行逐帧解码,将解码后的视频数据帧保存到该gop对应的数据文件中,通过编码线程获取未进行编码处理的数据文件,按照从最后一帧到第一帧的顺序读取该数据文件中的视频数据帧并对读取到的视频数据帧进行编码,直至处理完所有数据文件,得到待处理视频对应的倒放视频,通过解码线程和编码线程来并行处理,进一步加快了处理速度,从而进一步减少了形成倒放视频的时间。

图5是本发明实施例提供的一种视频处理方法的步骤流程图,本实施例在上述实施例的基础上,通过硬件编解码和开放图形库来进行解码和编码处理。如图5所示,该方法具体可以包括:

步骤501,创建解码线程。

步骤502,所述解码线程按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

步骤503,所述解码线程创建与所述需要倒序播放的gop对应的数据文件。

解码线程获取到一个gop后,创建与该gop对应的数据文件,创建的数据文件用于保存该gop解码后的视频数据帧。

步骤504,所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码,并将解码后的视频数据帧输出至第一指定存储位置中空闲状态的缓冲器进行缓存,将该缓冲器的状态修改为忙碌状态。

其中,硬解码可以使用mediacodec来完成,mediacodec是android系统中的一个编解码类,用于访问android底层的多媒体编解码器,实现硬件编解码,是android底层多媒体支持基础架构的一部分。在使用mediacodec进行硬解码时可以设置为surface模式,在surface模式下,第一指定存储位置是与硬解码对应的存储位置,可以包括多个缓冲器,用于对硬解码输出的解码后的视频数据帧进行缓存。

解码线程使用硬解码跳转到需要倒序播放的gop的关键帧,从关键帧开始依次对每一帧进行解码,将解码后得到的视频数据帧输出到第一指定存储位置中空闲状态的缓冲器进行缓存,并将该缓冲器的状态修改为忙碌状态,从而不再接收其他解码后的视频数据帧,直至该缓冲器被释放,状态为空闲状态再接收其他解码后的视频数据帧。

步骤505,所述解码线程使用开放图形库从所述第一指定存储位置中忙碌状态的缓冲器中读取解码后的视频数据帧,并将读取到的视频数据帧保存到所述数据文件中,释放该缓冲器。

其中,开放图形库(opengraphicslibrary,opengl)是用于渲染2d、3d矢量图形的跨语言、跨平台的应用程序编程接口(applicationprogramminginterface,api)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。opengl的api定义了若干可被客户端程序调用的函数。

在一种具体的实施方案中,所述解码线程将读取到的视频数据帧保存到所述数据文件中,包括:所述解码线程使用开放图形库对读取到的视频数据帧进行缩放处理,并将缩放后的视频数据帧保存到所述数据文件中。

解码线程通过调用开放图形库中的缩放处理的函数对读取到的视频数据帧进行缩放处理,从而减少了要处理的数据量,可以进一步提高视频倒放的速度。

步骤506,当所述gop的所有视频数据帧都解码完毕后,所述解码线程按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

步骤507,所述解码线程判断所述待处理视频的gop是否都处理完成,如果否,则执行步骤502,如果是,则退出所述解码线程。

步骤508,创建编码线程。

步骤509,所述编码线程获取未进行编码处理的数据文件。

步骤510,所述编码线程按照从最后一帧到第一帧的顺序,读取该数据文件中的视频数据帧。

步骤511,所述编码线程使用开放图形库将读取到的视频数据帧上传至硬编码对应的第二指定存储位置,并使用硬编码对所述第二指定存储位置中的视频数据帧进行编码。

其中,硬编码可以使用mediacodec来完成,在使用mediacodec进行硬解码时可以设置为surface模式,在surface模式下,第二指定存储位置是与硬编码对应的存储位置,用于缓存要输入mediacodec中进行编码的视频数据帧。

编码线程使用开放图形库将读取到的视频数据帧上传至硬编码对应的第二指定存储位置进行缓存,从而硬编码可以从第二指定存储位置中读取视频数据帧并进行编码。其中,第二指定存储位置可以包括多个缓冲器,用于缓存要输入mediacodec中进行编码的视频数据帧,在缓冲器中有要进行编码的视频数据帧时,该缓冲器的状态为忙碌状态,mediacodec从该缓冲器中取出视频数据帧后将该缓冲器的状态修改为空闲状态,便于接收其他要进行编码的视频数据帧。

步骤512,所述编码线程判断是否还有未进行编码处理的数据文件,如果是,则执行步骤509,如果否,则退出编码线程,得到所述待处理视频对应的倒放视频。

需要说明的是,解码线程和编码线程可以并行执行,即步骤501-507与步骤508-512可以并行执行,从而解码线程将倒序获取到的gop进行解码,并将解码后的视频数据帧保存到该gop对应的数据文件中,编码线程可以获取未进行编码处理的数据文件,对该数据文件中的视频数据帧进行编码处理。

本实施例提供的视频处理方法,通过使用硬解码和开放图形库配合来对待处理视频的gop进行解码,并将解码到的视频数据帧保存到gop对应的数据文件中,使用硬编码和开放图形库配合来对数据文件中的视频数据帧进行编码,由于开放图形库依赖于gpu(graphicsprocessingunit,图形处理器)的处理能力,因此,对于gpu性能较好的设备可以显著提高处理速度,进一步减少视频倒放的时间。

图6是本发明实施例提供的一种视频处理方法的步骤流程图,本实施例在上述实施例的基础上,通过硬件编解码来进行解码和编码处理,并可选采用转换库来进行补充处理。如图6所示,该方法可以包括:

步骤601,创建解码线程。

步骤602,所述解码线程按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

步骤603,所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码成yuv数据,将所述yuv数据作为所述解码后的视频数据帧。

解码线程获取到一个gop后,创建与该gop对应的数据文件,创建的数据文件用于保存该gop解码后的视频数据帧。

步骤604,所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码成yuv数据,将所述yuv数据作为所述解码后的视频数据帧,并将解码后的视频数据帧保存到所述数据文件中。

其中,yuv(也称ycrcb)是被欧洲电视系统所采用的一种颜色编码方法(属于pal),是pal和secam模拟彩色电视制式采用的颜色空间。其中的y、u、v几个字母不是英文单词的组合词,y表示明亮度(luminance或luma),也就是灰阶值;而u和v表示的则是色度和浓度(chrominance或chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。u和v是构成彩色的两个分量。采用yuv色彩空间的重要性是亮度信号y和色度信号u、v是分离的,如果只有y信号分量而没有u、v信号分量,那么这样表示的图像就是黑白灰度图像。

解码线程使用硬解码跳转到需要倒序播放的gop的关键帧,从关键帧开始依次对每一帧进行解码,解码后得到的视频数据帧为yuv数据。

可选的,所述解码线程将解码后的视频数据帧保存到所述数据文件中,包括:

所述解码线程使用转换库对所述解码后的视频数据帧进行缩放处理和/或颜色空间转换处理,并将处理后的视频数据帧保存到所述数据文件中。

其中,转换库采用libyuv,libyuv是google开源的实现各种yuv与rgb之间相互转换、旋转、缩放的库。yuv数据的格式包括nv12、yv12和yuv420p等。在解码后的视频数据帧的格式与要求的数据格式不同时,需要对解码后的视频数据帧进行颜色空间转换处理,以转换为要求的数据格式。

解码线程通过使用转换库对解码后的视频数据帧进行缩放处理和/或转换颜色空间处理,可以减少待处理的数据量,从而进一步提高处理速度,进一步减少视频倒放的时间。

步骤605,当所述gop的所有视频数据帧都解码完毕后,所述解码线程按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

步骤606,所述解码线程判断所述待处理视频的gop是否都处理完成,如果否,则执行步骤602,如果是,则退出所述解码线程。

步骤607,创建编码线程。

步骤608,所述编码线程获取未进行编码处理的数据文件。

步骤609,所述编码线程按照从最后一帧到第一帧的顺序,读取所述数据文件中的视频数据帧。

步骤610,所述编码线程使用硬编码对读取到的视频数据帧进行编码。

编码线程使用硬编码对读取到的yuv格式的视频数据帧进行编码。

步骤611,所述编码线程判断是否还有未进行编码处理的数据文件,如果是,则执行步骤608,如果否,则退出编码线程,得到所述待处理视频对应的倒放视频。

需要说明的是,解码线程和编码线程可以并行执行,即步骤601-606与步骤607-611可以并行执行,从而解码线程将倒序获取到的gop进行解码,并将解码后的视频数据帧保存到该gop对应的数据文件中,编码线程可以获取未进行编码处理的数据文件,对该数据文件中的视频数据帧进行编码处理。

本实施例提供的视频处理方法,通过使用硬解码将待处理视频的gop解码为yuv数据,并保存到gop对应的数据文件中,使用硬编码对数据文件中的视频数据帧进行编码处理,并可选采用libyuv来进行缩放处理和/或颜色空间转换处理,减少了需要进行编码的数据量,提高了处理速度,进一步减少了视频倒放的时间。

表1是针对不同机型的android手机通过上述的两种方法(即mediacodec和opengl相结合和mediacodec和libyuv相结合)实现视频倒放所需的时间的对比实验数据,如表1所示,通过mediacodec和libyuv相结合的方法可以适用于多种机型的设备,在表1给出的机型中,所需的视频倒放的时间都明显的较少。

表1不同机型实现视频倒放所需时间

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

图7是本发明实施例提供的一种视频处理装置的结构框图,该视频处理装置可以应用于终端中,如图7所示,该视频处理装置700可以包括:

解码模块701,用于针对需要倒序播放的画面组gop,对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到该gop对应的数据文件中;

倒放显示模块702,用于当所述gop的所有视频数据帧都解码完毕后,按照从最后一帧到第一帧的顺序,从所述数据文件中依次获取视频数据帧并显示获取到的视频数据帧。

可选的,还包括:

gop获取模块,用于针对需要倒序播放的待处理视频,按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop。

可选的,所述gop获取模块包括:

解码线程创建单元,用于创建解码线程;

gop获取单元,用于通过所述解码线程按照从最后一个gop到第一个gop的顺序,依次获取所述待处理视频中的gop,并将获取到的gop作为所述需要倒序播放的gop;

所述解码模块包括:

数据文件创建单元,用于通过所述解码线程创建与所述需要倒序播放的gop对应的数据文件;

解码单元,用于通过所述解码线程对所述gop从关键帧开始进行逐帧解码,并将解码后的视频数据帧保存到所述数据文件中。

可选的,所述解码单元包括:

第一解码子单元,用于通过所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码,并将解码后的视频数据帧输出至第一指定存储位置中空闲状态的缓冲器进行缓存,将该缓冲器的状态修改为忙碌状态;

第一视频数据保存子单元,用于通过所述解码线程使用开放图形库从所述第一指定存储位置中忙碌状态的缓冲器中读取解码后的视频数据帧,并将读取到的视频数据帧保存到所述数据文件中,释放该缓冲器。

可选的,所述第一视频数据保存子单元具体用于:

通过所述解码线程使用开放图形库从所述输出指定存储位置中读取解码后的视频数据帧,并使用开放图形库对读取到的视频数据帧进行缩放处理,将缩放后的视频数据帧保存到所述数据文件中。

可选的,所述解码单元包括:

第二解码子单元,用于通过所述解码线程使用硬解码对所述gop从关键帧开始逐帧解码成yuv数据,将所述yuv数据作为所述解码后的视频数据帧。

可选的,所述解码单元包括:

第二视频数据保存子单元,用于通过所述解码线程使用转换库对所述解码后的视频数据帧进行缩放处理和/或颜色空间转换处理,并将处理后的视频数据帧保存到所述数据文件中。

可选的,还包括:

编码模块,用于针对从所述待处理视频中获取到的gop,按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码,直至处理完所述待处理视频的所有gop对应的数据文件,得到所述待处理视频对应的倒放视频。

可选的,所述编码模块包括:

编码线程创建单元,用于创建编码线程;

数据文件获取单元,用于通过所述编码线程获取未进行编码处理的数据文件;

视频数据读取单元,用于通过所述编码线程按照从最后一帧到第一帧的顺序,读取所述数据文件中的视频数据帧;

编码单元,用于通过所述编码线程对读取到的视频数据帧进行编码,继续获取下一个未进行编码处理的数据文件并进行上述的编码处理,直至处理完所有未进行编码处理的数据文件,得到所述待处理视频对应的倒放视频。

可选的,所述编码单元包括:

第二编码子单元,用于通过所述编码线程使用开放图形库将读取到的视频数据帧上传至硬编码对应的第二指定存储位置,并使用硬编码对所述第二指定存储位置中的视频数据帧进行编码。

可选的,所述编码模块还用于:

在按照从最后一帧到第一帧的顺序,从该gop对应的数据文件中依次获取视频数据帧并进行编码之后,删除该gop对应的数据文件。

本实施例提供的视频处理装置,通过视频获取模块获取待处理视频,解码模块倒序获取待处理视频的gop,并对获取到的gop进行解码,将解码后的视频数据帧保存到该gop对应的数据文件中,编码模块针对倒序获取到的待处理视频的gop,倒序读取该gop对应的数据文件中的视频数据帧并进行编码,直至处理完所有数据文件,得到待处理视频对应的倒放视频,从而对于每一帧不再需要从关键帧开始进行重复解码,减少了重复解码浪费的时间,从而减少了视频倒放的时间。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

图8为本发明实施例提供的一种终端的结构框图。如图8所示,该终端800可以包括与一个或多个数据存储工具连接的处理器801,该数据存储工具可以包括内存单元802和存储介质803。终端800还可以包括输入接口804和输出接口805,用于与另一装置或系统进行通信。被处理器801的cpu执行的程序代码可存储在内存单元802或存储介质804中。

终端800中的处理器801调用存储在内存单元802或存储介质803的程序代码,以执行上述实施例中的视频处理方法。

其中,存储介质可以是只读存储器(read-onlymemory,rom),或是可读写的,例如硬盘、闪存。内存单元可为随机存取存储器(randomaccessmemory,ram)。内存单元可与处理器物理集成或集成在存储器中或构建为单独的单元。

处理器为上述终端的控制中心,并提供处理装置,用于执行指令,进行中断操作,提供计时功能以及多种其他功能。可选地,处理器包括一个或多个中央处理单元(cpu)。上述终端中包括一个或者多个的处理器。处理器可为单核(单cpu)处理器或多核(多cpu)处理器。除非另有声明,描述为用于执行任务的例如处理器或存储器的部件可实现为通用部件,其暂时用于在给定时间执行任务,或实现为专门制造用于执行该任务的特定部件。此处所用的术语“处理器”指一个或多个装置,电路和/或处理核,用于处理数据,例如计算机程序指令。

被处理器的cpu执行的程序代码可存储在内存单元或存储介质中。可选地,存储在存储介质中的程序代码可以被复制入内存单元以便处理器的cpu执行。处理器可执行至少一个内核(例如linuxtm、unixtm、windowstm、androidtm、iostm),众所周知,该内核用于通过控制其他程序或过程的执行、控制与外围装置的通信以及控制计算机设备资源的使用来控制上述终端的操作。

上述终端中的上述元件可通过总线彼此连接,总线例如数据总线、地址总线、控制总线、扩展总线和局部总线之一或其任意组合。

根据本发明的一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,存储介质可以是只读存储器(read-onlymemory,rom),或是可读写的,例如硬盘、闪存。所述计算机程序被处理器执行时实现前述实施例的视频处理方法。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种视频处理方法、装置、终端和存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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