一种视频切换清晰度的方法及相关装置与流程

文档序号:18452606发布日期:2019-08-17 01:22阅读:185来源:国知局
一种视频切换清晰度的方法及相关装置与流程
本申请涉及视频播放领域,尤其涉及一种视频切换清晰度的方法及相关装置。
背景技术
:随着网络的不断发展,越来越多的用户选择在视频网站观看视频或者直播。为了适应不同网速的客户端网络环境,直播间主备线路一般都有几种不同清晰度数据源供用户选择,例如流畅、高清、超清或者蓝光等。现有技术中,当直播间某一线路内视频从清晰度a切换到清晰度b时,清晰度b开始播放后,往往会看到几秒在原来清晰度a流内已经播放过的画面,即一些重复画面。因此目前一些主流的直播客户端在切换时都或多或少存在重复画面的问题,切换时的用户体验还有待改进。技术实现要素:本申请实施例提供了一种视频切换清晰度的方法及相关装置,用于提高视频清晰度切换的效率和流畅度。本申请实施例的第一方面提供了一种验证客户端可信的方法,包括:接收用户发送的清晰度切换指令,所述清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,所述第一清晰度对应所述当前播放视频的第一视频流,所述第二清晰度对应所述当前播放视频的第二视频流;响应于所述清晰度切换指令,根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一补充增强信息(supplementalenhancementinformation,sei)时间戳,并确定所述第二视频流的第一个关键帧的第二sei时间戳和所述第二视频流的第一个帧的显示时间戳(presentationtimestamp,pts);根据时间差值和所述第二视频流的第一个关键帧的pts确定所述第二视频流中第一个非重复视频帧的pts,所述时间差值为所述第一sei时间戳和所述第二sei时间戳的差值,所述非重复视频帧不包含于所述第一视频流;将所述第二视频流中所述第一个非重复视频帧之前的帧丢弃,并显示所述第一个非重复视频帧。在一种可能的实施例中,所述根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一sei时间戳包括:解析所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts;将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的时间单位;根据所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts计算所述第一sei时间戳。在一种可能的实施例中,所述根据所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts计算所述第一sei时间戳包括:通过以下公式计算所述第一sei时间戳:frame_sei=m_last_key_sei+(pts-m_last_key_pts);所述frame_sei用于表示所述第一视频流的最终显示帧的第一sei时间戳,所述m_last_key_sei用于表示所述第一视频流中最终显示帧的上一个关键帧的sei时间戳,所述m_last_key_pts用于表示所述上一个关键帧的pts,所述pts用于表示所述最终显示帧的上一个非关键帧的pts。在一种可能的实施例中,所述将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的时间基准time_base包括:通过调用接口av_rescale_q(a,b,c)将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的time_base,其中所述接口av_rescale_q(a,b,c)用于将时间基准c表示的数值a转换成以时间基准b来表示的数值。在一种可能的实施例中,所述根据时间差值和所述第二视频流的第一个帧的pts确定所述第二视频流中第一个非重复视频帧的pts包括:根据以下公式计算所述时间差值:repeate_time=m_last_player_decode_sei-first_keyframe_sei;其中,所述repeate_time用于表示所述时间差值,所述m_last_player_decode_sei用于表示所述第一视频流的最终显示帧的第一sei时间戳,所述first_keyframe_sei用于表示所述第二视频流的第一个关键帧的第二sei时间戳;当所述repeate_time大于0时,根据以下公式计算所述第二视频流中第一个非重复视频帧的pts:m_dst_video_pts=first_keyframe_pts+repeate_time;其中,所述m_dst_video_pts用于表示所述第二视频流中第一个非重复视频帧的pts,所述first_keyframe_pts用于表示所述第二视频流的第一个关键帧的pts。在一种可能的实施例中,所述显示所述第一个非重复视频帧之前,所述方法还包括:将当前解码完的重复视频帧的时长和当前解码完的音频的时长转换为相同的时间基准,所述重复视频帧为所述第一视频流和所述第二视频流都包括的视频帧;判断所述重复视频帧的时长与所述当前解码完的音频的时长的差值是否大于0;若所述差值大于0,通过调用函数av_usleep()设置暂停解码所述音频,且暂停的时长值为所述差值。在一种可能的实施例中,所述方法还包括:当所述重复视频帧的清晰度大于预设清晰度时,对所有重复视频帧进行软件解码;或,当所述重复视频帧的清晰度大于预设清晰度时,确定解码所述重复视频帧的解码时长;当所述解码时长大于预设解码最大时长时,设置解码所述重复视频帧的时长为所述预设解码最大时长。本申请实施例的第二方面提供了一种播放装置,播放装置,包括:收发单元,用于接收用户发送的清晰度切换指令,所述清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,所述第一清晰度对应所述当前播放视频的第一视频流,所述第二清晰度对应所述当前播放视频的第二视频流;确定单元,用于响应于所述清晰度切换指令,根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一补充增强信息sei时间戳,并确定所述第二视频流的第一个关键帧的第二sei时间戳和所述第二视频流的第一个帧的显示时间戳pts;根据时间差值和所述第二视频流的第一个关键帧的pts确定所述第二视频流中第一个非重复视频帧的pts,所述时间差值为所述第一sei时间戳和所述第二sei时间戳的差值,所述非重复视频帧不包含于所述第一视频流;显示单元,用于将所述第二视频流中所述第一个非重复视频帧之前的帧丢弃,并显示所述第一个非重复视频帧。本申请第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述第一方面任意一项所述的视频切换清晰度的方法的步骤。本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。本申请的第五方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。从以上技术方案可以看出,本申请实施例具有以下优点:接收用户发送的清晰度切换指令,所述清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,所述第一清晰度对应所述当前播放视频的第一视频流,所述第二清晰度对应所述当前播放视频的第二视频流;响应于所述清晰度切换指令,根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一补充增强信息sei时间戳,并确定所述第二视频流的第一个关键帧的第二sei时间戳和所述第二视频流的第一个帧的显示时间戳pts;根据时间差值和所述第二视频流的第一个关键帧的pts确定所述第二视频流中第一个非重复视频帧的pts,所述时间差值为所述第一sei时间戳和所述第二sei时间戳的差值,所述非重复视频帧不包含于所述第一视频流;将所述第二视频流中所述第一个非重复视频帧之前的帧丢弃,并显示所述第一个非重复视频帧。本申请实施例中,以相同线路不同清晰度流中sei时间戳是相对于同一开始时间的绝对时间戳)和不同步的pts信息作为参考,根据第一视频流中关键帧的sei时间戳和pts,以及非关键帧的pts推理出第一视频流所有非关键帧的sei时间戳,得到第一视频流中最后一个显示过的帧的sei时间戳,计算与第二视频流中第一个关键帧sei时间戳间的差值和第二视频流中第一个帧的pts,推理出第二视频流中第一个非重复帧的显示时间戳,由此定位到第一个非重复的帧。在打开第二视频流以后,快速解码到该第一个非重复的帧,将其做为第一个帧来显示(丢掉它之前的帧不显示),从而达到去重复帧的目的,提高了视频清晰度切换的效率和流畅度。附图说明图1为本申请实施例提供的一种视频切换清晰度的方法的流程图;图2为本申请实施例提供的一种可能的播放装置的结构示意图;图3为本申请实施例提供的另一可能的电子设备的硬件结构示意图;图4为本申请实施例提供的一种可能的计算机可读存储介质的硬件结构示意图。具体实施方式本申请实施例提供了一种视频切换清晰度的方法及相关装置,用于提高视频清晰度切换的效率和流畅度。下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。请参阅图1,为本申请实施例提供的一种可能的视频切换清晰度的方法的流程图,具体包括:101、接收用户发送的清晰度切换指令;用户在观看直播视频或者在视频网站观看视频时,若遇到网络状态变化,如网络状态变好需要提高当前播放视频的清晰度,或者网络状态变差需要降低当前播放视频的清晰度时,可以向播放装置发送清晰度切换指令,该清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,其中,第一清晰度对应当前播放视频的第一视频流,第二清晰度对应当前播放视频的第二视频流。需要说明的是,本申请实施例中,不仅可以由用户主动触发清晰度切换指令,还可以由播放设置主动触发,例如播放装置检测到用户当前网络状态发生变化,若当前缓存速度变小导致视频播放不流畅,则提示用户切换至流畅对应的清晰度,或者若当前缓存速度支持更高清晰度视频的播放,则提示用户切换至更高清晰度的视频进行观看,并接收用户的反馈,以进行切换。因此,本申请实施例中,用户发送清晰度切换指令的触发条件具体此处不做限定。102、响应于清晰度切换指令,根据第一视频流中的关键帧和非关键帧确定第一视频流的最终显示帧的第一sei时间戳,并确定第二视频流的第一个关键帧的第二sei时间戳和第二视频流的第一个关键帧的pts;接收到用户发送的清晰度切换指令后,提取第一视频流中的关键帧和非关键帧。可以理解的是,实际应用中,提取视频的关键帧的方法有多种,例如基于镜头的方法,帧平均法和直方图平均法等。其中,基于镜头的方法主要是将镜头检测中得到的镜头的首帧或者尾帧作为镜头关键帧;帧平均法是从镜头中取所有帧在某个位置上像素值的平均值,然后将镜头中该点位置的像素值最接近平均值的帧作为关键帧;直方图平均法则是将镜头中所有帧的统计直方图取平均,然后选择与该平均直方图最接近的帧作为关键帧。具体提取视频的关键帧的方式此处不做赘述,且本申请实施例中,提取视频的关键帧的方式不做限定。可以理解的是,第一视频流中除关键帧以外的帧即为非关键帧。在确定第一视频流中关键帧和非关键帧后,根据第一视频流中的关键帧和非关键帧确定第一视频流的最终显示帧的第一sei时间戳。其中,sei即补充增强信息,属于码流范畴,提供了向视频码流中加入额外信息的方法,本申请实施例中,仅关键帧的packet包含sei时间戳,相同线路不同清晰度流中sei时间戳是相对于同一开始时间的绝对时间戳。具体地,先解析第一视频流中各关键帧的sei时间戳、各关键帧的pts和各非关键帧的pts,其中,pts用于度量解码后的视频帧何时显示出来;再将第一视频流中各关键帧的sei时间戳、各关键帧的pts和各非关键帧的pts转换为相同的时间基准time_base,可通过调用接口av_rescale_q(a,b,c)将第一视频流中各关键帧的sei时间戳、各关键帧的pts和各非关键帧的pts转换为相同的time_base,其中接口av_rescale_q(a,b,c)用于把时间戳从一个时间基准调整到另外一个时间基准,即将时间基准c表示的数值a转换成以时间基准b来表示的数值,相当于执行a*b/c,因此通过设置该函数的b和c的值,可以方便的实现时间基准time_base之间的转换。具体函数实现如下:pts=av_rescale_q(pts,av_time_base_q,m_stream_params[avmedia_type_video].m_time_base);其中,av_time_base_q为转换后的时间基准,m_stream_params[avmedia_type_video].m_time_base为转换前的时间基准。在将第一视频流中各关键帧的sei时间戳、各关键帧的pts和各非关键帧的pts转换为相同的time_base后,通过以下公式计算第一sei时间戳:frame_sei=m_last_key_sei+(pts-m_last_key_pts);其中,frame_sei用于表示第一视频流的最终显示帧的第一sei时间戳,m_last_key_sei用于表示第一视频流中最终显示帧的上一个关键帧的sei时间戳,m_last_key_pts用于表示上一个关键帧的pts,pts用于表示最终显示帧的上一个非关键帧的pts。需要说明的是,确定第二视频流的第一个关键帧的第二sei时间戳和第二视频流的第一个关键帧的pts的方式与第一sei时间戳和确定第一视频流的第一个关键帧的方式类似,具体此处不再赘述。通过本步骤,即可确定第一视频流的最终显示帧的第一sei时间戳,和第二视频流的第一个关键帧的第二sei时间戳和第二视频流的第一个关键帧的pts,进而根据这三个因素找出第二视频流的第一个非重复帧,具体如下述步骤103所述。103、根据时间差值和第二视频流的第一个关键帧的pts确定第二视频流中第一个非重复视频帧的pts;在确定第一视频流的最终显示帧的第一sei时间戳和第二视频流的第一个关键帧的第二sei时间戳后,根据根据以下公式计算时间差值:repeate_time=m_last_player_decode_sei-first_keyframe_sei;其中,repeate_time用于表示时间差值,m_last_player_decode_sei用于表示第一视频流的最终显示帧的第一sei时间戳,first_keyframe_sei用于表示第二视频流的第一个关键帧的第二sei时间戳。在得到了时间差值repeate_time后,若该时间差值repeate_time大于0时,确定第一视频流和第二视频流存在重复视频帧,重复视频帧即第一视频流和第二视频流都存在的视频帧,即从第一视频流切换至第二视频流时,重复视频帧会重复播放一次。因此,为了避免重复播放的情况,根据以下公式计算第二视频流中第一个非重复视频帧的pts:m_dst_video_pts=first_keyframe_pts+repeate_time;其中,m_dst_video_pts用于表示第二视频流中第一个非重复视频帧的pts,first_keyframe_pts用于表示第二视频流的第一个关键帧的pts。可选的,当时间差值repeate_time不大于0时,说明无重复视频帧,即第二视频流的第一个帧没有在第一视频流中显示,此时直接从第二视频流的第一个帧开始切换。根据该步骤,即可确定第二视频流中第一个非重复视频帧的pts,即定位到第二视频流中第一个非重复视频帧,以在第一视频流切换到第二视频流时,直接从第二视频流的第一个非重复视频帧开始播放,使得在视频切换的过程中,用户不用看重复画面,提高了用户体验。104、将第二视频流中第一个非重复视频帧之前的帧丢弃,并同步当前播放视频的音视频;当时间差值repeate_time大于0并确定了第二视频流中第一个非重复视频帧之后,快速解码第二视频流,直到第二视频流中第一个非重复视频帧解码完,并丢弃重复视频帧,即将第二视频流中第一个非重复视频帧之前的帧丢弃。需要说明的是,在实际应用中,由于音频解码速度和视频解码速度相同且音频解码速度大于视频解码速度,因此在解码完重复视频帧后,第一视频流切换到第二视频流后可能会出现音视频不同步的现象,例如,在显示到当前画面时,音频已经播放到下一画面的音频,为了同步画面会有快放的现象。所以在第一视频流到第二视频流的切换过程中,如果音频解码的时戳大于当前视频解码的时戳,会让音频等待视频。本申请实施例中,将当前解码完的重复视频帧的时长vpts和当前解码完的音频的时长apts转换为相同的时间基准,判断重复视频帧的时长与当前解码完的音频的时长的差值是否大于0;若差值大于0,通过调用函数av_usleep()设置暂停解码音频,且暂停的时长值为该差值,即让解码速度快的音频等待解码速度慢的视频。具体函数实现如下:if(pts>m_current_discard_vpts){int64_tapts=av_rescale_q(pts,m_stream_params[avmedia_type_audio].m_time_base,av_time_base_q);int64_tvpts=av_rescale_q(m_current_discard_vpts,m_stream_params[avmedia_type_video].m_time_base,av_time_base_q);int64_tpts_interval=apts-vpts;if(pts_interval>0){av_usleep(pts_interval);}}其中,pts用于表示音频解码的时戳,m_current_discard_vpts用于表示当前视频解码的时戳;vpts用于表示当前解码完的重复视频帧的时长,apts用于表示当前解码完的音频的时长,pts_interval用于表示该差值。在进行了该处理后,视频从第一视频流切换到第二视频流,无上述现有技术中的画面快放现象,且音视频也是同步的。可选的,为了提高切换的流畅度和用户体验,要求解码重复视频帧的时间要尽量小,这样切换时画面卡住的时间会短一点。实际应用中,由于cdn或p2p节点的缓存机制和源流到达播放器有一定延时,切换时重复视频帧的时长会达到几百毫秒到10多秒。当重复视频帧时间较长时,对播放器的解码速度要求也更高。例如,解码5秒高清流,软件解码耗时200多毫秒,而硬件解码则需要2秒多。如果是蓝光流,这个解码时间会更长。在一个实施例中,当重复视频帧的清晰度大于预设清晰度时,对所有重复视频帧进行软件解码:视频处理包括分离、解码和渲染等步骤,其中渲染的主要目的是让用户在不能实时预览效果的时候能看到流畅的最终效果,而在本申请实施例中,第二视频流中的重复视频帧无需向用户显示,因此针对重复视频帧可以仅做分离和解码,不进行渲染,来减少切换重复视频帧的时长;由于硬件解码耗时大于软件解码耗时,因此对所有重复视频帧均使用软件解码以提高解码速度;在解码重复视频帧时,确定重复视频帧中的参考帧和非参考帧,其中参考帧为进行运动预测和运动补偿的帧,因此本申请实施例中,为了进一步减小重复帧的解码时间来提高解码效率,可以不解码即抛弃该重复视频帧中的非参考帧,例如,通过设置ijkplayer参数来实现,具体包括:ijk_avdiscard_nonref,其中,nonref用于表示非参考帧。在一个实施例中,在解码重复视频帧时,如果当前图片组(groupofpictures,gop)的下一图片组的第一帧时戳小于非重复视频帧,其中,gop为一组连续的画面,为便于理解,即假设该下一gop的第一帧时戳为20:19:54,而非重复视频帧的时戳为20:20:56,则该下一gop的第一帧时戳小于非重复视频帧,说明该下一gop的第一帧仍为重复视频帧,那么当前gop包括的所有帧都是重复视频帧,则为了减少解码时间,可以直接丢掉当前gop内已下载到packetqueue里的包。在一个实施例中,当重复视频帧的清晰度大于预设清晰度时,确定解码重复视频帧的解码时长;当解码时长大于预设解码最大时长时,设置解码重复视频帧的时长为预设解码最大时长。其中,确定解码重复视频帧的解码时长有多种,例如,根据数据时长映射关系确定重复视频帧对应的解码时长,其中数据时长映射关系可以为视频帧与解码时长的映射关系表,该视频帧可通过视频帧的标识进行识别,例如视频帧编号。为便于理解,请参考表1,为本申请实施例提供的一种可能的数据帧与解码时长的映射关系表,其中,数据标识可以为各视频帧的编号,若当前视频帧标识为003,则对应的解码时长为40ms。因此,根据重复视频帧中各帧的编号,确定各帧的解码时长再相加,即可确定该重复视频帧对应的解码时长。可选的,确定解码时长的方式还可包括:若每帧采用相同的解码速度进行解码,则先获取重复视频帧的视频帧率,计算重复视频帧中每帧视频的平均解码时长,然后计算平均解码时长与预设播放倍率的成绩,将计算结果作为重复视频帧的解码时长,例如,若视频正常播放的帧率为30帧/秒,那么每帧的平均解码时长为33ms,若采用0.5倍播放倍率进行解码,则每帧的解码时长为33ms/0.5=66ms,若采用2倍播放倍率进行解码,则每帧的解码时长为33ms/2=16.5ms。因此,本申请实施例中,确定重复视频帧的解码时长的方式有多种,具体此处不做限定。表1数据标识解码时长00120ms00230ms00340ms……30050ms在确定该重复视频帧的解码时长大于预设解码最大时长时,将解码重复视频帧的时长设为预设解码最大时长,以避免重复帧太多时画面卡住时间过长。通过以上算法,对于超清即以下清晰度流,可以快速切换画面,让用户等待第一视频流切换到第二视频流的时间很短,几乎感知不到画面切换的发生。对于超清以上清晰度的蓝光流,为了提高用户体验,往往不能等所有重复帧全部解码完。但利用此算法也可以大大减小重复视频帧的数量,减少了重复视频帧的解码时长,提高重复视频帧的解码效率。105、显示第一个非重复视频帧。通过上述操作例如音视频同步、优化重复帧视频解码速度等后,在第二视频流中,从第一个非重复视频帧开始显示第二视频流解码后的帧,以实现第一视频流至第二视频流的切换。本申请实施例中,以相同线路不同清晰度流中sei时间戳是相对于同一开始时间的绝对时间戳和不同步的pts信息作为参考,根据第一视频流中关键帧的sei时间戳和pts,以及非关键帧的pts推理出第一视频流所有非关键帧的sei时间戳,得到第一视频流中最后一个显示过的帧的sei时间戳,计算与第二视频流中第一个关键帧sei时间戳间的差值和第二视频流中第一个帧的pts,推理出第二视频流中第一个非重复帧的显示时间戳,由此定位到第一个非重复的帧。在打开第二视频流以后,快速解码到该第一个非重复的帧,将其做为第一个帧来显示(丢掉它之前的帧不显示),从而达到去重复帧的目的。上面从视频切换清晰度的方法的角度对本申请实施例进行了描述,下面从播放装置的角度对本申请实施例进行描述。请参阅图2,图2为本申请实施例提供的一种可能的播放装置的实施例示意图,其中,该播放装置具体包括:收发单元201,用于接收用户发送的清晰度切换指令,所述清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,所述第一清晰度对应所述当前播放视频的第一视频流,所述第二清晰度对应所述当前播放视频的第二视频流;确定单元202,用于响应于所述清晰度切换指令,根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一补充增强信息sei时间戳,并确定所述第二视频流的第一个关键帧的第二sei时间戳和所述第二视频流的第一个帧的显示时间戳pts;根据时间差值和所述第二视频流的第一个关键帧的pts确定所述第二视频流中第一个非重复视频帧的pts,所述时间差值为所述第一sei时间戳和所述第二sei时间戳的差值,所述非重复视频帧不包含于所述第一视频流;显示单元203,用于将所述第二视频流中所述第一个非重复视频帧之前的帧丢弃,并显示所述第一个非重复视频帧。请参阅图3,图3为本申请实施例提供的电子设备的实施例示意图。如图3所示,本申请实施例提供了一种电子设备,包括存储器310、处理器320及存储在存储器320上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:接收用户发送的清晰度切换指令,所述清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,所述第一清晰度对应所述当前播放视频的第一视频流,所述第二清晰度对应所述当前播放视频的第二视频流;响应于所述清晰度切换指令,根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一补充增强信息sei时间戳,并确定所述第二视频流的第一个关键帧的第二sei时间戳和所述第二视频流的第一个帧的显示时间戳pts;根据时间差值和所述第二视频流的第一个关键帧的pts确定所述第二视频流中第一个非重复视频帧的pts,所述时间差值为所述第一sei时间戳和所述第二sei时间戳的差值,所述非重复视频帧不包含于所述第一视频流;将所述第二视频流中所述第一个非重复视频帧之前的帧丢弃,并显示所述第一个非重复视频帧。可选的,在一种可能的实施例中,所述处理器320具体用于:解析所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts;将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的时间单位;根据所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts计算所述第一sei时间戳。可选的,在一种可能的实施例中,所述处理器320具体用于:通过以下公式计算所述第一sei时间戳:frame_sei=m_last_key_sei+(pts-m_last_key_pts);所述frame_sei用于表示所述第一视频流的最终显示帧的第一sei时间戳,所述m_last_key_sei用于表示所述第一视频流中最终显示帧的上一个关键帧的sei时间戳,所述m_last_key_pts用于表示所述上一个关键帧的pts,所述pts用于表示所述最终显示帧的上一个非关键帧的pts。可选的,在一种可能的实施例中,所述处理器320具体用于:通过调用接口av_rescale_q(a,b,c)将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的time_base,其中所述接口av_rescale_q(a,b,c)用于将时间基准c表示的数值a转换成以时间基准b来表示的数值。可选的,在一种可能的实施例中,所述处理器320具体用于:根据以下公式计算所述时间差值:repeate_time=m_last_player_decode_sei-first_keyframe_sei;其中,所述repeate_time用于表示所述时间差值,所述m_last_player_decode_sei用于表示所述第一视频流的最终显示帧的第一sei时间戳,所述first_keyframe_sei用于表示所述第二视频流的第一个关键帧的第二sei时间戳;当所述repeate_time大于0时,根据以下公式计算所述第二视频流中第一个非重复视频帧的pts:m_dst_video_pts=first_keyframe_pts+repeate_time;其中,所述m_dst_video_pts用于表示所述第二视频流中第一个非重复视频帧的pts,所述first_keyframe_pts用于表示所述第二视频流的第一个关键帧的pts。可选的,在一种可能的实施例中,所述处理器320还用于:将当前解码完的重复视频帧的时长和当前解码完的音频的时长转换为相同的时间基准,所述重复视频帧为所述第一视频流和所述第二视频流都包括的视频帧;判断所述重复视频帧的时长与所述当前解码完的音频的时长的差值是否大于0;若所述差值大于0,通过调用函数av_usleep()设置暂停解码所述音频,且暂停的时长值为所述差值。可选的,在一种可能的实施例中,所述处理器320还用于:当所述重复视频帧的清晰度大于预设清晰度时,对所有重复视频帧进行软件解码;或,当所述重复视频帧的清晰度大于预设清晰度时,确定解码所述重复视频帧的解码时长;当所述解码时长大于预设解码最大时长时,设置解码所述重复视频帧的时长为所述预设解码最大时长。由于本实施例所介绍的电子设备为实施本申请实施例中一种播放装置所采用的设备,故而基于本申请实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍,只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。请参阅图4,图4为本申请实施例提供的一种计算机可读存储介质的实施例示意图。如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现如下步骤:接收用户发送的清晰度切换指令,所述清晰度切换指令用于指示将当前播放视频从第一清晰度切换至第二清晰度,所述第一清晰度对应所述当前播放视频的第一视频流,所述第二清晰度对应所述当前播放视频的第二视频流;响应于所述清晰度切换指令,根据所述第一视频流中的关键帧和非关键帧确定所述第一视频流的最终显示帧的第一补充增强信息sei时间戳,并确定所述第二视频流的第一个关键帧的第二sei时间戳和所述第二视频流的第一个帧的显示时间戳pts;根据时间差值和所述第二视频流的第一个关键帧的pts确定所述第二视频流中第一个非重复视频帧的pts,所述时间差值为所述第一sei时间戳和所述第二sei时间戳的差值,所述非重复视频帧不包含于所述第一视频流;将所述第二视频流中所述第一个非重复视频帧之前的帧丢弃,并显示所述第一个非重复视频帧。可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体实现如下步骤:解析所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts;将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的时间单位;根据所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts计算所述第一sei时间戳。可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体实现如下步骤:通过以下公式计算所述第一sei时间戳:frame_sei=m_last_key_sei+(pts-m_last_key_pts);所述frame_sei用于表示所述第一视频流的最终显示帧的第一sei时间戳,所述m_last_key_sei用于表示所述第一视频流中最终显示帧的上一个关键帧的sei时间戳,所述m_last_key_pts用于表示所述上一个关键帧的pts,所述pts用于表示所述最终显示帧的上一个非关键帧的pts。可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体实现如下步骤:通过调用接口av_rescale_q(a,b,c)将所述第一视频流中各关键帧的sei时间戳、所述各关键帧的pts和各非关键帧的pts转换为相同的time_base,其中所述接口av_rescale_q(a,b,c)用于将时间基准c表示的数值a转换成以时间基准b来表示的数值。可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体实现如下步骤:根据以下公式计算所述时间差值:repeate_time=m_last_player_decode_sei-first_keyframe_sei;其中,所述repeate_time用于表示所述时间差值,所述m_last_player_decode_sei用于表示所述第一视频流的最终显示帧的第一sei时间戳,所述first_keyframe_sei用于表示所述第二视频流的第一个关键帧的第二sei时间戳;当所述repeate_time大于0时,根据以下公式计算所述第二视频流中第一个非重复视频帧的pts:m_dst_video_pts=first_keyframe_pts+repeate_time;其中,所述m_dst_video_pts用于表示所述第二视频流中第一个非重复视频帧的pts,所述first_keyframe_pts用于表示所述第二视频流的第一个关键帧的pts。可选的,在一种可能的实施例中,该计算机程序411被处理器执行时还实现如下步骤:将当前解码完的重复视频帧的时长和当前解码完的音频的时长转换为相同的时间基准,所述重复视频帧为所述第一视频流和所述第二视频流都包括的视频帧;判断所述重复视频帧的时长与所述当前解码完的音频的时长的差值是否大于0;若所述差值大于0,通过调用函数av_usleep()设置暂停解码所述音频,且暂停的时长值为所述差值。可选的,在一种可能的实施例中,该计算机程序411被处理器执行时还实现如下步骤:当所述重复视频帧的清晰度大于预设清晰度时,对所有重复视频帧进行软件解码;或,当所述重复视频帧的清晰度大于预设清晰度时,确定解码所述重复视频帧的解码时长;当所述解码时长大于预设解码最大时长时,设置解码所述重复视频帧的时长为所述预设解码最大时长。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1