一种视频倒放的方法及装置与流程

文档序号:11207289阅读:1233来源:国知局
一种视频倒放的方法及装置与流程

本发明涉及视频处理技术领域,特别涉及一种视频倒放的方法及装置。



背景技术:

目前,视频文件的编码方式主要为非全i帧编码方式,非全i帧编码方式的视频文件中,视频帧包括有i帧、p帧。如图1所示的帧间编码方式,即i帧周期性出现,每一个周期为一个gop(groupofpictures,画面组)码流数据,如图1中i1、p2、p3、p4……pn为一个gop码流数据。其中i帧称为帧内编码帧,是一种自带全部信息的独立帧其无需参考其它帧便可独立进行解码;p帧也称为帧间预测编码帧,p帧不能够独立解码,必须参考前面的i帧或p帧才能进行编码。

视频播放时必须先解码i帧,再解码依赖该i帧的p帧,方可正确解码,清晰播放,否则会出现花屏或者无法播放。在视频倒放时,由于p帧无法单独解码播放,必须依赖i帧解码,而在原始视频文件的倒放过程中,i帧始终处于依赖i帧的p帧之后,因此需要为p帧寻找i帧,在找到p帧所依赖的i帧之后,才可以进行视频的解码播放。

目前,现有技术中的视频倒放方法主要通过以下步骤来完成:

1、从视频文件的某个视频帧开始倒放,将开始倒放的视频帧从后往前依次获取到i帧的数据作为目标码流数据,存入缓存区a;

2、从i帧开始依次解码,解码出目标码流数据中所有视频帧的图片,存入缓存区b;

3、从缓存b中倒序获取图片进行显示。

上述现有技术在做视频倒放时存在的主要问题是:现有技术是将解码后的图片存储在缓存b中,一张1920*1080p的图片占用约3mb内存,其中通用p制2sgop包含50张图片,对应存储在缓存b占用的内存为150m;通用n制2sgop包含60张图片,对应存储在缓存b占用的内存为180m;这对于目前内存紧张的平台(例如安防嵌入式设备)来说,占用内存巨大。

综上所述,现有视频倒放方法存在内存占用较大的问题。



技术实现要素:

本发明提供一种视频倒放的方法及装置,用以解决现有视频倒放方法存在内存占用较大的问题。

基于上述问题,本发明实施例提出一种视频倒放的方法,包括:

将获取的目标码流数据进行分段处理,得到多个码流数据段,其中所述目标码流数据为一个gop码流数据中开始倒放的视频帧与i帧之间的数据,每段包括m个视频帧,所述m为正整数;

从i帧开始依次对所述目标码流数据进行解码,并将所述多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区;

逆向显示并释放所述缓存区中存储的解码图片;其中,在显示并释放解码图片的过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,并存储到缓存区中。

由于本发明实施例在对目标码流数据进行倒放时,将获取到的目标码流数据进行分段,并且在对目标码流数据解码后,将第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区,并不需要将解码得到的码流数据段中每一个视频帧的解码图片均存储在缓存区,因此可以有效减少解码图片在缓存区中占用的内存;并且,在缓存区中的解码图片在显示后即进行释放,避免过多占用内存;在解码图片显示过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,实现第二缓存区的内存共享。

可选的,所述将所述多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区,包括:

将所述多个码流数据段中所述第一范围内的码流数据段中的第一个视频帧的解码图片,以及所述第二范围内的码流数据段中的全部视频帧的解码图片存储在缓存区。

可选的,所述第一范围内的码流数据段为所述多个码流数据段中的除最后一段之外的所有码流数据段;所述第二范围内的码流数据段为所述多个码流数据段中的最后一段码流数据段。

由于本发明实施例在对目标码流数据解码后,只将每段的第一视频帧的解码图片,以及最后一段所有视频帧的解码图片存储在第二缓存区,而除最后一段的其他段的非第一帧的解码图片不进行保存,可以有效减少第二缓存区占用的内存。

可选的,所述在显示并释放解码图片的过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧数据的解码图片,并存储到缓存区中,包括:

在显示并释放解码图片的过程中,根据同一码流数据段中已存储的第一个视频帧的解码图片,对所述码流数据段中未存储的视频帧进行解码;

将解码得到的所述未存储的视频帧的解码图片存储到缓存区中。

由于本发明实施例的视频倒放方法需要的第二缓存区内存较小,因此为第二缓存区设置的内存也较小。在倒放开始前,第二缓存区中存储有每段的第一帧的解码图片和最后一段的所有帧的解码图片;在倒放开始后,每显示一张解码图片后进行释放,该第二缓存区中释放出一张图片的内存,此时可以对前一段的一个视频帧进行解码,将解码后的解码图片存储至第二缓存区,从而实现第二缓存区的内存复用。

可选的,根据下列方式确定所述m值:

根据一个gop码流数据中视频帧的个数,以及一个gop时间内能够解码的最大视频帧数,确定所述m值。

由于本发明实施例在进行视频倒放时,需要对部分视频帧进行两次解码,从而减小第二缓存区所占用的内存;但是在一个gop时间内对视频帧的解码次数是具有上限的,即存在一个gop时间内能够解码的最大视频帧数,因此,并不能无线的增加对视频帧的解码次数,从而减小第二缓存区的内存占用。因此本发明实施例需要根据一个gop码流数据中视频帧的个数,以及一个gop时间内能够解码的最大视频帧数,合理的确定m值。

可选的,所述根据一个gop码流数据中视频帧的个数,以及一个gop时间内能够解码的最大视频帧数,确定所述m值,具体包括:

其中,所述gop为一个gop码流数据中视频帧的个数,所述n为一个gop时间内能够解码的最大视频帧数,表示向上取整操作。

由于本发明实施例给出了具体确定m值的方法,在不同情况下准确确定m值,从而在能够解码视频帧数的允许范围内,最大限度的减小第二缓存区的内存占用。

另一方面,本发明实施例还提供一种视频倒放的装置,包括:

获取模块,用于将获取的目标码流数据进行分段处理,得到多个码流数据段,其中所述目标码流数据为一个gop码流数据中开始倒放的视频帧与i帧之间的数据,每段包括m个视频帧,所述m为正整数;

处理模块,用于从i帧开始依次对所述目标码流数据进行解码,并将所述多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区;

播放模块,用于逆向显示并释放所述缓存区中存储的解码图片;其中,在显示并释放解码图片的过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,并存储到缓存区中。

可选的,所述处理模块,具体用于:

将所述多个码流数据段中所述第一范围内的码流数据段中的第一个视频帧的解码图片,以及第二范围内的码流数据段中的全部视频帧的解码图片存储在缓存区。

可选的,所述第一范围内的码流数据段为所述多个码流数据段中的除最后一段之外的所有码流数据段;所述第二范围内的码流数据段为所述多个码流数据段中的最后一段码流数据段。

可选的,所述处理模块,具体用于:

在显示并释放解码图片的过程中,根据同一码流数据段中已存储的第一个视频帧的解码图片,对所述码流数据段中未存储的视频帧进行解码;将解码得到的所述未存储的视频帧的解码图片存储到缓存区中。

可选的,所述获取模块,具体用于:

根据下列方式确定所述m值:

根据一个gop码流数据中视频帧的个数,以及一个gop时间内能够解码视频帧的最大个数,确定所述m值。

可选的,所述获取模块,具体用于:

其中,所述gop为一个gop码流数据中视频帧的个数,所述n为一个gop时间内能够解码视频帧的最大个数,表示向上取整操作。

附图说明

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

图1为背景技术中帧间编码方式示意图;

图2为本发明实施例视频倒放的方法流程图;

图3为本发明实施例将目标码流数据存储至第一缓存区的方法流程图;

图4为本发明实施例第二缓存区中存储解码图片的示意图;

图5为本发明实施例视频倒放方法的整体流程图;

图6为本发明实施例视频倒放装置的结构示意图。

具体实施方式

本发明实施例将获取的目标码流数据进行分段处理,得到多个码流数据段,其中所述目标码流数据为一个gop码流数据中开始倒放的视频帧与i帧之间的数据,每段包括m个视频帧,所述m为正整数;从i帧开始依次对所述目标码流数据进行解码,并将所述多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区;逆向显示并释放所述缓存区中存储的解码图片;其中,在显示并释放解码图片的过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,并存储到缓存区中。

由于本发明实施例在对目标码流数据进行倒放时,将获取到的目标码流数据进行分段,并且在对目标码流数据解码后,将第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区,并不需要将解码得到的码流数据段中每一个视频帧的解码图片均存储在缓存区,因此可以有效减少解码图片在缓存区中占用的内存;并且,在缓存区中的解码图片在显示后即进行释放,避免过多占用内存;在解码图片显示过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,实现第二缓存区的内存共享。

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

下面结合说明书附图对本发明实施例作进一步详细描述。

如图2所示,本发明实施例提供的一种视频倒放方法,包括:

步骤201、将获取的目标码流数据进行分段处理,得到多个码流数据段,其中所述目标码流数据为一个gop码流数据中开始倒放的视频帧与i帧之间的数据,每段包括m个视频帧,所述m为正整数;

步骤202、从i帧开始依次对所述目标码流数据进行解码,并将所述多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区;

步骤203、逆向显示并释放所述缓存区中存储的解码图片;其中,在显示并释放解码图片的过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,并存储到缓存区中。

本发明实例中,需要进行倒放的视频文件是以非全i帧编码方式进行编码的,例如编码方式可以是h264,h265,mpeg-4等格式。

以通用n制视频文件为例,视频码流格式可以为:i1-p101-p102……p159-i2-p201-p202-……p259……,以其中的一个gop码流数据i1-p101-p102……p159为例,其中i1为i帧,p101~p159分别表示59个p帧,在解码时,必须是先解码i帧,根据i帧解码p101,根据p101帧解码p102帧,依次类推,直至根据p158帧解码p159帧。

在上述步骤201之前,当接收到倒放指令时,确定开始倒放的位置,即开始倒放的视频帧,在接收到倒放指令后,确定目标码流数据。本发明实施例根据下列方式确定目标码流数据:

根据倒放指令,确定开始倒放的视频帧;从开始倒放的视频帧开始,按照视频帧时间顺序由后往前依次获取视频帧,直到获取到i帧停止获取;将获取到的i帧、开始倒放的视频帧,以及i帧与开始倒放的视频帧之间的视频帧,一起作为目标码流数据的视频帧。

其中,若开始倒放的视频帧为一个gop码流数据的最后一帧,则获取的目标码流数据为一个完整的gop码流数据;例如,以i1-p101-p102……p159-i2-p201-p202-……p259……为例,确定开始倒放的视频帧为p159,则获取的目标码流数据为i1-p101-p102……p159。

若开始倒放的视频帧为一个gop码流数据的中间帧,则获取的目标码流数据为一个gop码流数据中的前半部分的视频帧;例如,以i1-p101-p102……p159-i2-p201-p202-……p259……为例,确定开始倒放的视频帧为p249,则获取的目标码流数据为i2-p201-p202……p249。

可选的,本发明实施例在获取到目标码流数据后,将获取到的目标码流数据按照视频帧时间正向存储在第一缓存区;以及将解码得到的视频帧的解码图片存储在第二缓存区。

例如,如图3所示的将目标码流数据存储至第一缓存区的方法流程,以视频数据i1-p101-p102……p159-i2-p201-p202-……p259……为例,确定开始倒放的视频帧为p259,获取的目标码流数据为i2-p201-p202……-p258-p259;第一缓存区为缓存区a,则将目标码流数据存储在缓存区a后,缓存区a中的数据为:i2、p201、p202、……、p258、p259。

需要说明的是,本发明实施例将存储目标码流数据的缓存区称为第一缓存区,将存储解码图片的缓存区称为第二缓存区。

在步骤201中,在从第一缓存区获取到目标码流数据后,将目标码流数据进行分段处理,得到多个码流数据段。

以图3所示的第一缓存区中存储的目标码流数据为例,说明本发明实施例对目标码流数据进行分段处理的方法。其中,m=10。

第一缓存区a中存储的目标码流数据为i2-p201-p202……-p258-p259,按照每段10个视频帧进行分段处理,则分段后的目标码流数据为:

第1段:i2-p201-p202-p203-p204-p205-p206-p207-p208-p209;

第2段:p210-p211-p212-p213-p214-p215-p216-p217-p218-p219;

第3段:p220-p221-p222-p223-p224-p225-p226-p227-p228-p229;

第4段:p230-p231-p232-p233-p234-p235-p236-p237-p238-p239;

第5段:p240-p241-p242-p243-p244-p245-p246-p247-p248-p249;

第6段:p250-p251-p252-p253-p254-p255-p256-p257-p258-p259。

在对第一缓存区的目标码流数据进行分段处理后,从目标码流数据的i帧开始,依次对分段后的目标码流数据进行解码。由于本发明实施例的码流数据采用的是非全i帧编码方式进行编码的,其中i帧可以单独解码,不需要参考其他视频帧;而对于码流数据中的p帧,在进行解码时,需要参考当前p帧的前一帧的解码图片,根据前一帧的解码图片,对当前p帧进行解码。

在步骤202中,从i帧开始依次对所述目标码流数据进行解码后,并非是将所有解码得到的解码图片均存储至第二缓存区中,而是将分段后得到的多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片存储至第二缓存区,以及将第二范围内的码流数据段中的部分或全部视频帧的解码图片存储至第二缓存区中。

即,本发明实施例针对分段后的目标码流数据,在对目标码流数据中的视频帧进行解码后,针对解码得到的解码图片,可以有如下的处理方式:

1、将每个码流数据段中的部分视频帧的解码图片存储在第二缓存区中。

2、多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片存储至第二缓存区,以及将第二范围内的码流数据段中的部分或全部视频帧的解码图片存储至第二缓存区中。

针对上述处理方式1,假设分段后的目标码流数据为:

第1段:i2-p201-p202-p203-p204-p205-p206-p207-p208-p209;

第2段:p210-p211-p212-p213-p214-p215-p216-p217-p218-p219;

第3段:p220-p221-p222-p223-p224-p225-p226-p227-p228-p229;

第4段:p230-p231-p232-p233-p234-p235-p236-p237-p238-p239;

第5段:p240-p241-p242-p243-p244-p245-p246-p247-p248-p249;

第6段:p250-p251-p252-p253-p254-p255-p256-p257-p258-p259。

则将第1段、第2段、第3段、第4段、第5段和第6段中的部分视频帧的解码图片存储至第二缓存区。

需要说明的是,针对每段中存储至第二缓存区的部分视频帧,该部分视频帧中均包含该段中的第一个视频帧。

针对上述处理方式2,假设分段后的目标码流数据为:

第1段:i2-p201-p202-p203-p204-p205-p206-p207-p208-p209;

第2段:p210-p211-p212-p213-p214-p215-p216-p217-p218-p219;

第3段:p220-p221-p222-p223-p224-p225-p226-p227-p228-p229;

第4段:p230-p231-p232-p233-p234-p235-p236-p237-p238-p239;

第5段:p240-p241-p242-p243-p244-p245-p246-p247-p248-p249;

第6段:p250-p251-p252-p253-p254-p255-p256-p257-p258-p259。

则可以将第1段、第2段、第3段、第4段作为第一范围内的码流数据段,将第5段和第6段作为第二范围内的码流数据段;

即将第1段、第2段、第3段、第4段中的部分视频帧的解码图片存储至第二缓存区;将第5段和第6段中的全部视频帧的解码图片存储至第二缓存区。

需要说明的是,针对第1段、第2段、第3段、第4段中存储至第二缓存区的部分视频帧,该部分视频帧中均包含该段中的第一个视频帧。

为了最大限度的减小对第二缓存区的占用,可以减少存储至第二缓存区中的解码图片的个数。

可选的,将所述多个码流数据段中所述第一范围内的码流数据段中的第一个视频帧的解码图片,以及所述第二范围内的码流数据段中的全部视频帧的解码图片存储在缓存区。

本发明实施例针对多个码流数据段中第一范围内的码流数据段,只在第二缓存区中存储码流数据段中第一个视频帧的解码图片,在播放过程中,根据该码流数据中的第一个视频的解码图片,对该码流数据段中其他视频帧进行解码,得到其他视频帧的解码图片。

针对多个码流数据段中第二范围内的码流数据段,由于在第二缓存区中存储有该码流数据段中的全部视频帧的解码图片,在倒放时可以直接播放。

可选的,第一范围内的码流数据段为多个码流数据段中的除最后一段之外的所有码流数据段;第二范围内的码流数据段为多个码流数据段中的最后一段的码流数据段。

假设分段后的目标码流数据为:

第1段:i2-p201-p202-p203-p204-p205-p206-p207-p208-p209;

第2段:p210-p211-p212-p213-p214-p215-p216-p217-p218-p219;

第3段:p220-p221-p222-p223-p224-p225-p226-p227-p228-p229;

第4段:p230-p231-p232-p233-p234-p235-p236-p237-p238-p239;

第5段:p240-p241-p242-p243-p244-p245-p246-p247-p248-p249;

第6段:p250-p251-p252-p253-p254-p255-p256-p257-p258-p259。

则将第1段、第2段、第3段、第4段和第5段作为第一范围内的码流数据段;将第6段作为第二范围内的码流数据段;

即将第1段、第2段、第3段、第4段和第5段中的部分视频帧的解码图片存储至第二缓存区;将第6段中的全部视频帧的解码图片存储至第二缓存区。

作为优选的方式,本发明实施例针对分段后得到的多个码流数据段,将多个码流数据段中的最后一段中每一个视频帧的解码图片均存储至第二缓存区中,而除了最后一段之外的码流数据段,只将码流数据段中的第一个视频帧的解码图片存储至第二缓存区。

在解码过程中,针对最后一段之外的码流数据段,只将每个码流数据段中第一个视频帧的解码图片存储在第二缓存区中,对于码流数据段中除第一个视频帧之外的任意一个视频帧,在解码得到解码图片后,根据该视频帧的解码图片,解码得到下一帧的解码图片,并且不需要将该视频帧的解码图片存储于第二缓存区,而是直接释放。

例如,假设分段后的目标码流数据为:

第1段:i2-p201-p202-p203-p204-p205-p206-p207-p208-p209;

第2段:p210-p211-p212-p213-p214-p215-p216-p217-p218-p219;

第3段:p220-p221-p222-p223-p224-p225-p226-p227-p228-p229;

第4段:p230-p231-p232-p233-p234-p235-p236-p237-p238-p239;

第5段:p240-p241-p242-p243-p244-p245-p246-p247-p248-p249;

第6段:p250-p251-p252-p253-p254-p255-p256-p257-p258-p259。

从i2帧开始,对目标码流数据依次进行解码。具体的,i2自行解码,将解码后的解码图片存储在第二缓存区中;针对p201帧,根据i2帧的解码图片对p201帧进行解码,得到解码图片;然后根据p201帧的解码图片对p202帧进行解码,在得到p202帧的解码图片后,将p201帧的解码图片释放;依次采用上述方法对第一缓存区的第一个码流数据段中的数据进行解码,在解码得到p209的解码图片后,根据p209的解码图片,对第二个码流数据段中的第一个视频帧p210进行解码,在解码得到p210的解码图片后,释放p209的解码图片,并将p210的解码图片存储在第二缓存区中。同理,对第一缓存区中的第二个、第三个、第四个、第五个码流数据段中的视频帧均采用上述方法进行解码。针对第六个码流数据段,由于是该码流数据的最后一段码流数据段,需要将最后一段码流数据段中的每一个视频帧的解码图片均存储在第二缓存去中。则对目标码流数据解码后,如图4所示,第二缓存区中存储有解码图片的视频帧为:i2、p210、p220、p230、p240、p250、p251、p252、p253、p254、p255、p256、p257、p258、p259。

本发明实施例将需要存储至第二缓存区的解码图片保存完成后,逆向显示并释放所述缓存区中存储的解码图片。

由于本发明实施例目标码流数据的最后一段的解码图片全部保存在第二缓存区中,因此,目标码流数据的最后一段的解码图片,可以直接进行倒放。为了保证倒放的连续性,在倒放最后一段的解码图片的过程中,需要对除最后一段之外的码流数据段中未存储解码图片的视频帧进行解码。

可选的,在显示并释放解码图片的过程中,根据同一码流数据段中已存储的第一个视频帧的解码图片,对所述码流数据段中未存储的视频帧进行解码;将解码得到的所述未存储的视频帧的解码图片存储到缓存区中。

需要说明的是,为节省第二缓存区的空间,在倒放过程中,在对解码图片播放显示后,即可将该解码图片释放掉。

例如,本发明实施例的第二缓存区中存储有最后一段的码流数据段中全部视频帧的解码图片,在开始倒放后,直接将第二缓存区中存储的视频帧的解码图片进行倒序播放,解码图片在显示后,即可进行释放。在播放最后一段的解码图片的过程中,在倒放最后一段的解码图片的过程中,根据倒数第二个码流数据段的第一个视频帧的解码图片,解码出倒数第二个码流数据段中的其他的视频帧的解码图片,并存储在第二缓存区中。同样的,在倒数第二个码流数据段的视频帧全部解码完成后,再对倒数第三个码流数据段中的视频帧进行解码,直到该目标码流数据中第一个码流数据段的视频帧也解码完成。

需要说明的是,在将第一缓存区中的目标码流数据全部进行解码后,释放第一缓存区中存储的目标码流数据。此时获取目标码流数据之前的一个gop码流数据,并存储在第一缓存区中。

在上述步骤201中,将第一缓存区中缓存的目标码流数据进行分段处理,得到多个码流数据段,其中每段中的视频帧数为m。

本发明实施例在对目标码流数据分成m段之前,需要预先确定m的值。本发明实施例根据下列方式确定m值:

可选的,根据一个gop码流数据中视频帧的个数,以及一个gop时间内能够解码视频帧的最大个数,确定所述m值。

需要说明的是,gop码流数据中视频帧的个数为固定值;一个gop时间内能够解码视频帧的最大个数为根据机器能力确定的固定值。

下面结合数学公式详细说明本发明实施例确定m值的方法。

本发明实施例在确定m值时,需要考虑两个因素:1、一个gop码流数据在解码时占用的缓存区内存;2、gop时间内需要解码视频帧的个数。

由于本发明实施例针对一个gop码流数据,缓存区需要存储的视频帧的解码图片包括:最后一段的所有视频帧的解码图片,共m个;除最后一段之外其他每段中的第一个视频帧的解码图片,共个。则第二缓存区需要存储的视频帧的解码图片的个数

本发明实施例在确定gop时间内需要解码的视频帧数时,由于一个gop码流数据中最后一段的视频帧解码一次,则最后一段需要解码的视频帧数为m;除最后一段之外的其他段每个视频帧需要解码两次,则其他段需要解码的视频帧数为则gop时间内需要解码的视频帧数为b=2gop+m。

由于gop时间内需要解码的视频帧数不大于一个gop时间内能够解码的最大视频帧数n,即2gop+m≤n,则m的取值范围为m≥2gop-n(1)。

由于本发明实施例欲使得第二缓存区需要存储的视频帧的解码图片的个数最小,即在m的取值范围,使得取最小值。结合上述数学关系式(1)和数学关系式(2),可以得到下列确定m值的方法:

具体的,本发明实施例根据下列方式确定m值:

其中,所述gop为一个gop码流数据中视频帧的个数,所述n为一个gop时间内能够解码的最大视频帧数,表示向上取整操作。

本发明实施例根据确定的m值对第一缓存区中的目标码流数据进行分段处理,按照每段m个视频帧的方式进行分段。需要说明的是,在一个gop码流数据中视频帧的个数gop不是m的倍数时,分段后的目标码流数据的最后一段中视频帧的个数小于m。

下面以一个具体实施例,说明本发明实施例视频倒放的方法。

假设一个视频数据为i1-p102-p103……p140-i2-p202-p203……p240-i3-p302-p303……p340……,其中一个gop码流数据中包含40帧。在接收到倒放指令后,获取到的目标码流数据为i3-p302-p303……p340。

将目标码流数据为i3-p302-p303……p340正向存储在缓存a中,并对缓存a中的目标码流数据进行分段处理。

假设,根据一个gop码流数据中视频帧的个数40,以及一个gop时间内能够解码视频帧的最大个数,确定的m值为8,则将目标码流数据分为5段,分别为:

第1段:i3-p302-p303-p304-p305-p306-p307-p308;

第2段:p309-p310-p311-p312-p313-p314-p315-p316;

第3段:p317-p318-p319-p320-p321-p322-p323-p324;

第4段:p325-p326-p327-p328-p329-p330-p331-p332;

第5段:p333-p334-p335-p336-p337-p338-p339-p340。

从i3帧开始,对该目标码流数据进行第一次解码,在解码过程中,将第1段、第2段、第3段和第4段码流数据段中第一个视频帧的解码图片存储在缓存b中,其他视频帧的解码图片丢弃;第5段码流数据段中的全部视频帧的解码图片都存储在缓存b中。则在第一次解码结束后,缓存b中存储的解码图片为:i3帧的图片、p309帧的图片、p317帧的图片、p325帧的图片、p333帧的图片、p334帧的图片、p335帧的图片、p336帧的图片、p337帧的图片、p338帧的图片、p339帧的图片、p340帧的图片。

并且,需要说明的是,本发明实施例的缓存b中最多可以存储12张解码图片。

在第一次解码完成后,逆向显示缓存b中的解码图片。由于缓存b中存储有目标码流数据第5段所有帧的解码图片,可以对第5段所有帧实现完整的倒放。

由于除第5段之外的其他段只有第一帧的解码图片保存在缓存b中,因此,在倒放除第5段之外的其他段的解码图片之前,需要根据每一段的第一帧的解码图片,解码出本段中其他视频帧的解码图片。

由于本发明实施例缓存b需要存储的视频帧的解码图片的个数为12,为了最大限度的减小缓存b占用的内存,则需要充分复用缓存b的内存空间。在本发明实施例缓存b最多存储的解码图片的个数为12时,为了避免视频倒放的卡顿现象,本发明实施例每释放一张当前段的解码图片,对前一段的一个视频帧进行解码,并将解码后的解码图片保存至第二缓存区。

此时,可以将缓存a中存储的目标码流数据段进行释放,并获取下一个目标码流数据并进行分段处理。

即,首先对第5段中p340帧的图片进行显示,显示并释放后,缓存b中多出一张图片的空间,此时根据第4段中p325帧的解码图片对p326帧进行解码。以此类推,每释放掉一张第5段的视频帧的解码图片,解码一张第4段视频帧的解码图片。

同理,在逆向显示第4段是视频帧的解码图片的过程中,根据第3段的第一个视频帧的解码图片,对其他视频帧进行解码。以此类推,直到将第1段的视频帧均解码完成。

在显示第1段的解码图片的过程中,开始对下一个目标码流数据进行第一次解码。

本发明实施例针对任意一个gop码流数据,对gop码流数据的倒放均可采用步骤201~204的方法。

如图5所示,本发明实施例视频倒放方法的整体流程图:

步骤501、获取目标码流数据,其中,所述目标码流数据为一个gop码流数据中开始倒放的视频帧与i帧之间的数据;

步骤502、将所述目标码流数据按视频帧时间正向存储在第一缓存区;

步骤503、将存储在所述第一缓存区的所述目标码流数据进行分段处理,其中每段包括m个视频帧,m为正整数;

步骤504、从所述i帧开始依次对所述目标码流数据进行解码,并将每段第一个视频帧的解码图片,以及最后一段所有视频帧的解码图片存储在第二缓存区;

步骤505、逆向显示并释放所述第二缓存区中存储的解码图片;

步骤506、每释放一张当前段的解码图片,确定所述前一段中视频帧时间最靠前的未解码的视频帧;

步骤507、根据所述视频帧的前一帧的解码图片,解码所述视频帧的解码图片,并将解码得到的解码图片存储至所述第二缓存区。

基于同一发明构思,本发明实施例中还提供了一种视频倒放的装置,由于该装置解决问题的原理与本发明实施例视频倒放的方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

如图6所示,本发明实施例一种视频倒放的装置,包括:

获取模块601,用于将获取的目标码流数据进行分段处理,得到多个码流数据段,其中所述目标码流数据为一个gop码流数据中开始倒放的视频帧与i帧之间的数据,每段包括m个视频帧,所述m为正整数;

处理模块602,用于从i帧开始依次对所述目标码流数据进行解码,并将所述多个码流数据段中第一范围内的码流数据段中的部分视频帧的解码图片,以及第二范围内的码流数据段中的部分或全部视频帧的解码图片存储在缓存区;

播放模块603,用于逆向显示并释放所述缓存区中存储的解码图片;其中,在显示并释放解码图片的过程中,根据同一码流数据段中已存储的解码图片得到未存储的视频帧的解码图片,并存储到缓存区中。

可选的,所述处理模块602,具体用于:

将所述多个码流数据段中所述第一范围内的码流数据段中的第一个视频帧的解码图片,以及所述第二范围内的码流数据段中的全部视频帧的解码图片存储在缓存区。

可选的,所述第一范围内的码流数据段为所述多个码流数据段中的除最后一段之外的所有码流数据段;所述第二范围内的码流数据段为所述多个码流数据段中的最后一段码流数据段。

可选的,所述处理模块602,具体用于:

在显示并释放解码图片的过程中,根据同一码流数据段中已存储的第一个视频帧的解码图片,对所述码流数据段中未存储的视频帧进行解码;将解码得到的所述未存储的视频帧的解码图片存储到缓存区中。

可选的,所述获取模块601,具体用于:

根据下列方式确定所述m值:

根据一个gop码流数据中视频帧的个数,以及一个gop时间内能够解码视频帧的最大个数,确定所述m值。

可选的,所述获取模块601,具体用于:

其中,所述gop为一个gop码流数据中视频帧的个数,所述n为一个gop时间内能够解码视频帧的最大个数,表示向上取整操作。

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

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

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

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

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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