掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及视频处理技术领域,具体涉及视频播放方法、装置、电子设备及存储介质。

背景技术

近些年来,信息化技术高速发展,适用于远程会议的终端也得到了广泛应用,从传统的在同一个物理会议室到现在的不受物理空间限制的远程会议,体现了近年来国家对于信息技术发展的重视程度,这些发展给人们的工作和生活带来了更多的便利性。

但在编解码和传输过程中,会不可避免的造成码流的抖动现象,会造成忽快忽慢的卡顿现象。首先在视频会议的远端编码和本端解码时,由于设备性能的原因,会导致每帧的时间不相等,比如60帧的视频,每帧的时间间隔应该16.67ms,但如图1所示,由于编解码器的不稳定,编码出来的间隔在10-90ms之间,解码出来的间隔在1-100ms之间,甚至如图3所示的更多。虽然按照每秒来统计总帧率是60帧,但由于各帧间间隔差异过大,在播放时会有较为明显的卡顿,忽快忽慢的效果。其次在网络传输过程中,由于网络状态不可控,通常收到的每一帧的时间间隔都是不平稳的,尤其是I帧的时候,在较差的时候甚至抖动都能达到10-70ms之间,甚至是如图2所示的更多。

既然抖动不可避免,那么如何消化这些抖动带来的不平滑播放就变得至关重要了。

发明内容

有鉴于此,本发明实施例提供了一种视频播放方法、装置、电子设备及存储介质,以解决因抖动所带来的视频播放时不平滑的问题。

根据第一方面,本发明实施例提供了一种视频播放方法,包括:

获取当前帧率,以确定当前帧处理基准值;

获取帧缓冲区内视频帧的数量,并基于所述视频帧的数量与预设数量的大小关系,确定当前帧处理校正值;

基于所述当前帧处理基准值与所述当前帧处理校正值之和,确定当前帧处理间隔;

基于所述当前帧处理间隔从所述帧缓冲区中提取当前帧进行目标处理,以播放处理后的视频帧,所述目标处理包括解码处理和/或播放处理。

本发明实施例提供的视频播放方法,利用帧缓冲区进行目标处理前的帧缓冲,同时在提取当前帧时结合帧缓冲区内视频帧的数量与预设数量的大小关系确定帧处理校正值,保证所得到的当前帧处理间隔能够符合帧缓冲区内的实际缓存情况,并基于当前帧处理间隔从帧缓冲区内提取当前帧进行目标处理,以保证相邻两帧之间的目标处理时间间隔是在可控范围内,达到了播放流畅的目的。

在一些实施方式中,所述基于所述视频帧的数量与预设数量的大小关系,确定当前帧处理校正值,包括:

计算所述视频帧与所述预设数量的差值,确定数量差;

当所述数量差小于零时,将大于零的第一校正值确定为所述当前帧处理校正值;

当所述数量差大于零时,将小于零的第二校正值确定为所述当前帧处理校正值。

本发明实施例提供的视频播放方法,在数量差小于零的情况下,表示帧缓存区内的视频帧数量较少需要进行慢处理,因此将大于零的第一校正值作为当前帧处理校正值;在数量差大于零的情况下,表示帧缓存区内的视频帧数量较多需要进行快处理,因此将小于零的第二校正值作为当前帧处理校正值。通过上述两种情况实现慢处理或快处理,以保证任意相邻两帧之间的目标处理时间间隔在可控范围内。

在一些实施方式中,所述当所述数量差小于零时,将大于零的第一校正值确定为所述当前帧处理校正值,包括:

当所述数量差大于第一数值且小于零时将大于零的第一子校正值确定为所述当前帧处理校正值,当所述数量差小于或等于所述第一数值时将大于所述第一子校正值的第二子校正值确定为所述当前帧处理校正值;

和/或,

所述当所述数量差大于零时,将大于零的第一校正值确定为所述当前帧处理校正值,包括:

当所述数量差大于零且小于第二数值时将小于零的第三子校正值确定为所述当前帧处理校正值,当所述数量差大于或等于所述第二数值时将小于所述第三子校正值的第四子校正值确定为所述当前帧处理校正值。

本发明实施例提供的视频播放方法,在数量差大于零的情况以及数量差小于零的情况,均分为不同的时间阈值进行处理校正值的处理,实现精细化的时间控制,进一步保证了视频播放的流畅性。

在一些实施方式中,所述基于所述当前帧处理间隔从所述帧缓冲区中提取当前帧进行目标处理,以对处理后的视频帧进行播放,包括:

获取所述目标处理的起始时间以及上一帧的处理相对时间,所述处理相对时间是对所述目标处理的第一帧到所述上一帧之间的帧处理间隔进行累加后得到的;

将当前帧处理间隔累加至所述上一帧的处理相对时间中,得到当前帧的处理相对时间;

将所述起始时间与所述当前帧的处理相对时间进行累加,得到所述当前帧的目标处理时间;

当当前时间达到所述当前帧的目标处理时间时,从所述帧缓冲区中提取当前帧进行所述目标处理,以对处理后的视频帧进行播放。

本发明实施例提供的视频播放方法,由于起始时间是一个固定的时间值,以目标处理的起始时间以及处理相对时间的累加进行目标处理的时机判断,保证了目标处理的时机的准确性。

在一些实施方式中,在所述目标处理为解码处理的情况下,所述获取目标处理的起始时间,包括:

判断所述视频帧的帧编号是否连续;

当所述帧编号不连续时,将第一次出现不连续帧编号的视频帧的时间确定为所述目标处理的起始时间。

本发明实施例提供的视频播放方法,以视频帧的帧编号的连续性确定是否是新一次的解码处理,简化了起始时间的确定可靠性。

在一些实施方式中,所述方法还包括:

判断帧控时间是否异常,所述帧控时间包括所述当前时间、所述起始时间以及所述处理相对时间中的至少之一;

当所述帧控时间异常时,重置所述起始时间以及所述处理相对时间。

本发明实施例提供的视频播放方法,在帧控时间异常的情况下,对起始时间以及处理相对时间进行重置,而重置处理并不会影响目标处理的时机,在不影响目标处理的情况下,提高了目标处理的可靠性。

在一些实施方式中,在所述目标处理为解码处理的情况下,所述获取当前帧率包括:

判断开始解码的时间是否超过预设时间;

当开始解码的时间未超过所述预设时间时,将预设帧率确定为所述当前帧率。

本发明实施例提供的视频播放方法,在未达到预设时间时,表示此时无法进行帧率的统计,在此情况下将预设帧率确定为当前帧率,以保证目标处理的正常进行。

根据第二方面,本发明实施例还提供了一种视频播放装置,包括:

第一获取模块,用于获取当前帧率,以确定当前帧处理基准值;

第二获取模块,用于获取帧缓冲区内视频帧的数量,并基于所述视频帧的数量与预设数量的大小关系,确定当前帧处理校正值;

确定模块,用于基于所述当前帧处理基准值与所述当前帧处理校正值之和,确定当前帧处理间隔;

处理模块,用于基于所述当前帧处理间隔从所述帧缓冲区中提取当前帧进行目标处理,以播放处理后的视频帧,所述目标处理包括解码处理和/或播放处理。

根据第三方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的视频播放方法。

根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的视频播放方法。

需要说明的是,本发明实施例提供的视频播放装置、电子设备及计算机可读存储介质的相应有益效果,请参见上文视频播放方法的对应有益效果的描述,在此不再赘述。

附图说明

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

图1是编码每帧时间间隔统计的示意图;

图2是解码前收到每帧时间间隔统计的示意图;

图3是解码每帧时间间隔的示意图;

图4是解码后平滑处理的时间间隔统计的示意图;

图5是根据本发明实施例的视频播放方法的流程图;

图6是根据本发明实施例的视频播放方法的流程图;

图7是根据本发明实施例的视频播放方法的流程图;

图8是根据本发明实施例的视频播放方法的流程图;

图9是根据本发明实施例的视频播放处理后的时间间隔统计的示意图;

图10是根据本发明实施例的视频播放装置的结构框图;

图11是本发明实施例提供的电子设备的硬件结构示意图。

具体实施方式

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

在相关技术中,对于视频播放的处理是采用被动缓冲机制,在接收码流处添加一层缓冲,当某一时间接收过多时,为了避免解码失败导致丢帧,把帧放入缓冲区中;当接收过慢时,不做过多处理。这种方法更多的是抗丢包,而不能很好的抗抖动。另外上述方法有两个缺点,一是虽然可以避免帧来的过快时,不会丢包,但会快播。而当帧来的过慢时,即会出现无帧可播放的情况,造成卡顿。二是只在接收处添加缓冲,只能作用于编码和网络带来的抖动,对解码带来的抖动毫无作用。

基于此,本发明实施例提供的视频播放方法适用于:编解码和播放的帧率能达到预设帧率,但还是存在视频卡顿现象。需要说明的是,本文并非解决由于编解码或输出帧率不足导致的卡顿。

具体地,视频会议系统至少会包含远端和本端两部分,远端将摄像头采集到的视频进行编码,而后通过网络发送到本端后,在本端进行视频的解码,而后将解码后的视频给到播放模块进行播放。这中间有不止一种因素会造成抖动,本发明实施例提供的视频播放方法,主要是在处理链的接收端做处理,使视频可以较为流畅的播放。

若要视频流畅的播放,假设视频的帧率是60帧,那么每一帧的播出时间应为1000ms/60=16.67ms,如能精确控制每帧播出的时间间隔为16.67ms,那么视频必然是流畅的。然而,在非实时操作系统中,想严格精确的控制每帧播放的时间是不现实的,那么就需要尽量的去平滑这个时间,使每帧的时间差值在可接受的范围内,以使人眼看不出不平滑即可。基于这个思想,在本发明实施例提供的方案中,添加帧缓冲区的概念,在对当前帧进行目标处理之前添加帧缓冲区。其中,目标处理可以是解码处理与播放处理中的至少之一。即,可以仅在解码前添加帧缓冲区,也可以仅在播放前添加帧缓冲区,或者在解码前以及播放前均添加帧缓冲区。

需要说明的是,本发明实施例中的解码的定义是包括解码前的平滑处理以及解码处理;播放的定义是包括播放前的平滑处理以及播放处理。

例如,若在解码前添加帧缓冲区,则将其称之为解码缓冲区。由上文所述,在码流在到达解码器工序时,此时的码流的队形早已不能保持,而是有快有慢,成群结队的到来,这并不是播放端所希望的。播放端所希望的是每一帧是按照固定的时间间隔到来的,所以添加解码前帧缓冲区来强制其重新保持队形。具体为:拿到待解码的帧后,并不直接送到解码器,而是首先放入解码缓冲区,加入时间控制手段,使得从解码帧缓冲区中出来的每帧间的时间间隔的差值在预设时间以内,再送入解码器。其中,预设时间间隔是根据实际需求进行设置的,在此对其并不做任何限定。

若在播放前添加帧缓冲区,则将其称之为播放缓冲区。由于播放端中多个任务/进程在同时运行,同一个进程中又有多个线程在同时运行,播放端的繁忙和解码器本身的原因,导致了解码器解码一帧所花的时间也并不平均,解码一帧的时间间隔甚至能从1ms到40ms之间,和预设时间相差甚大,这样的时间差已经能使人眼看出卡顿的存在,影响了体验效果。所以在解码后也并不直接送给播放模块,而是放入到播放缓冲区中,加入时间控制手段,使得从帧缓冲区中出来的每帧间的时间间隔的差值在预设时间以内,再送入播放模块。

本发明实施例提供的视频播放方法采用多级缓冲,在延时可控可接受的情况下,较大程度的优化了流畅度指标,较大程度的提升了整体的体验。

根据本发明实施例,提供了一种视频播放方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

在本实施例中提供了一种视频播放方法,可用于电子设备,如电脑、移动终端等,图5是根据本发明实施例的视频播放方法的流程图,如图5所示,该流程包括如下步骤:

S11,获取当前帧率,以确定当前帧处理基准值。

如上文所述,若要视频流畅的播放,假设视频的帧率是60帧,那么每一帧的播出时间应为1000ms/60=16.67ms。基于此,将16.67ms称之为帧处理基准值。

其中,帧率检测是实时检测的。但是,需要说明的是,由于该电子设备仅支持几种特定的帧率,所以在帧率检测逻辑上,是有一定的窗口检测的,所以并不会出现帧率来回跳变的情况。

S12,获取帧缓冲区内视频帧的数量,并基于视频帧的数量与预设数量的大小关系,确定当前帧处理校正值。

在接收到视频帧之后,将视频帧加入帧缓冲区内,每次在进行目标处理之前,均要进行当前帧处理校正值的计算。当前帧处理校正值的确定原理是:根据帧缓冲区内视频帧与预设数量的大小关系确定当前帧处理校正值的大小。若视频帧的数量大于预设数量,说明存在帧积压的情况,需要加快处理,相应地,就需要在帧处理基准值的基础上通过数值减小以减小帧处理间隔,基于此,当前帧处理校正值就需要小于零;反之,当前帧处理校正值就需要大于零。

若帧缓冲区内视频帧的数量与预设数量一致,则表示当前帧处理基准值合适,基于此,当前帧处理校正值为零。

当然,上述对于当前帧处理校正值的设置仅仅是一种示例,具体还需要根据实际需求进行设置。

S13,基于当前帧处理基准值与当前帧处理校正值之和,确定当前帧处理间隔。

当前帧处理基准值是基于当前帧率确定的,当前帧处理校正值基于帧缓冲区内视频帧的数量与预设数量的大小关系确定的。在此基础上,当前帧处理间隔为当前帧处理基准值与当前帧处理校正值之和。

例如,帧缓冲区内的视频帧依据其先后顺序分别为视频帧1~视频帧5。那么,当前帧为帧缓冲区内的第一个视频帧,即视频帧1。

在从帧缓冲区内提取出视频帧1之前的视频帧0之后,开始对于当前帧的时间控制。即,确定当前帧处理基准值以及确定当前帧处理校正值,再将这两相加得到当前帧处理间隔。

继续沿用上述示例,当前帧处理间隔为提取视频帧1与提取视频帧0之间的时间间隔。

S14,基于当前帧处理间隔从帧缓冲区中提取当前帧进行目标处理,以播放处理后的视频帧。

其中,所述目标处理包括解码处理和/或播放处理。

继续沿用上述示例,可以是每次从帧缓冲区内提取视频帧时均记录提取时间戳,并进行计时。将计时时间与计算得到当前帧处理时间间隔进行比较,若计时时长达到当前帧处理时间间隔,则表示到达当前帧的提取时间,从帧缓冲区内提取出当前帧进行目标处理。在对当前帧进行目标处理之后,以播放处理后的视频帧。

如上文所述,目标处理可以是解码处理,也可以是播放处理,也可以是解码处理以及播放处理。相应地,在解码之前添加解码帧缓冲区,对解码帧缓冲区内的视频帧进行时间控制,即在解码前就使用前述步骤的方法对视频帧进行平滑处理,然后对经过上述步骤平滑处理的视频帧进行解码,最后对解码后的视频帧直接进行播放;或者,在播放之前设置播放帧缓冲区,对播放帧缓冲区的视频帧进行时间控制,即在播放前,使用前述步骤的方法对解码后的视频帧进行平滑处理,然后对经过上述步骤平滑处理的视频帧进行播放;或者,分别设置解码帧缓冲区以及播放帧缓冲区,分别进行时间控制;即先在解码前采用前述步骤的方法对视频帧进行平滑处理,然后对处理后的视频帧进行解码,经过平滑处理的视频帧在经过解码后并不是直接进行播放,而是在播放前也采用前述步骤的方法进行平滑处理,然后再对经过平滑处理的视频帧进行播放,实现了视频帧播放过程中在解码前和播放前的两次平滑处理。

以目标处理为解码处理和播放处理为例,分别设置解码帧缓冲区以及播放帧缓冲区,相应地,对应于解码处理的预设数量称之为第一预设数量,所得到的当前帧处理校正值为当前帧处理第一校正值;对应于播放处理的预设数量称之为第二预设数量,所得到的当前帧处理校正值为当前帧处理第二校正值。

具体是在解码之前,还是播放之前进行帧缓冲区的设置,是根据实际需求进行的,在此对其并不做任何限定。

本实施例提供的视频播放方法,利用帧缓冲区进行目标处理前的帧缓冲,同时在提取当前帧时结合帧缓冲区内视频帧的数量与预设数量的大小关系确定帧处理校正值,保证所得到的当前帧处理间隔能够符合帧缓冲区内的实际缓存情况,并基于当前帧处理间隔从帧缓冲区内提取当前帧进行目标处理,以保证相邻两帧之间的目标处理时间间隔是在可控范围内,达到了播放流畅的目的。

在本实施例中提供了一种视频播放方法,可用于电子设备,如电脑、移动终端等,图6是根据本发明实施例的视频播放方法的流程图,如图6所示,该流程包括如下步骤:

S21,获取当前帧率,以确定当前帧处理基准值。

对于解码之前的帧控制而言,当前帧率可以通过实时检测得到的;若同时设置有播放之前的帧控制,则可以将解码之前确定出的当前帧率应用到播放之前的帧控制中。

在目标处理为解码处理的情况下,获取当前帧率包括:

(1)判断开始解码的时间是否超过预设时间。

(2)当开始解码的时间未超过预设时间时,将预设帧率确定为当前帧率。

预设时间为能够确定帧率的时间间隔,例如,1S。若开始解码的时间未达到预设时间,则将预设帧率确定为当前帧率。若开始解码的时间达到了预设时间,则一段时间内接收到的视频帧的数量进行统计,并基于统计结果确定当前帧率。例如,统计1S内接收到的视频帧的数量,将该数量作为当前帧率。

在未达到预设时间时,表示此时无法进行帧率的统计,在此情况下将预设帧率确定为当前帧率,以保证目标处理的正常进行。

其余详细请参见图5所示实施例的S11,在此不再赘述。

S22,获取帧缓冲区内视频帧的数量,并基于视频帧的数量与预设数量的大小关系,确定当前帧处理校正值。

具体地,上述S22包括:

S221,获取帧缓冲区内视频帧的数量。

对于帧缓冲区而言,可以设置有计数器,新加入一帧视频帧,则计数结果加1;新提取一帧视频帧,则计数结果减1。通过该计数结果,即可确定出帧缓冲区内视频帧的数量。

S222,计算视频帧与预设数量的差值,确定数量差。

预设数量是根据实际需求进行设置的,例如,对于解码前设置的解码帧缓冲区,其预设数量设置为1或3或4等等;对于播放前设置的播放帧缓冲区,其预设数量设置为5或6等等。针对目标处理的不同,分别设置不同的预设数量,以满足不同的处理需求。

计算视频帧与预设数量的差值得到数量差,该数量差能够表征出帧缓冲区的当前状态。其中,当前状态包括帧过多、正常以及帧过少。

S223,当数量差小于零时,将大于零的第一校正值确定为当前帧处理校正值。

S224,当数量差大于零时,将小于零的第二校正值确定为当前帧处理校正值。

数量差小于零,表示帧缓冲区内的视频帧数量低于预设数量,此时需要执行慢播放。即,需要在当前帧处理基准值的基础上,延迟当前帧处理校正值后播放。既然要实现延迟,则当前帧处理校正值就要大于零。因此,将大于零的第一校正值确定为当前帧处理校正值。

数量差大于零,表示帧缓冲区内的视频帧数量大于预设数量,此时需要执行快播放。即,需要在当前帧处理基准值的基础上,减少当前帧处理校正值后播放。既然要实现快播,则当前处理校正值就要小于零。因此,将小于零的第二校正值确定为当前帧处理校正值。

进一步地,为了对帧缓冲区内的视频帧实现更加精细的时间控制,可以分别针对数量差大于零以及数量差小于零再设置不同的阈值,对大于零的区间进行进一步的划分,以及对小于零的区间进行进一步的划分。其中,对大于零的区间的划分数量以及对小于零的区间的划分数量,是根据实际需求进行设置,在此对其并不做任何限定。

对于数量差大于零的情况,这种情况下当前帧处理校正值是小于零的,越远离零的区间对应的当前帧处理校正值越小;越靠近零的区间对应的当前帧处理校正值越大。

对于数量差小于零的情况,这种情况下当前帧处理校正值是大于零的,越远离零的区间对应的当前帧处理校正值越大;越靠近零的区间对应的当前帧处理校正值越小。

在一些实施方式中,对于数量差小于零的区间,划分成2个区间,以第一数值进行区分。基于此,上述S223包括:

(1)当数量差大于第一数值且小于零时,将大于零的第一子校正值确定为当前帧处理校正值。

(2)当数量差小于或等于第一数值时,将大于第一子校正值的第二子校正值确定为当前帧处理校正值。

例如,以目标处理为播放处理为例,即进行播放前的平滑处理,数量差采用Diff表示,第一数值为-2。基于此,若Diff<=-2,说明缓冲区中的数量低于基础数量了,此时需要执行慢播,第二子校正值为4ms;若-2

在一些实施方式中,对于数量差大于零的区间,划分成2个区间,以第二数值进行区分。上述S224包括:

(1)当数量差大于零且小于第二数值时,将小于零的第三子校正值确定为当前帧处理校正值。

(2)当数量差大于或等于第二数值时,将小于第三子校正值的第四子校正值确定为当前帧处理校正值。

若第二数值为2,基于此,若Diff>=2,说明缓冲区中的帧数量过多了,此时需要执行快播,第四子校正值为-4ms;若0

在数量差大于零的情况以及数量差小于零的情况,均分为不同的时间阈值进行处理校正值的处理,实现精细化的时间控制,进一步保证了视频播放的流畅性。

S23,基于当前帧处理基准值与当前帧处理校正值之和,确定当前帧处理间隔。

继续沿用上述示例,若Diff<=-2,在当前帧处理基准值的基础上,延迟4ms后播放。即:当前帧处理间隔由16.67ms变成16.67ms+4ms=20.67ms;若-2

若Diff>=2,在当前帧处理基准值的基础上,减少4ms后播放。即:当前帧处理间隔由16.67ms变成16.67-4=12.67ms;若0

其余详细请参见图5所示实施例的S13,在此不再赘述。

需要说明的是,当目标处理为解码处理时,当前帧处理校正值的计算方式与上述播放处理时的校正值的计算方式相同,不同的是具体比较的预设数量、第一数值以及第二数值的具体取值,以实现对解码处理的快解或慢解。这些取值是根据实际需求进行设置的,在此对其并不做任何限定。

S24,基于当前帧处理间隔从帧缓冲区中提取当前帧进行目标处理,以播放处理后的视频帧。

其中,所述目标处理包括解码处理和/或播放处理。

具体地,上述S24包括:

S241,获取目标处理的起始时间以及上一帧的处理相对时间。

其中,所述处理相对时间是对目标处理的第一帧到所述上一帧之间的帧处理间隔进行累加后得到的。

目标处理的起始时间为开始本次目标处理的时间,处理相对时间为帧处理间隔累加后的结果。具体地,当前处理到第10个视频帧,那么,上一帧的处理相对时间为从第一个视频帧开始到第9个视频帧之间的9个帧处理间隔的累加结果。

进一步地,在述目标处理为解码处理的情况下,获取目标处理的起始时间,包括:

(1)判断视频帧的帧编号是否连续。

(2)当所述帧编号不连续时,将第一次出现不连续帧编号的视频帧的时间确定为目标处理的起始时间。

在接收到视频帧之后,对视频帧的帧编号FrameID进行分析,若FrameID是不连续的,认定为一次新的目标处理,此时需要确定目标处理的起始时间。其中,目标处理的起始时间为第一次出现不连续帧编号的视频帧的时间。

例如,所接收到的视频帧的帧编号为1,2,3,4,100,101,102,则将接收到帧编号为100的视频帧的时间确定为目标处理的起始时间。

以视频帧的帧编号的连续性确定是否是新一次的解码处理,简化了起始时间的确定可靠性。

S242,将当前帧处理间隔累加至上一帧的处理相对时间中,得到当前帧的处理相对时间。

在上述S23中得到当前帧处理间隔之后,将计算当前帧处理间隔与上一帧的处理相对时间之和,得到当前帧的处理相对时间。

S243,将起始时间与当前帧的处理相对时间进行累加,得到当前帧的目标处理时间。

再计算起始时间与当前帧的处理相对时间之后,得到当前帧的目标处理时间。

S244,若当前时间达到当前帧的目标处理时间时,从帧缓冲区中提取当前帧进行目标处理,以对处理后的视频帧进行播放。

将当前时间与当前帧的目标处理时间进行比较,若达到了当前帧的目标处理时间,则从帧缓冲区内提取出当前帧进行目标处理;若未达到当前帧的目标处理时间,则继续进行等待直至达到当前帧的目标处理时间。其中,所描述的提取当前帧进行目标处理,并不特指直接对提取出的当前帧进行处理,也可以是提取出当前帧并将当前帧加入到处理队列中以等待处理。

本实施例提供的视频播放方法,在数量差小于零的情况下,表示帧缓存区内的视频帧数量较少需要进行慢处理,因此将大于零的第一校正值作为当前帧处理校正值;在数量差大于零的情况下,表示帧缓存区内的视频帧数量较多需要进行快处理,因此将小于零的第二校正值作为当前帧处理校正值。通过上述两种情况实现慢处理或快处理,以保证任意相邻两帧之间的目标处理时间间隔在可控范围内。由于起始时间是一个固定的时间值,以目标处理的起始时间以及处理相对时间的累加进行目标处理的时机判断,保证了目标处理的时机的准确性。

在一些实施方式中,所述方法还包括:

(1)判断帧控时间是否异常,所述帧控时间包括所述当前时间、所述起始时间以及所述处理相对时间中的至少之一。

(2)当帧控时间异常时,重置起始时间以及处理相对时间。

在对帧缓冲区内的视频帧进行时间控制的同时,还需要判断帧控时间是否异常。其中,若当前时间小于起始时间,则表示当前时间异常;若起始时间小于零,则表示起始时间异常;若处理相对时间溢出,例如,处理相对时间超过864000000,即连续处理了10天,则表示处理相对时间异常。若上述任一出现异常,则对起始时间以及处理时间进行重置处理。

在帧控时间异常的情况下,对起始时间以及处理相对时间进行重置,而重置处理并不会影响目标处理的时机,在不影响目标处理的情况下,提高了目标处理的可靠性。

作为本发明实施例的一个具体应用实例,在目标处理为解码时,即,在解码前进行帧缓冲区的设置。其中,将解码前进行帧缓冲区的设置也可以理解为解码前的平滑控制。如图7所示,该方法包括:

(1)开始解码超过一秒:由于解码对端是各种各样的终端,所以并不能总是得知具体的视频帧率,需要在解码时自行做统计。统计帧率需要至少在1秒后才能相对准备的第一次估出大致帧率,故而在流程的一开始有“开始解码超过1秒”的判断,即在1秒后开始帧率统计和帧率纠正。在1秒内还无法统计帧率时,就使用默认的帧率,此系统设定默认帧率为60帧。

(2)帧率统计和纠正:首先先假设帧率为60帧,即系统先按照60帧的步长去播放,同时在1秒后根据收到的帧的数量来重新计算帧率,并实时更新到平滑控制逻辑中。

(3)是否新一次解码:新一次解码的判定逻辑,收到的帧编号FrameID是要求连续的。当检测到FrameID剧烈变化时,可以认定为是一次新的解码,此时置位“首次解码”标志和“首次播放”标志。

(4)首次解码判定:当首次解码时,需要多做两步处理。即,第一步是关键帧的判断,等待关键帧(IDR)的到来,如非关键帧,则需直接丢弃当前帧(外层需要有请求关键帧的逻辑),当IDR帧到来时,即满足了可解码的前提条件;第二步是解码缓冲区已达基准数量的判断,如未达到,则只需将收到的帧放入待解码缓冲区即可,此时先不能做解码,直到待解码缓冲区中的帧数达到基准数量为止,以便可以通过快解慢解逻辑来抗抖动。

(5)各标志置位:一是“解码起始时间”标志,该标志是指当前开始解码的起始时间,在连续解码过程中,该时间固定不变。当新一次的解码开始时,用当前时间重新置位该时间,该时间的作用,参见解码相对时间;二是“解码相对时间”标志,该标志是相对于解码起始时间,每解码一帧都递增该时间。该时间和解码起始时间共同来判断是否该对当前帧做解码。解码相对时间每次累加的值由两部分组成(“根据帧率计算出来的时间间隔”和“动态计算出来的校正值”);三是“首次解码”标志清0,意味着解码的前期预缓存已完成,开始正常的解码循环了。

(6)快解慢解逻辑:校正值的计算,根据帧缓冲区内视频帧的数量,结合不同场景的经验值得出,该校正值需根据实际情况调优,具体方法与播放前平滑控制逻辑相近。

(7)帧控时间异常:以下几种情况会判定为帧控时间异常,当帧控时间异常时,需要重置解码起始时间和解码相对时间,以开始新一轮的帧控时间控制。a、当前时间小于解码起始时间;b、解码起始时间值异常;c、防止解码相对时间溢出,如解码相对时间的值超过864000000,即连续解码了10天了。上面描述的三种情况认为是异常,重置两个时间的值,重置并不会对平滑控制逻辑造成过多影响。

(8)该帧解码时间到:检测当前帧是否到了该解码的时间,如已到,则需累加解码相对时间并同时告知后续逻辑去解码该帧,否则继续将该帧存到待解码队列中,以进行解码处理。

作为本发明实施例的一个具体应用实例,在目标处理为播放时,即,在播放前进行帧缓冲区的设置。其中,将播放前进行帧缓冲区的设置也可以理解为播放前的平滑控制。如图8所示,播放前的平滑控制逻辑与解码前的平滑控制逻辑类似,具体请参见上文所述,在此不再赘述。

其中,图4为添加了解码后平滑处理后,解码后数据的每一帧和其上一帧的时间间隔(毫秒)。通过图4可以看出来,在后面就变的很平稳了,即使在I帧突发时,一样很平稳。

然而,在图4的前几十秒的时间内,并不平稳,这主要是由于帧率统计导致帧率突变以及相应策略的经验值设置不合适导致,表示前期的收敛部分还需要再进行优化,可以调整纠正值的计算逻辑,来达到收敛的优化。基于此,图9示出了优化了前期的收敛后的解码后数据的每一帧和其上一帧之间的时间间隔(毫秒),可见根据场景调整了经验值参数后,可以在1-2秒左右快速收敛,后面都是较为平稳的曲线,两帧之间时间间隔差值,可以在10ms之内,达到了播放流畅的目的。

在本实施例中还提供了一种视频播放装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

本实施例提供一种视频播放装置,如图10所示,包括:

第一获取模块41,用于获取当前帧率,以确定当前帧处理基准值;

第二获取模块42,用于获取帧缓冲区内视频帧的数量,并基于所述视频帧的数量与预设数量的大小关系,确定当前帧处理校正值;

确定模块43,用于基于所述当前帧处理基准值与所述当前帧处理校正值之和,确定当前帧处理间隔;

处理模块44,用于基于所述当前帧处理间隔从所述帧缓冲区中提取当前帧进行目标处理,以播放处理后的视频帧,所述目标处理包括解码处理和/或播放处理。

在一些实施方式中,确定模块43包括:

计算单元,用于计算所述视频帧与所述预设数量的差值,确定数量差;

第一确定单元,用于当所述数量差小于零时,将大于零的第一校正值确定为所述当前帧处理校正值;

第二确定单元,用于当所述数量差大于零时,将小于零的第二校正值确定为所述当前帧处理校正值。

在一些实施方式中,第一确定单元,包括:

第一确定子单元,用于当所述数量差大于第一数值且小于零时将大于零的第一子校正值确定为所述当前帧处理校正值,当所述数量差小于或等于所述第一数值时将大于所述第一子校正值的第二子校正值确定为所述当前帧处理校正值;

和/或,

第二确定单元包括:

第二确定子单元,用于当所述数量差大于零且小于第二数值时将小于零的第三子校正值确定为所述当前帧处理校正值,当所述数量差大于或等于所述第二数值时将小于所述第三子校正值的第四子校正值确定为所述当前帧处理校正值。

在一些实施方式中,处理模块包括:

获取单元,用于获取所述目标处理的起始时间以及上一帧的处理相对时间,所述处理相对时间是对所述目标处理的第一帧到所述上一帧之间的帧处理间隔进行累加后得到的;

第一累加单元,用于将当前帧处理间隔累加至所述上一帧的处理相对时间中,得到当前帧的处理相对时间;

第二累加单元,用于将所述起始时间与所述当前帧的处理相对时间进行累加,得到所述当前帧的目标处理时间;

提取单元,用于当当前时间达到所述当前帧的目标处理时间时,从所述帧缓冲区中提取当前帧进行目标处理,以对处理后的视频帧进行播放。

在一些实施方式中,在所述目标处理为解码处理的情况下,获取单元包括:

判断子单元,用于判断所述视频帧的帧编号是否连续;

第三确定子单元,用于当所述帧编号不连续时,将第一次出现不连续帧编号的视频帧的时间确定为所述目标处理的起始时间。

在一些实施方式中,所述装置还包括:

判断模块,用于判断帧控时间是否异常,所述帧控时间包括所述当前时间、所述起始时间以及所述处理相对时间中的至少之一;

重置模块,用于当所述帧控时间异常时,重置所述起始时间以及所述处理相对时间。

在一些实施方式中,在所述目标处理为解码处理的情况下,第一获取模块包括:

判断单元,用于判断开始解码的时间是否超过预设时间;

第三确定单元,当开始解码的时间未超过所述预设时间时,将预设帧率确定为所述当前帧率。

本实施例中的视频播放装置是以功能单元的形式来呈现,这里的单元是指ASIC电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。

上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。

本发明实施例还提供一种电子设备,具有上述图10所示的视频播放装置。

请参阅图11,图11是本发明可选实施例提供的一种电子设备的结构示意图,如图11所示,该电子设备可以包括:至少一个处理器51,例如CPU(Central Processing Unit,中央处理器),至少一个通信接口53,存储器54,至少一个通信总线52。其中,通信总线52用于实现这些组件之间的连接通信。其中,通信接口53可以包括显示屏(Display)、键盘(Keyboard),可选通信接口53还可以包括标准的有线接口、无线接口。存储器54可以是高速RAM存储器(Random Access Memory,易挥发性随机存取存储器),也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器54可选的还可以是至少一个位于远离前述处理器51的存储装置。其中处理器51可以结合图10所描述的装置,存储器54中存储应用程序,且处理器51调用存储器54中存储的程序代码,以用于执行上述任一方法步骤。

其中,通信总线52可以是外设部件互连标准(peripheral componentinterconnect,简称PCI)总线或扩展工业标准结构(extended industry standardarchitecture,简称EISA)总线等。通信总线52可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

其中,存储器54可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard diskdrive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器54还可以包括上述种类的存储器的组合。

其中,处理器51可以是中央处理器(英文:central processing unit,缩写:CPU),网络处理器(英文:network processor,缩写:NP)或者CPU和NP的组合。

其中,处理器51还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,缩写:ASIC),可编程逻辑器件(英文:programmable logic device,缩写:PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:CPLD),现场可编程逻辑门阵列(英文:field-programmable gate array,缩写:FPGA),通用阵列逻辑(英文:generic arraylogic,缩写:GAL)或其任意组合。

可选地,存储器54还用于存储程序指令。处理器51可以调用程序指令,实现如本申请任一实施例中所示的视频播放方法。

本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的视频播放方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard DiskDrive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。

虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

相关技术
  • 一种虚拟形象视频播放方法、装置、电子设备及存储介质
  • 视频播放方法、装置及系统、电子设备以及存储介质
  • 视频生成、视频播放方法、装置、电子设备及存储介质
  • 控制视频播放的方法、装置、可读存储介质及电子设备
  • 用于视频播放的方法、装置、计算机可读介质及电子设备
  • 视频播放方法、视频播放装置、电子设备和可读存储介质
  • 一种视频播放方法、视频播放装置、电子设备及存储介质
技术分类

06120115850368