发明内容
本申请提供一种处理视频流的方法和装置,能够有效减小处理视频流的过程中产生的误差。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种处理视频流的方法,该方法可以包括:录像设备读取用于存储源视频流中待处理的视频帧的缓存队列中的第一视频帧;若该第一视频帧为关键帧,则录像设备确定待写入至第一文件的关键帧的数量;在待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为关键帧的情况下,录像设备将第一视频帧写入第一文件,并且录像设备停止向第一文件中写入第二视频帧,其中,第一文件包括目标视频流,该目标视频流为源视频流中的一段视频流,第二视频帧为第一视频帧的下一帧。
本申请提供的处理视频流的方法,由于录像设备在确定第一视频帧为关键帧的情况下,可以确定待写入至第一文件的关键帧的数量,然后根据关键帧的数量确定是否停止向第一文件中写入视频帧,得到第一文件,能够在一定程度上保证第一文件中目标视频流的时长与预设的固定时长相等,因此能够有效减小处理视频流的过程中产生的误差。
在第一方面的第一种可选的实现方式中,上述录像设备确定待写入至第一文件的关键帧的数量的方法可以包括:录像设备根据第一视频帧的显示时间戳PTS值、第三视频帧的PTS值,以及目标视频流的时长,确定待写入至第一文件的视频流的时长,第三视频帧为第一文件中已写入的视频流的首帧;然后录像设备根据待写入至第一文件的视频流的时长、源视频流的画面组的值,以及源视频流的帧率,确定待写入至第一文件的关键帧的数量。
在第一方面的第二种可选的实现方式中,上述录像设备根据待写入至第一文件的视频流的时长、源视频流的画面组的值,以及源视频流的帧率,确定待写入至第一文件的关键帧的数量的方法可以包括:录像设备根据待写入至第一文件的视频流的时长、源视频流的画面组的值,以及源视频流的帧率,采用公式
将I
n的值四舍五入后确定为待写入至第一文件的关键帧的数量,其中,T为待写入至第一文件的视频流的时长,GOP为源视频流的画面组的值,FrameRate为源视频流的帧率。
本申请中,录像设备按照上述方法确定待写入至第一文件的关键帧的数量,并且根据待写入至第一文件的关键帧的数量可以准确地确定,在何种情况下可以停止向第一文件中写入视频帧,如此能够保证第一文件中目标视频流的时长与预设的固定时长相等。
在第一方面的第三种可选的实现方式中,在上述录像设备读取第一视频帧之后,本申请提供的处理视频流的方法还可以包括:录像设备确定第一视频帧是否为关键帧。
本申请中,录像设备从该录像设备的缓冲器中读取第一视频帧之后,该录像设备确定该第一视频帧是否为关键帧,如此录像设备可以根据该第一视频帧的特性,确定是否需要计算待写入至第一文件的关键帧的数量。在录像设备确定第一视频帧为关键帧的情况下,该录像设备确定待写入至第一文件的关键帧的数量,在该录像设备确定第一视频帧为非关键帧的情况下,该录像设备直接将第一视频帧写入第一文件,无需确定待写入至第一文件的关键帧的数量,如此可以降低处理视频流的过程中的计算量。
在第一方面的第四种可选的实现方式中,在上述录像设备将第一视频帧写入第一文件之后,本申请提供的处理视频流的方法还可以包括:录像设备创建第二文件,并且读取第二视频帧,以及将第二视频帧写入第二文件。
本申请中,录像设备停止向第一文件中写入第二视频帧之后,该录上设备可以将第二视频帧写入新创建的第二文件中。可以理解的是,录像设备停止向第一文件写入视频帧之后,若该录像设备的缓存队列中还存在视频流,那么该录像设备继续创建新的文件,并继续读取视频帧,然后向创建的新文件写入视频帧,如此可以实现将源视频流分段保存为多个视频流片段(多个文件中存储多个视频流片段)。
在第一方面的第五种可选的实现方式中,在录像设备确定待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为非关键帧的情况下,录像设备将第一视频帧写入第一文件,然后录像设备读取第二视频帧,并且录像设备将第二视频帧写入第一文件。
本申请中,录像设备确定待写入至第一文件的关键帧的数量等于1,说明录像设备当前读取的第一视频帧所在的画面组为待写入至第一文件的最后一个画面组,而第一视频帧的下一帧(即上述的第二视频帧)为非关键帧,说明录像设备还未将当前最后一个画面组的所有视频帧都写入第一文件,因此,该录像设备需继续读取第一视频帧所在的画面组的剩余的视频帧(包括第二视频帧),并将该画面组的剩余的视频帧写入第一文件之后,该录像设备可以停止向第一文件中写入视频帧。
在第一方面的第六种可选的实现方式中,在录像设备确定待写入至第一文件的关键帧的数量大于1的情况下,录像设备将第一视频帧写入第一文件;然后录像设备读取第二视频帧,若该第二视频帧为关键帧,则录像设备确定待写入至第一文件的关键帧的数量;在待写入至第一文件的关键帧的数量等于1,并且在第二视频帧的下一帧为关键帧的情况下,录像设备将第二视频帧写入第一文件,并且录像设备停止向第一文件中写入视频帧。
本申请中,录像设备确定待写入至第一文件的关键帧的数量大于1,说明在录像设备读取第一视频帧所在的画面组的所有视频帧,并将该画面组的所有视频帧写入第一文件之后,该录像设备还需要继续读取至少一个画面组的视频帧,并将其读取的至少一个画面组的所有视频帧写入第一文件之后,该录像设备可以停止向第一文件中写入视频帧。
在第一方面的第七种可选的实现方式中,若上述第一视频帧为目标视频流的首帧,则录像设备直接将该第一视频帧写入第一文件。
本申请中,如果录像设备读取的第一视频帧为目标视频流的首帧(即写入第一文件中的第一个视频帧),那么录像设备可以不用确定待写入至第一文件的关键帧的数量,该录像设备直接将该第一视频帧写入第一文件,然后录像设备继续读取视频帧,按照上述处理视频流的方法(即上述通过确定待写入至第一文件的关键帧的数量的方法,确定何时停止向第一文件中写入视频帧)。
第二方面,本申请提供一种录像设备,该录像设备可以包括读取模块、确定模块和写数据模块。其中,读取模块可以读取用于存储源视频流中待处理的视频帧的缓存队列中的第一视频帧;确定模块可以用于在读取模块读取的第一视频帧为关键帧的情况下,确定待写入至第一文件的关键帧的数量,第一文件包括目标视频流,目标视频流为源视频流中的一段视频流;写数据模块可以用于在确定模块确定的待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为关键帧的情况下,将第一视频帧写入第一文件,并且停止向第一文件中写入第二视频帧,其中,第二视频帧为第一视频帧的下一帧。
在第二方面的第一种可选的实现方式中,上述确定模块具体用于根据第一视频帧的显示时间戳PTS值、第三视频帧的PTS值,以及目标视频流的时长,确定待写入至第一文件的视频流的时长,该第三视频帧为第一文件中已写入的视频流的首帧;并且根据待写入至第一文件的视频流的时长、源视频流的画面组的值,以及源视频流的帧率,确定待写入至第一文件的关键帧的数量。
在第二方面的第二种可选的实现方式中,上述确定模块具体用于确定模块,根据待写入至第一文件的视频流的时长、源视频流的画面组的值,以及源视频流的帧率,采用公式
将I
n的值四舍五入后确定为待写入至第一文件的关键帧的数量,其中,T为待写入至第一文件的视频流的时长,GOP为源视频流的画面组的值,FrameRate为源视频流的帧率。
在第二方面的第三种可选的实现方式中,上述确定模块还可以用于在读取模块读取第一视频帧之后,确定该第一视频帧是否为关键帧。
在第二方面的第四种可选的实现方式中,录像设备还可以包括创建模块,该创建模块可以用于在写数据模块将第一视频帧写入第一文件之后,创建第二文件;上述读取模块还可以用于读取第二视频帧;上述写数据模块还可以用于将第二视频帧写入第二文件。
在第二方面的第五种可选的实现方式中,上述写数据模块还可以用于在确定模块确定的待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为非关键帧的情况下,将第一视频帧写入第一文件;上述读取模块,还可以用于读取第二视频帧;上述写数据模块还可以用于将第二视频帧写入第一文件。
在第二方面的第六种可选的实现方式中,上述写数据模块还可以用于在待写入至第一文件的关键帧的数量大于1的情况下,将第一视频帧写入第一文件;上述读取模块还可以用于读取第二视频帧;上述确定模块还可以用于在读取模块读取的第二视频帧为关键帧的情况下,确定待写入至第一文件的关键帧的数量;上述写数据模块还可以用于在确定模块确定的待写入至第一文件的关键帧的数量等于1,并且在第二视频帧的下一帧为关键帧的情况下,将第二视频帧写入第一文件,并且录像设备停止向第一文件中写入视频帧。
在第二方面的第七种可选的实现方式中,上述写数据模块还可以用于在第一视频帧为目标视频流的首帧的情况下,直接将第一视频帧写入第一文件。
第三方面,本申请提供一种录像设备,该录像设备可以包括处理器和与该处理器耦合连接的存储器;该存储器用于存储计算机指令,当录像设备运行时,处理器执行存储器存储的计算机指令,以使得录像设备执行上述第一方面及其各种可选的实现方式中任意之一所述处理视频流的方法。
第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质可以包括计算机指令,当该计算机指令在录像设备上运行时,使得该录像设备执行第一方面及其各种可选的实现方式中任意之一所述处理视频流的方法。
第五方面,本申请提供一种包含指令的计算机程序产品,当该计算机程序产品在录像设备上运行时,使得录像设备执行第一方面及其各种可选的实现方式中任意之一所述的处理视频流的方法。
第二方面至第五方面的相关内容和技术效果的描述可以参见上述对第一方面及其各种可选的实现方式的相关内容和技术效果的相关描述,此处不再赘述。
具体实施方式
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本发明实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一视频帧和第二视频帧等是用于区别不同的视频帧,而不是用于描述视频帧的特定顺序;第一视频帧和第二视频帧等是区别不同的视频帧,而不是用于描述视频帧的特定顺序。
在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个子视频流是指两个或两个以上的子视频流;多个处理单元是指两个或两个以上的处理单元。
首先对本发明实施例提供的一种处理视频流的方法和装置中涉及的一些概念做解释说明。
帧内编码帧(intra picture):通常称为I帧,也称为关键帧。视频由连续多个画面组构成,画面组为一组连续的画面,包括多个视频帧,其中,I帧为一个画面组(group ofpictures,GOP)中的第一帧(即一组连续的视频帧组中的第一帧),I帧包括一个视频帧的完整数据(即完整的内容),经过视频压缩技术压缩后的I帧,在解码时,无需参考其他帧,根据该I帧即可解码,重构完整的视频帧,并且I帧是一个画面组中其他视频帧的参考帧,例如I帧的下一帧为前向预测编码帧(predictive frame)(通常称为P帧)或双向预测内插编码帧(bi-directional interpolated prediction frame)(通常称为B帧),在解码P帧或者B帧时,需要以I帧为参考帧,才可以解码得到完整的P帧或者B帧,其中,P帧和B帧均为差别帧(即包含P帧或者B帧与其他视频帧的差别,并不包含视频帧的完整的内容)。
本发明实施例提供的处理视频流的方法和装置,可以应用于录像设备录取视频的过程中,录像设备获取到视频流(可以称为待处理的视频流)之后,录像设备可以通过确定待处理的视频流中,待写入至一个文件的关键帧的数量,从而实现将待处理的视频流切分为多个子视频流,能够在一定程度上保证实际获得的子视频流的时长与预设的固定时长相等,从而有效减小处理视频流的过程中产生的误差。
本发明实例提供的录像设备可以为摄像机,或者具有录像功能的相机,或者具有录像功能的终端,例如手机、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobilepersonal computer,UMPC)、上网本或者个人数字助理(personal digital assistant,PDA)等。
示例性的,本发明实施例以录像设备为摄像机为例,介绍录像设备的硬件结构。下面结合图1具体介绍本发明实施例提供的摄像机的各个构成部件。如图1所示,本发明实施例提供的摄像机包括:音视频源10、音视频编码模块11、录像模块12、文件管理模块13、存储器14和输出接口15等部件。本领域技术人员可以理解,图1中示出的摄像机的结构并不构成对摄像机的限定,其可以包括比如图1所示的部件更多或更少的部件,或者可以组合如图1所示的部件中的某些部件,或者可以与如图1所示的部件布置不同。
音视频源10可以包括音视频俘获装置(例如,视频相机)、含有先前俘获的音视频数据的音视频存档、用以从音视频内容提供者接收音视频数据的音视频输入接口,及/或用于产生音视频数据的计算机图形系统,或上述音视频数据源的组合。
音视频源10可以包括图像传感器,图像传感器是摄像机的感光元件,即摄像机感光成像的部件,摄像机获取到光信号形式的视频数据之后,可以通过图像传感器将信号转变成电信号,以便于摄像机的其他部件处理该电信号的视频数据。目前数码摄像机的核心成像部件有两种:一种是广泛使用的电荷藕合器件(charge coupled device,CCD)的图像传感器;另一种是互补性氧化金属半导体(complementary metal-oxide semiconductor,CMOS)器件的图像传感器。
音视频编码器11可以包括音频编码模块111和视频编码模块112,音频编码模块111可以对音视频源10获取的音频数据进行编码转化为及其可以识别的代码,视频编码模块112可以根据编码标准(例如H.264)将音视频源10获取的视频数据经过编码后转化为机器可以识别的代码,以将视频数据压缩,有利于视频数据的传输和存储。
音视频编码器11可以为中央处理器(central processing unit,CPU),通用处理器,数字信号处理器(digital signal processor,DSP),专用集成电路(application-specific integrated circuit,ASIC),现场可编程门阵列(field programmable gatearray,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合,其可以实现或执行本发明实施例公开的内容所描述的各种示例性的逻辑方框,模块和电路;音视频编码器21也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
录像模块12可以包括数据缓冲器和其他功能模块,录像模块12将经视频编码模块编码后的视频数据缓存到数据缓冲器中,然后对该编码后的视频数据做相关处理(例如将数据缓冲器中的视频数据切分为多个视频数据片段)。
文件管理模块13可以用于管理视频数据,例如文件管理模块13可以对录像模块12处理后的视频数据命名,并且可以用于创建文件或者结束文件。
存储器14可用于存储软件程序以及模块,通过运行存储在存储器14的软件程序以及模块,从而执行摄像机的各种功能应用以及数据处理。存储器14可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据摄像机的使用所创建的数据(比如视频数据)等。此外,存储器14可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输出接口15可以为向其他设备发送数据的接口电路,输出接口15可以为收发器、收发电路等具有收发功能的结构,包括调制器/解调器(调制解调器)及/或发射器,在视频编解码系统中,输出接口15可以将编码并且处理后的视频数据发送给其他设备。
可选的,如图1所示的摄像机还可以包括文件封装模块、输入接口、无线保真(wireless gidelity,WiFi)模块、蓝牙模块等,在此不再赘述。
需要说明的是,本发明实施例中,源视频流包括视频数据部分和音频数据部分,下述实施例中提及的源视频流均指的是源视频流的视频数据部分,处理视频流也指的是处理视频流的视频数据部分。
下面对本发明实施例提供的处理视频流的方法做示例性的说明,如图2所示,本发明实施例提供的处理视频流的方法可以包括S101-S116:
S101、录像设备获取视频流。
S102、录像设备对其获取的视频流进行编码。
本发明实施例中,开启录像设备的录像功能之后,该录像设备可以录制视频流(即获取视频流),然后该录像设备对其获取的视频流进行编码,得到编码后的视频流(以下将编码后的视频流均简称为源视频流),即录像设备对其获取的视频流的所有视频帧进行编码。
可选的,本发明实施例中,可以由该录像设备的视频编码模块编码该录像设备获取的视频流,该录像设备可以采用不同的编码方式对视频流编码,视频数据的编码的格式可以为运动图像专家组(moving picture exports group,MPEG)规定的编码格式,例如,MPEG-1、MPEG-2或MPEG-4等;视频数据的编码格式也可以为H.26X系列的编码格式,例如,H.261、H.263、H.264等;视频数据的编解码格式还可以为其他的编码格式。
需要说明的是,本发明实施例中,可以根据实际使用需求选择视频流的编码格式,本发明实施例不作具体限定。
S103、录像设备将其编码后的视频流保存在该录像设备的缓冲器中。
本发明实施例中,可以将经录像设备的视频编码模块编码后的视频流(即源视频流)按帧暂时保存在该录像设备的数据缓冲器中,从而该录像设备处理该视频流时,该录像设备可以从缓冲器中读取编码后的视频流。
可选的,本发明实施例中,录像设备的缓冲器可以为环形缓冲器,采用环形缓冲器能够快速存取数据,并且能够简化数据的存取。录像设备的缓冲器也可以为其他非环形的缓冲器,本发明实施例不作限定。
S104、录像设备读取缓冲器的缓冲队列中的第一视频帧。
本发明实施例中,录像设备可以边获取视频流,边对视频流编码,并将该编码后的视频流(即源视频流)存入数据缓冲器中,然后,录像设备可以读取缓冲器中的源视频流(读取缓冲器的缓冲队列中的每一个视频帧),并将源视频流写入该录像设备创建的文件中,进而将该源视频流保存在该录像设备的存储介质中。
S105、录像设备确定第一视频帧是否为关键帧。
本发明实施例中,录像设备读取第一视频帧之后,该录像设备的关键帧管理器(也可以称为I帧管理器)可以确定第一视频帧是否为关键帧,具体的,本发明实施例中,在录像设备采用不同的编码格式对其获取的视频流的每一帧编码的过程中,可以在码流的指定字段写入不同的能够指示该视频帧的帧类型的标识,从而录像设备的I帧管理器可以根据该第一视频帧中指示该第一视频帧的帧类型的标识,确定第一视频帧的类型。
本发明实施例中,视频帧的帧类型可以包括I帧、P帧和B帧(关于I帧、P帧和B帧的相关解释可以参见上述实施例的相关描述),示例性的,在视频数据的编码过程中,可以将上述帧类型的标识设置为“00”,用于指示第一视频帧为关键帧,将帧类型的标识设置为“01”,用于指示第一视频帧为P帧,将帧类型的标识设置为“10”,用于指示第一视频帧为B帧。当然,本发明实施例还可以采用其他满足实际使用需求的标识来设置上述帧类型的标识,本发明实施例不再一一列举。
可选的,本发明实施例中,在录像设备编码对其获取的视频流的每一帧编码的过程中,可以在码流的指定字段设置关键帧标识,用于指示该视频帧是否为关键帧。示例性的,关键帧标识具体可以采用“0”或“1”来表示,例如,可以采用“0”表示第一视频帧为关键帧,也可以采用“1”表示该第一视频帧为关键帧。当然,本发明实施例还可以采用其他满足实际使用需求的标识来设置上述关键帧标识,本发明实施例不再一一列举。
需要说明的是,本发明实施例中,结合上述描述,如果采用“0”表示第一视频帧为关键帧,那么可以采用“1”表示第一视频帧为非关键帧;如果采用“1”表示第一视频帧为关键帧,那么可以采用“0”表示第一视频帧为非关键帧。
本发明实施例中,若录像设备确定第一视频帧为关键帧,则在S105之后,可以执行S106-S107,并根据实际情况执行S107之后的部分步骤;若该录像设备确定第一视频帧为非关键帧(即为P帧或B帧),则在S105之后,可以执行S116,具体见下述实施例的描述。
S106、若第一视频帧为关键帧,则录像设备确定待写入至第一文件的关键帧的数量。
其中,第一文件包括目标视频流,该目标视频流为源视频流中的一段视频流。
本发明实施例中,该录像设备可以将源视频流分为多个固定时长的视频流,写入多个文件中,即可以理解为:录像设备将其获取的视频流切分为多个视频流片段,写入多个文件中。具体的,录像设备可以边获取视频流,边向其创建的文件(例如第一文件)中写入经该录像设备编码后的视频流,如果录像设备确定第一视频帧为关键帧,则该录像设备确定待写入至第一文件的关键帧的数量,即确定当前还可以向第一文件中写入多少个关键帧。
可以理解的是,由于一个画面组中通常包括一个关键帧,因此,该录像设备确定待写入至第一文件的关键帧的数量,即就是确定待写入至第一文件的画面组的数量,该录像设备将完整的画面组写入第一文件,在该录像设备播放该第一文件时,或者当该录像设备将该第一文件发送给其他设备,其他设备播放该第一文件时,该录像设备或其他设备可以顺利解码该第一文件中的目标视频流,并且可以保证该目标视频流的播放质量比较好。
需要说明的是,本发明实施例中,上述固定时长可以为根据用户的需求设定的时长,例如可以为5分钟、10分钟等,本发明实施例不作具体限定。
本发明实施例中,录像设备确定出待写入至第一文件的关键帧的数量,从而该录像设备可以根据待写入至第一文件的关键帧的数量,更加准确地确定是否需要停止向第一文件中写入视频帧,保证目标视频流的时长与预设的固定时长相等。
S107、录像设备确定待写入至第一文件的关键帧的数量是否等于1。
需要说明的是,本发明实施例中,如果上述待写入至第一文件的关键帧的数量等于1,那么在S107之后,可以执行S108,以及S108之后的部分步骤(例如S109或S110-S112);如果待写入至第一文件的关键帧的数量大于1,那么在S107之后,可以执行S113-S115。
S108、若待写入至第一文件的关键帧的数量等于1,则录像设备确定第二视频帧是否为关键帧。
本发明实施例中,当待写入至第一文件的关键帧的数量等于1时,录像设备再确定第一视频帧的下一帧(即第二视频帧)是否为关键帧,并根据确定结果,是否停止向第一文件中写入视频帧。
S109、在待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为关键帧的情况下,该录像设备将第一视频帧写入第一文件,并且录像设备停止向第一文件中写入第二视频帧,其中,第二视频帧为第一视频帧的下一帧。
本发明实施例中,待写入至第一文件的关键帧的数量等于1,说明在录像设备读取第一视频帧所在的画面组的所有视频帧,并将该画面组的所有视频帧写入第一文件之后,该录像设备可以停止向第一文件中写入视频帧。具体的,如图3所示,Trec表示需写入至第一文件的目标视频流的时长,即预设的固定时长,Tdiff表示已写入至第一文件的视频流的时长,帧1为当前读取的第一视频帧,帧2表示第一视频帧的下一帧。结合图3,若待写入至第一文件的关键帧的数量等于1,则说明该录像设备当前读取的第一视频帧(即图3中的帧1)所在的画面组为需写入至第一文件的最后一个画面组;并且若第一视频帧的下一帧(即第二视频帧,图3中的帧2)为关键帧,则说明第一视频帧为需写入至第一文件的最后一个画面组的最后一帧,该录像设备将第一视频帧写入第一文件之后,该录像设备停止向第一文件中写入该第二视频帧。至此,该录像设备处理完成源视频流中的目标视频流,得到写入了目标视频流的第一文件。
需要说明的是,本发明实施例中,录像设备获取视频流之后,录像设备分别对视频流中的视频数据(即上述的源视频流)和音频数据编码,录像设备将上述目标视频流写入第一文件中的同时,在录像设备确定停止向第一文件中写入视频帧时,该录像设备将目标视频流对应的音频数据流(第一音频流)也写入第一文件中,具体的,录像设备向第一文件写入最后一个视频帧(需写入至第一文件的最后一个视频帧)时,录像设备将第一文件的首帧至该最后一个视频帧对应的第一音频流写入第一文件,并且停止向第一文件中写入音频流。
可选的,本发明实施例中,录像设备处理源视频流,得到写有目标视频流和音频流的第一文件之后,该录像设备可以为该第一文件命名,并且封装该第一文件中的视频流和音频流,得到封装后的第一文件,以及将该封装后的第一文件保存在该录像设备的存储介质(例如存储卡)中。
具体的,录像设备可以为第一文件命名,例如将该第一文件命名为“001”或“vedio1”等,并且可以确定该命名的第一文件保存在哪一个目录下,例如,将第一文件保存在存储卡的Data(假如录像设备的存储卡中存在Data这个目录)目录下。录像设备封装该第一文件,是指将第一文件中的目标视频流(已编码)和第一音频流(已编码)封装为某一种音视频文件格式。例如,视频流常用的编码格式有MPEG-1、MPEG-2、MPEG-4、H.261、H.263以及H.264等,音频流常用的编码格式有脉冲代码调制编码(pulse code modulation,PCM)格式、动态影像专家压缩标准音频层面3(moving picture experts group audio layerIII,MP3)格式以及高级音频编码(advanced audio coding,AAC)格式,常用的音视频文件封装格式有音频视频交错(audio video interleaved,AVI)、流媒体(flash video,FLV)格式、实媒体播放可变比特率(real media variable bitrate,RMVB)格式和Windows媒体视频(windows media video,WMV)格式等。示例性的,根据音视频文件的封装规定,可以将格式为H.264的目标视频流和格式为MP3的第一音频流,封装为格式为AVI的音视频文件,得到封装后的第一文件。
S110、在待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为非关键帧的情况下,该录像设备将第一视频帧写入第一文件。
本发明实施例中,待写入至第一文件的关键帧的数量等于1,说明在录像设备读取第一视频帧所在的画面组的所有视频帧,并将该画面组的所有视频帧写入第一文件之后,该录像设备可以停止向第一文件中写入视频帧。具体的,如图4所示,Trec表示需写入至第一文件的目标视频流的时长,即预设的固定时长,Tdiff表示已写入至第一文件的视频流的时长,帧1表示当前读取的第一视频帧,帧2表示第一视频帧的下一帧。结合图4,若待写入至第一文件的关键帧的数量等于1,则说明该录像设备当前读取的第一视频帧(即图4中的帧1)所在的画面组为需写入至第一文件的最后一个画面组;并且若第一视频帧的下一帧(即上述的第二视频帧,图4中的帧2)为非关键帧,则说明第一视频帧并不是需写入至第一文件的最后一个画面组的最后一帧,该第一视频帧为该最后一个画面组的最后一个视频帧之前的视频帧,该录像设备将该第一视频帧写入第一文件之后,继续向第一文件中写入第一视频帧之后的视频帧(例如图4中的帧2)。
S111、录像设备读取第二视频帧。
S112、录像设备将第二视频帧写入第一文件。
本发明实施例中,由于上述第一视频帧的下一帧,即第二视频帧为非关键帧,说明在将第一视频帧写入第一文件之后,还需要继续向第一文件中写入视频帧,以保证向第一文件中写入与预设的固定时长相等的视频流,因此,在录像设备将第一视频帧写入第一文件之后,该录像设备继续读取第二视频帧,并且将该第二视频帧写入第一文件,同时该录像设备可以判断第二视频帧的下一帧是否为关键帧,如果第二视频帧的下一帧为关键帧,那么录像设备将第二视频帧写入第一文件之后,录像设备停止向第一文件写入视频帧,如果第二视频帧的下一帧为非关键帧,那么录像设备继续将第二视频帧写入第一文件,如此,直至录像设备当前读取的视频帧的下一帧为关键帧,该录像设备将其读取的视频帧写入第一文件之后,该录像设备停止向第一文件中写入视频帧。
本发明实施例中,在待写入至第一文件的关键帧的数量大于1的情况下,录像设备可以执行下述S113-S115:
S113、在待写入至第一文件的关键帧的数量大于1的情况下,录像设备将第一视频帧写入第一文件。
本发明实施例中,待写入至第一文件的关键帧的数量大于1,说明在录像设备读取第一视频帧所在的画面组的所有视频帧,并将该画面组的所有视频帧写入第一文件之后,该录像设备还需要继续读取至少一个画面组的视频帧,并将其读取的至少一个画面组的所有视频帧写入第一文件之后,该录像设备可以停止向第一文件中写入视频帧。如图5所示,Trec表示需写入至第一文件的目标视频流的时长,即预设的固定时长,Tdiff表示已写入至第一文件的视频流的时长,帧1表示当前读取的第一视频帧,画面组1为帧1所在的画面组(其中,图5所示的帧1可以为画面组1中任意一个视频帧),画面组2表示画面组1的下一个画面组,帧2表示画面组2中的关键帧,画面组3表示画面组2的下一个画面组,帧3表示画面组3中的关键帧。结合图5,若待写入至第一文件的关键帧的数量为3,则说明该录像设备将当前读取的第一视频帧(即图5中的帧1)写入第一文件,并且将第一视频帧所在的画面组(即图5中的画面组1)的所有视频帧写入第一文件,并且该录像设备还需要将如图5所示的关键帧帧2以及帧2所在的整个画面组2的所有视频帧,关键帧帧3以及帧3所在的画面组3的所有视频帧写入第一文件之后,该录像设备停止向第一文件中写入视频帧。
S114、录像设备读取第二视频帧。
S115、录像设备确定第二视频帧是否为关键帧。
本发明实施例中,在待写入至第一文件的关键帧的数量大于1的这种情况下,录像设备将其读取的第一视频帧写入第一文件之后,该录像设备继续读取第一视频帧的下一个视频帧,即第二视频帧,然后该录像设备可以确定第二视频帧是否为关键帧,并进一步确定在该录像设备将第二视频帧写入第一文件之后,该录像设备是否可以停止向第一文件中写入视频帧。
需要说明的是,本发明实施例中,录像设备确定第二视频帧是否为关键帧的方法与该录像设备确定上述第一视频帧是否为关键帧的方法相同,对于S115的具体描述可以参见上述实施例中对于S105的相关描述,此处不再赘述。
可以理解的是,本发明实施例中,通过上述S115,录像设备可以确定第二视频帧为关键帧,或者确定第二视频帧为非关键帧,并且在S115之后,录像设备根据第二视频帧是否为关键帧,确定是否停止向第一文件中写入视频帧的方法与录像设备根据第一视频帧是否为关键帧,确定是否停止向第一文件中写入视频帧的方法相同,对于S115之后的相关过程的描述具体可以参见上述实施例中S105之后的步骤的相关描述(例如,上述S106-S107,以及S107之后的部分步骤),此处不再赘述。
本发明实施例中,如图2所示,录像设备通过上述S105确定第一视频帧为非关键帧,本发明实施例提供的处理视频流的方法还可以包括:
S116、若第一视频帧为非关键帧,则录像设备将该第一视频帧写入第一文件。
本发明实施例中,录像设备确定第一视频帧为非关键帧,则该录像设备将该第一视频帧写入第一文件,然后该录像设备继续从录像设备的缓冲器的缓存队列中读取下一帧(即第一视频帧的下一帧),并按照上述S105的方法,确定该第一视频帧的下一帧是否关键帧。
具体的,若第一视频帧的下一帧为关键帧,录像设备确定待写入至第一文件的关键帧的数量,并根据关键帧的数量确定是否停止向第一文件中写入视频帧,即录像设备将第一视频帧的下一帧作为第一视频帧,执行上述S106-S107,并根据实际情况执行S107之后的部分步骤,以完成视频流的处理;若该下一帧仍为非关键帧,则录像设备继续将该下一帧写入第一文件中。
本发明实施例提供的处理视频流的方法,录像设备读取缓存队列中的第一视频帧,并且该第一视频帧为关键帧时,录像设备确定待写入至第一文件的关键帧的数量,以及在待写入至第一文件的关键帧的数量等于1,并且在第一视频帧的下一帧(即上述的第二视频帧)为关键帧的情况下,该录像设备将该第一视频帧写入第一文件,并且该录像设备停止向第一文件中写入视频帧,其中,第一文件包括目标视频流,目标视频流为待处理的视频流中的一段视频流。与现有技术相比,本发明实施例中,由于录像设备在确定第一视频帧为关键帧的情况下,可以确定待写入至第一文件的关键帧的数量,然后根据关键帧的数量确定是否停止向第一文件中写入视频帧,得到第一文件,能够在一定程度上保证第一文件中目标视频流的时长与预设的固定时长相等,因此能够有效减小处理视频流的过程中产生的误差。
结合图2,如图6所示,上述S106(即确定待写入至第一文件的关键帧的数量)具体可以通过S106a-S106b实现:
S106a、录像设备根据第一视频帧的PTS值、第三视频帧的PTS值,以及目标视频流的时长,确定待写入至第一文件的视频流的时长。
其中,第三视频帧为第一文件中已写入的视频流的首帧。
本发明实施例中,录像设备在录制视频流的过程中,视频流的每一帧可以携带各自的PTS,录像设备读取的第一视频帧为关键帧时,录像设备确定待写入至第一文件的视频流的时长(可以理解为,录像设备可能已经向第一文件中写入了部分视频流,读取第一视频帧之后,该录像设备还需向第一文件中写入的视频流的时长)。具体的,待写入至第一文件的视频流的时长=目标视频流的时长-(第一视频帧的PTS值-第三视频帧的PTS值)。
示例性的,如图7所示,Trec表示需写入至第一文件的目标视频流的时长,即预设的固定时长,PTS_current表示第一视频帧的PTS值,PTS_first表示第三视频帧的PTS值,用Trest表示待写入至第一文件的关键帧的数量,采用下述公式(1)确定待写入至第一文件的视频流的时长:
Trest=Trec-(PTS_current-PTS_first) (1)
S106b、录像设备根据待写入至第一文件的视频流的时长、源视频流的画面组的值,以及源视频流的帧率,确定待写入至第一文件的关键帧的数量。
本发明实施例中,通过上述S106a确定出待写入至第一文件的视频流的时长之后,录像设备可以采用下述公式,确定待写入至第一文件的关键帧的数量:
其中,Trest表示待写入至第一文件的视频流的时长,GOP/FrameRate表示一个画面组所占的时长,GOP表示一个画面组的值(即一个画面组包含的视频帧的数量),FrameRate表示源视频流的帧率。
需要说明的是,本发明实施例中,采用上述公式(1)和(2)得到的In可能不是正整数,可以对In做四舍五入,将四舍五入后的In作为待写入至第一文件的关键帧的数量,并根据待写入至第一文件的关键帧的数量可以准确地确定,在何种情况下可以停止向第一文件中写入视频帧,如此能够保证第一文件中目标视频流的时长与预设的固定时长相等。
本发明实施例中,在录像设备确定第一视频帧为关键帧的情况下,该录像设备按照上述方法确定待写入至第一文件的关键帧的数量,在该录像设备确定第一视频帧为非关键帧的情况下,该录像设备直接将第一视频帧写入第一文件,无需确定待写入至第一文件的关键帧的数量,如此可以降低处理视频流的过程中的计算量。
可选的,结合图2,如图8所示,本发明实施例中,上述在待写入至第一文件的关键帧的数量等于1,并且在第二视频帧为关键帧的情况下,录像设备执行S109(录像设备将第一视频帧写入第一文件,并停止向第一文件中写入第二视频帧)之后,本发明实施例提供的处理视频流的方法还可以包括S117-S119:
S117、录像设备创建第二文件。
本发明实施例中,录像设备将其缓存队列中待处理的视频流的一段视频流,即目标视频流,写入第一文件之后,若该录像设备的缓存队列中还存在视频流,则该录像设备继续创建新的文件(以下均称为第二文件),该第二文件包括缓存队列中的视频流(即目标视频流之后的一段视频流)。
S118、录像设备读取第二视频帧。
S119、录像设备将第二视频帧写入第二文件。
本发明实施例中,录像设备创建第二文件之后,该录像设备读取缓存队列中的第二视频帧(即上述第一视频帧的下一帧),并确定该第二视频帧是否为关键帧,并且进一步确定将第二视频帧写入第二文件之后,该录像设备是否停止向第二文件中写入视频帧。
具体的,本发明实施例中,录像设备将第二视频帧写入第二文件的方法,与该录像设备将第一视频帧写入第一文件的方法类似,对于录像设备将第二视频帧写入第二文件的过程的具体描述,可以参见上述S105-S116的相关描述,此处不再赘述。
上述主要从录像设备的角度对本发明实施例提供的方案进行了介绍。可以理解的是,录像设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本发明实施例可以根据上述方法示例对录像设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图9示出了上述实施例中所涉及的录像设备的一种可能的结构示意图,如图9所示,录像设备可以包括:读取模块20、确定模块21和写数据模块22。读取模块20可以用于支持录像设备执行上述方法实施例中的S104、S111、S114和S118;确定模块21可以用于支持录像设备执行上述方法实施例中的S105、S106(包括S106a-S106b)、S107、S108和S115;写数据模块22可以用于支持录像设备执行上述方法实施例中的S109、S110、S112、S113、S116和S119。可选的,如图9所示,该录像设备还可以包括文件管理模块23、获取模块24、编码模块25、存储模块26。文件管理模块23可以用于支持录像设备执行上述方法实施例中的S117;获取模块24可以用于支持录像设备执行上述方法实施例中的S101;编码模块25可以用于支持录像设备执行上述方法实施例中的S102;存储模块26可以用于支持录像设备执行上述方法实施例中的S103。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
在采用集成的单元的情况下,图10示出了上述实施例中所涉及的录像设备的一种可能的结构示意图。如图10所示,录像设备可以包括:处理模块30和通信模块31。处理模块30可以用于对录像设备的动作进行控制管理,例如,处理模块30可以用于支持录像设备执行上述方法实施例中的S101、S102、S104-S119,其中S106包括S106a和S106b,和/或用于本文所描述的技术的其它过程。通信模块31可以用于支持录像设备与其他网络实体的通信。可选的,如图10所示,该录像设备还可以包括存储模块32,用于存储录像设备的程序代码和数据,例如,存储模块32可以用于支持路线设备执行上述方法实施例中的S103。
其中,处理模块30可以是处理器或控制器(例如可以是上述如图1所示的音视频编码模块11),例如可以是CPU、通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明实施例公开内容所描述的各种示例性的逻辑方框、模块和电路。上述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块31可以是收发器、收发电路或通信接口等(例如可以是上述如图1所示的输出接口15)。存储模块32可以是存储器(例如可以是上述如图1所示的存储器14)。
当处理模块30为处理器,通信模块31为收发器,存储模块32为存储器时,处理器、收发器和存储器可以通过总线连接。总线可以是外设部件互连标准(peripheralcomponent interconnect,PCI)总线或扩展工业标准结构(extended Industry standardarchitecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本发明实施例中的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))方式或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如,软盘、磁盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state drives,SSD))等。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。