CN115834943B - 音视频同步方法及装置 - Google Patents
音视频同步方法及装置 Download PDFInfo
- Publication number
- CN115834943B CN115834943B CN202310030386.XA CN202310030386A CN115834943B CN 115834943 B CN115834943 B CN 115834943B CN 202310030386 A CN202310030386 A CN 202310030386A CN 115834943 B CN115834943 B CN 115834943B
- Authority
- CN
- China
- Prior art keywords
- audio
- playing
- video
- time
- frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本申请实施例提供一种音视频同步方法及装置,该方法包括:根据音视频文件获取音频数据和视频数据,音频数据中包括多个音频帧,视频数据中包括多个视频帧。针对任一个音频帧,根据音频帧的第一播放时间戳,确定音频帧的第一播放时刻,并在第一播放时刻播放音频帧。根据各音频帧的第一播放时刻,确定不存在音频帧的目标时段。针对任一个视频帧,在视频数据的视频播放进度属于目标时段时,根据视频帧的第二播放时间戳,确定视频帧的第二播放时刻,并在第二播放时刻播放视频帧。本申请的技术方案可以有效保证音视频文件播放的完整性和稳定性。
Description
技术领域
本申请涉及终端技术领域,尤其涉及音视频同步方法及装置。
背景技术
在终端设备播放音视频文件时,音频数据和视频数据的同步播放是非常重要的。
目前相关技术中为了实现音频数据和视频数据的同步播放,通常情况下会比较视频播放进度和音频播放进度,当视频播放进度落后音频播放进度比较多的时候,同步机制会对视频帧进行丢弃,以保证视频和音频的同步播放。
然而,针对音视频文件某些时段内不存在音频帧的场景,按照上述的同步机制进行处理会导致视频的播放异常跳转。
发明内容
本申请实施例提供一种音视频同步方法及装置,应用于终端技术领域,旨在保证音频和视频同步播放的基础上,提升音视频文件播放的稳定性。
第一方面,本申请实施例提出一种音视频同步方法。该方法包括:
根据音视频文件获取音频数据和视频数据,所述音频数据中包括多个音频帧,所述视频数据中包括多个视频帧;
针对任一个所述音频帧,根据所述音频帧的第一播放时间戳,确定所述音频帧的第一播放时刻,并在所述第一播放时刻播放所述音频帧;
根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段;
针对任一个所述视频帧,在所述视频数据的视频播放进度属于所述目标时段时,根据所述视频帧的第二播放时间戳,确定所述视频帧的第二播放时刻,并在所述第二播放时刻播放所述视频帧。
这种实施方式中,通过确定第一帧音频帧的播放时刻,并将此确定为目标时段。然后针对视频播放进度未到达目标时段的这部分视频帧,直接根据视频帧的第二播放时间戳确定其播放时刻,而不是直接控制视频播放进度和音频播放进度一致,从而可以保证针对缺失部分音频数据的音视频文件,不会出现大量异常丢帧和跳转播放的情况出现,进而保证了音视频文件播放的完整性和稳定性。
在一些实现方式中,所述根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段,包括:
针对任一个所述音频帧,确定所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的第一时长;
若所述第一时长大于或等于预设时长,则将所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的时段,确定为所述目标时段。
这种实施方式中,通过相邻两帧音频帧的播放时刻之间的时长和预设时长进行比较,以确定相邻两帧音频帧之间是否存在音频帧空缺的目标时段,从而可以简单有效的确定不存在音频帧的目标时段。
在一些实现方式中,所述方法还包括:
在所述视频数据的视频播放进度不属于所述目标时段时,获取所述音频数据的音频播放进度;
根据所述音频播放进度,确定所述视频帧的第三播放时刻,并在所述第三播放时刻播放所述视频帧。
这种实施方式中,针对视频播放进度晚于目标时段的视频帧,也就是存在音频帧的音频数据部分,根据音频播放进度确定视频帧的播放时刻,可以有效的保证音频数据和视频数据的同步播放。
在一些实现方式中,获取所述音频数据的音频播放进度,包括:
获取第一音频帧的第一播放时刻,第一音频帧为已缓存的音频数据中的最后一个音频帧;
根据音频数据的底层写入时长和底层播放时长,确定所述音频数据的未播放时长,所述底层写入时长为已缓存的所述音频数据的总时长,底层播放时长为已播放的所述音频数据的总时长;
根据所述第一音频帧的第一播放时刻和所述未播放时长,确定所述音频数据的音频播放进度。
这种实施方式中,通过根据音频数据的底层写入时长和底层播放时长确定音频数据的未播放时长,之后再根据最新到达的音频帧的播放时刻以及未播放时长确定音频播放进度,就可以保证确定的缺失部分音频帧的音频数据的音频播放进度的准确性和有效性。
在一些实现方式中,所述根据所述音频播放进度,确定所述视频帧的第三播放时刻,包括:
根据当前系统时刻以及确定所述音频播放进度时的历史系统时刻,对所述音频播放进度进行修正,得到修正后的音频播放进度;
根据所述视频帧的第二播放时间戳和所述修正后的音频播放进度,确定音视频播放误差;
根据所述音视频播放误差和所述当前系统时刻,确定所述视频帧的第三播放时刻。
这种实施方式中,通过对音频播放进度进行修正,再通过修正后的音频播放进度和待播放的视频帧的播放时间戳,确定音视频之间的播放误差,然后再根据播放误差和当前系统时刻确定视频帧的第三播放时刻,就可以有效的保证确定的视频帧播放时刻是和音频帧同步的。
在一些实现方式中,所述在所述第三播放时刻播放所述视频帧,包括:
若所述第三播放时刻晚于当前系统时刻,则在所述第三播放时刻播放所述视频帧。
在一些实现方式中,所述方法还包括:
若所述第三播放时刻早于当前系统时刻,则丢弃所述视频帧。
在一些实现方式中,所述根据当前系统时刻以及确定所述音频播放进度时的历史系统时刻,对所述音频播放进度进行修正,得到修正后的音频播放进度,包括:
根据当前系统时刻以及所述历史系统时刻,确定时间误差;
根据所述时间误差对所述音频播放进度进行修正,得到修正后的音频播放进度。
第二方面,本申请实施例提供一种音视频同步装置。该装置包括:
获取模块,用于根据音视频文件获取音频数据和视频数据,所述音频数据中包括多个音频帧,所述视频数据中包括多个视频帧;
确定模块,用于针对任一个所述音频帧,根据所述音频帧的第一播放时间戳,确定所述音频帧的第一播放时刻,并在所述第一播放时刻播放所述音频帧;
所述确定模块,还用于根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段;
所述确定模块,还用于针对任一个所述视频帧,在所述视频数据的视频播放进度属于所述目标时段时,根据所述视频帧的第二播放时间戳,确定所述视频帧的第二播放时刻,并在所述第二播放时刻播放所述视频帧。
在一些实现方式中,所述确定模块具体用于:
针对任一个所述音频帧,确定所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的第一时长;
若所述第一时长大于或等于预设时长,则将所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的时段,确定为所述目标时段。
在一些实现方式中,所述获取模块还用于:
在所述视频数据的视频播放进度不属于所述目标时段时,获取所述音频数据的音频播放进度;
所述确定模块还用于:
根据所述音频播放进度,确定所述视频帧的第三播放时刻,并在所述第三播放时刻播放所述视频帧。
在一些实现方式中,所述获取模块具体用于:
获取第一音频帧的第一播放时刻,第一音频帧为已缓存的音频数据中的最后一个音频帧;
根据音频数据的底层写入时长和底层播放时长,确定所述音频数据的未播放时长,所述底层写入时长为已缓存的所述音频数据的总时长,底层播放时长为已播放的所述音频数据的总时长;
根据所述第一音频帧的第一播放时刻和所述未播放时长,确定所述音频数据的音频播放进度。
在一些实现方式中,所述确定模块具体用于:
根据当前系统时刻以及确定所述音频播放进度时的历史系统时刻,对所述音频播放进度进行修正,得到修正后的音频播放进度;
根据所述视频帧的第二播放时间戳和所述修正后的音频播放进度,确定音视频播放误差;
根据所述音视频播放误差和所述当前系统时刻,确定所述视频帧的第三播放时刻。
在一些实现方式中,所述确定模块具体用于:
若所述第三播放时刻晚于当前系统时刻,则在所述第三播放时刻播放所述视频帧。
在一些实现方式中,所述装置还包括:处理模块;
所述处理模块具体用于:
若所述第三播放时刻早于当前系统时刻,则丢弃所述视频帧。
在一些实现方式中,所述确定模块具体用于:
根据当前系统时刻以及所述历史系统时刻,确定时间误差;
根据所述时间误差对所述音频播放进度进行修正,得到修正后的音频播放进度。
第三方面,本申请实施例提供一种终端设备,终端设备也可以称为终端(terminal)、用户设备(user equipment,UE)、移动台(mobile station,MS)、移动终端(mobile terminal,MT)等。终端设备可以是手机(mobile phone)、智能电视、穿戴式设备、平板电脑(Pad)、带无线收发功能的电脑、虚拟现实(virtual reality,VR)终端设备、增强现实(augmented reality,AR)终端设备、工业控制(industrial control)中的无线终端、无人驾驶(self-driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等等。
该终端设备包括:包括:处理器和存储器;存储器存储计算机执行指令;处理器执行存储器存储的计算机执行指令,使得终端设备执行如第一方面的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序。计算机程序被处理器执行时实现如第一方面的方法。
第无方面,本申请实施例提供一种计算机程序产品,计算机程序产品包括计算机程序,当计算机程序被运行时,使得计算机执行如第一方面的方法。
第六方面,本申请实施例提供了一种芯片,芯片包括处理器,处理器用于调用存储器中的计算机程序,以执行如第一方面所述的方法。
应当理解的是,本申请的第二方面至第五方面与本申请的第一方面的技术方案案相对应,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
本申请提供一种音视频同步方法及装置,该方法通过确定音频帧缺失的目标时段,然后针对视频播放进度属于目标时段的这部分视频帧,直接根据视频帧的第二播放时间戳确定其播放时刻,而不是直接控制视频播放进度和音频播放进度一致,从而可以保证针对缺失部分音频数据的音视频文件,不会出现大量异常丢帧和跳转播放的情况出现,进而保证了音视频文件播放的完整性和稳定性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的音视频文件的播放框架示意图;
图2为本申请实施例提供的音视频文件的播放流程示意图;
图3为本申请实施例提供的视频数据的信息示意图;
图4为本申请实施例提供的音频数据的信息示意图;
图5为本申请实施例提供的音视频同步方法的流程图;
图6为本申请实施例提供的音视频同步方法的流程图二;
图7为本申请实施例提供的音频数据和视频数据的示意图;
图8为本申请实施例提供的确定音频播放进度的实现示意图;
图9为本申请实施例提供的确定音视频播放误差的实现示意图;
图10为本申请实施例提供的音视频同步方法的播放框架示意图;
图11为本申请实施例提供的音视频同步方法的播放流程示意图;
图12为本申请实施例提供的音视频同步装置的结构示意图;
图13为本申请实施例提供的终端设备的硬件结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
为了便于清楚描述本申请实施例的技术方案,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
需要说明的是,本申请实施例中的“在……时”,可以为在某种情况发生的瞬时,也可以为在某种情况发生后的一段时间内,本申请实施例对此不作具体限定。此外,本申请实施例提供的显示界面仅作为示例,显示界面还可以包括更多或更少的内容。
为了更好的理解本申请的技术方案,下面对本申请所涉及的相关技术进行进一步的详细介绍。
目前的很多终端设备都具备播放音视频文件的能力,在音视频文件中通常既包括音频数据又包括视频数据,其中音频和视频的同步播放是非常重要的,如果音频和视频出现了播放不同步的情况,则可能会出现音画不同步等异常。
下面结合图1和图2对目前常见的音视频文件播放流程进行说明,图1为本申请实施例提供的音视频文件的播放框架示意图,图2为本申请实施例提供的音视频文件的播放流程示意图。
如图1所示,通常情况下终端设备中都承载有多媒体播放器(media player),其中多媒体播放器可以加载音视频文件的数据源,其中音视频文件比如说可以是本地的音视频文件,或者还可以是从网络中缓存的音视频文件等等,本实施例对此不做限制。
在多媒体播放器加载音视频文件之后,可以通过多媒体提取器(mediaextractor)对音视频文件进行解封装(parser/demux)处理,以实现音视频分离,得到视频解码前数据以及音频解码前数据。
之后针对视频和音频分别进行处理,参照图1,可以通过视频解码器(videodecoder)对视频解码前数据进行解码处理,以得到视频解码后数据。以及可以通过音频解码器(audio decoder)对音频解码前数据进行解码处理,以得到音频解码后数据。
在一种可能的实现方式中,图1所介绍的视频解码器和音频解码器比如说都可以包括在编译码器(codec2)中,以及编译码器(codec2)比如说可以封装在多媒体编译码器(mediacodec)中,以及多媒体编译码器(mediacodec)比如说可以封装在Nuplayer类的解码单元(decoder)中,其中具体的播放器框架结构可以根据实际需求进行选择和确定,本实施例对此不做限制。
继续参照图1,在对音频数据和视频数据分别进行解码处理之后,就可以通过视频渲染单元(video render)对视频解码后数据进行渲染处理,并通过视频播放设备(videodevice)进行播放。以及,还可以通过音频渲染单元(audio render)对音频解码后数据进行渲染处理,并通过音频播放设备(audio device)进行播放。其中视频渲染单元和音频渲染单元比如说可以封装在Nuplayer类的渲染单元(render)中,具体的播放器框架结构可以根据实际需求进行确定。
以及参照图1还可以确定的是,在渲染并播放视频数据,以及渲染并播放音频数据的时候,需要通过多媒体时钟(media clock)对视频数据和音频数据进行时钟同步的处理,以保证音频数据和视频数据是同步播放的。
针对上述图1介绍的音视频文件的播放框架的基础上,下面再结合图2对处理音视频文件的流程进行进一步的详细介绍。
如图2所示,比如说第一应用程序可以加载音视频文件,其中第一应用程序比如说可以是视频播放类的应用程序,或者还可以是浏览器类的应用程序,或者还可以是社交类的应用程序,本实施例对第一应用程序的具体实现方式不做限制,凡是可以加载音视频文件的应用程序均可以作为本申请中的第一应用程序,以及参照上述介绍可以确定的是,此处加载的音视频文件可以是本地的音视频文件,也可以是在线的音视频文件,本实施例对此不做限制。
之后提取单元可以获取到第一应用程序所加载的音视频文件,并且对音视频文件进行音频和视频的分离,以得到音频解码前数据和视频解码前数据。
之后可以由解码单元对音频解码前数据进行解码处理,以得到音频解码后数据,以及同时还可以由解码单元对视频解码前数据进行解码处理,以得到视频解码后数据,其中针对音频数据的处理和针对视频数据的处理是独立进行的,并且其是可以同步的并行执行的。
参照图2,之后可以由同步单元计算音频数据的音频播放进度,并且根据音频数据的音频播放进度对时钟记录进行更新。以及为了保证视频数据和音频数据的同步播放,同步单元可以通过查询时钟单元以确定音频播放进度,并且通过查询到的音频播放进度对视频播放进度进行同步,以保证音频数据和视频数据的播放进度是一致的。
在确定音频数据和视频数据的播放进度同步之后,就可以通过播放单元分别播放音频数据和视频数据,以保证最终呈现出来的是音画同步的音视频文件的播放效果。
在上述图1和图2介绍的音视频文件的播放框架和播放流程的基础上,下面对音视频同步的处理进行进一步的详细介绍。
目前存在一种音视频同步的处理机制就是以音频播放进度为基准,进行音频数据和视频数据的同步。具体的,比如说可以确定音频播放进度和视频播放进度,当视频播放进度领先音频播放进度的时候,那视频就先暂停播放,等待音频数据的播放进度追平视频播放进度的时候,再继续播放视频数据。
或者,当视频播放进度落后音频播放进度的时候,那么就会对视频帧进行丢帧,以使得视频播放进度可以追平音频播放进度。在一种可能的实现方式中,比如说是在音频播放进度和视频播放进度之间的差异超出一定的阈值的时候,触发上述介绍的同步机制。
但是在实际处理过程中,可能会出现音视频数据中只包括部分音频数据的情况,也就是说在某些时段内音频数据是缺失的。比如说可以结合图3和图4理解当前介绍的这种情况。图3为本申请实施例提供的视频数据的信息示意图,图4为本申请实施例提供的音频数据的信息示意图。
如图3所示,假设视频数据的信息中包括编码器ID、编码器ID信息、视频时长、视频码率、视频宽度以及视频高度,参照图3可以确定的是,当前示例中的视频时长为19秒610毫秒。
以及如图4所示,假设音频数据的信息中包括类型(codec_type)、流索引(stream_index)、pts(Presentation Time Stamp,显示时间戳)、pts_time(播放时刻)、dts(Decoding Time Stamp,解码时间戳)、dts_time(解码时刻)、播放时长时间戳(duration)、播放时长(duration_time)、尺寸以及pos。
其中,针对每一个音频帧都存在对应的pts和dts,根据pts可以计算得到pts_time,从而可以确定音频帧在什么时候播放。以及根据dts可以计算得到dts_time,从而可以确定音频帧在什么时候解码。本实施例对pts和dts的相关知识不再进行赘述。
假设图4中示意的是第一帧音频帧的相关信息,参照上述图3和图4介绍的音视频信息可以确定的是,视频数据的时长是19秒610毫秒,但是第一帧音频帧在3.8秒左右才会进行播放,也就是说3.8秒以前的音频数据都是缺失的,音频数据并不是全程存在的。
针对上述介绍的这种音视频文件中只存在部分音频数据的情况,也就是说音频数据并不是全程存在的情况,基于上述介绍的音视频播放框架进行同步机制的同步处理时,因为对音频数据的处理和视频数据的处理属于独立的环节,针对视频数据的处理来说,其无法感知分离的音频数据是从什么时候开始播放的,那么视频数据在获取到音频播放进度之后,就自然的按照上述介绍的同步机制进行处理。
那么就会出现,视频数据的处理流程中,一开始就检测到音频数据的音频播放进度是3.8秒,那么视频处理流程一侧就会认为当前音频已经播放到3.8秒的位置了,为了追平音频播放进度,视频就会对3.8秒以前的视频帧进行丢弃,以达成视频播放进度和音频播放进度的同步。
但是直接将3.8秒的视频帧进行的丢弃会出现大量的丢帧,丢帧数量过大会发生跳转播放的现象出现。因此目前的同步机制中,针对缺失部分音频数据的音视频文件进行同步处理的过程中,对音频播放进度会进行误判,进而会出现大量丢帧的情况,导致播放音视频文件出现跳转播放的异常情况。
针对上述介绍的技术问题,本申请提出了如下技术构思:之所以会出现上述介绍的大量丢帧的问题,是因为在视频数据的处理侧并没有关注音频数据的缺失时段,视频数据处理侧在进行同步的时候,是直接根据获取到的音频播放进度进行同步处理,所以才出现了大量丢帧的情况。那么如果可以关注音频数据的缺失时段,然后根据音频数据的缺失时段再决定如何进行音视频同步,就可以有效的避免大量错误丢帧的情况出现,进而可以有效的避免跳转播放的异常情况。
在上述介绍内容的基础上,下面结合具体的实施例对本申请提供的音视频同步方法进行介绍。首先需要说明的是,本申请中各实施例的执行主体比如说可以是终端设备、处理器以及芯片等等具备音视频数据处理功能的设备,在这些设备中比如说可以包括上述介绍的处理框架,具体的执行主体可以根据实际需求进行选择和设置,本实施例对此不做限制。
下面首先结合图5进行介绍,图5为本申请实施例提供的音视频同步方法的流程图。
如图5所示,该方法包括:
S501、根据音视频文件获取音频数据和视频数据,音频数据中包括多个音频帧,视频数据中包括多个视频帧。
在本实施例中,音视频文件比如说可以是本地的音视频文件,或者还可以是基于网络加载的在线的音视频文件,本实施例对此不做限制,以及音视频文件的具体内容、时长以及帧率等等信息均可以根据时间需求进行选择和设置,本实施例对此同样不做限制。
在获取到音视频文件之后,可以根据音视频文件获取音频数据和视频数据,在一种可能的实现方式中,比如说可以对音视频文件进行分离和解码,以得到音频数据和视频数据,具体的实现方式可以参照上述实施例的介绍,此处不再赘述。
在本实施例中,在音频数据中包括多个音频帧,以及在视频数据中包括多个视频帧。
在一种可能的实现方式中,在加载音视频文件并最终播放的处理过程中,针对音视频文件可以是边加载边处理的,也就是说缓存一部分的音视频文件之后就可以进行后续的分离、解码、同步以及播放处理,而无需等待所有的音视频文件都加载完才进行后续处理,这样可以保证视频的快速和高效播放。
S502、针对任一个音频帧,根据音频帧的第一播放时间戳,确定音频帧的第一播放时刻,并在第一播放时刻播放音频帧。
本实施例中针对音频数据中的每一个音频帧都会进行类似的处理,因此下面以任意一个音频帧为例进行介绍,对其余的音频帧的处理方式不再赘述。
在本实施例中,音频帧存在对应的第一播放时间戳,第一播放时间戳用于指示音频帧具体在什么时刻播放,第一播放时间戳比如说可以是上述介绍的pts。
因此可以根据音频帧的第一播放时间戳,确定音频帧的第一播放时刻,然后在到达第一播放时刻的时候,就可以播放该音频帧。
可以理解的是,本实施例中设置有一个时钟,这个第一播放时刻是在这个时钟基础上而言的,而这个时钟的0时刻通常是音视频文件开始播放的时刻。比如说当前确定某个音频帧的第一播放时刻是5秒,那么相应的就是说在5秒的时候播放该音频帧。
在一种可能的实现方式中,比如说可以根据音频帧的第一播放时间戳除以音频采样率,从而确定音频帧的第一播放时刻。
S503、根据各音频帧的第一播放时刻,确定不存在音频帧的目标时段。
以及为了应对上述介绍的丢帧的异常情况,本实施例中会确定各个音频帧的第一播放时刻,确定不存在音频帧的目标时段,其中目标时段也可以理解为音频帧缺失的时段。
在一种可能的实现方式中,比如说可以针对任意一个音频帧,确定该音频帧的第一播放时刻和该音频帧的前一个音频帧的第一播放时刻之间的第一时长。如果说第一时长大于或等于预设时长的话,则表示这两帧音频帧之间的时间跨度是比较大的,那么这种情况下就可以认为这两帧音频帧的播放时刻之间的时段内,是属于音频帧缺失的情况的。
因此在第一时长大于或等于预设时长的情况下,可以将该音频帧的第一播放时刻和该音频帧的前一个音频帧的第一播放时刻之间的时段,确定为目标时段。其中预设时长比如说可以是60ms,或者预设时长的具体设置还可以根据时间需求进行选择和设置。
比如说当前存在一个音频帧A和一个音频帧B,其中音频帧A和音频帧B的播放时刻时间的时长为1000ms,那么就可以确定音频帧A的第一播放时刻和音频帧B的第一播放时刻之间的时段为目标时段。
值得说明的是还有一种特殊情况,也就是第一个音频帧,因为第一个音频帧并不存在前一个音频帧,因此在针对第一个音频帧确定目标时段的时候,是将第一个音频帧的第一播放时刻和起始时刻进行比较,通常情况下起始时刻都是0,如果说第一个音频帧的第一播放时刻和起始时刻之间的时长大于或等于预设时长,则可以确定起始时刻到第一个音频帧的第一播放时长之间的时段为目标时段。
比如说当前的第一个音频帧C的第一播放时刻为3.8秒,以及假设起始时刻为0s,那么可以确定第一个音频帧C的第一播放时刻和起始时刻之间的时长为3.8s,那么相应的就可以确定0~3.8秒这个时段为目标时段。
在实际实现过程中,确定目标时段的实现方式并不限于上述介绍的实现方式,只要可以根据各个音频帧的第一播放时刻确定出不存在音频帧的目标时段即可,具体的实现方式可以根据时间需求进行选择和设置。
S504、针对任一个视频帧,在视频数据的视频播放进度属于目标时段时,根据视频帧的第二播放时间戳,确定视频帧的第二播放时刻,并在第二播放时刻播放视频帧。
在确定音频数据开始出现的目标时段之后,本实施例中就可以根据目标时段来确定视频帧的播放时刻了。
可以理解的是,在目标时段以内的音频数据都是缺失的,那么为了避免出现上述介绍的大量丢帧的情况,就可以让视频帧根据播放时间戳自行确定播放时刻。在目标时段以外的音频数据都是存在的,那么为了保证音频数据和视频数据的同步播放,就需要根据音频数据的音频播放进度确定视频数据的视频播放进度。
同样的,本实施例中针对每一个视频帧都会进行类似的处理,因此下面以任意一个视频帧为例进行介绍,对其余的视频帧的处理不再赘述。
在本实施例中,在每播放一个视频帧之后都可以记录并更新视频播放进度,因此本实施例中可以获取视频数据的视频播放进度,并且比较视频播放进度和目标时段。
在一种可能的实现方式中,若视频播放进度属于目标时段,在表示在当前的视频播放进度下,音频数据还是缺失的,针对音频数据缺失的部分,视频数据也就不需要强行的追平音频播放进度,以避免出现大量错误丢帧的情况出现。
因此在这种情况下,可以根据视频帧自己的第二播放时间戳,确定视频帧的第二播放时刻,然后在到达第二播放时刻的时候,播放该视频帧。
可以理解的是,当前的第二播放时刻与上述介绍的第一播放时刻类似,都是在同一个时钟基础上而言的,比如说当前确定某个视频帧的第二播放时刻是2秒,那么相应的就是说在2秒的时候播放该视频帧。此处的第二播放时间戳比如说也可以是上述介绍的pts。
本实施例中针对音频数据缺失的部分,通过根据视频帧自己的第二播放时间戳确定其播放时刻,以实现单独播放音频帧缺失部分的视频帧,而不是直接控制视频播放进度和音频播放进度同步,因此可以有效的避免视频帧被大量的错误丢帧的情况出现。
本申请实施例提供的音视频同步方法,包括:根据音视频文件获取音频数据和视频数据,音频数据中包括多个音频帧,视频数据中包括多个视频帧。针对任一个音频帧,根据音频帧的第一播放时间戳,确定音频帧的第一播放时刻,并在第一播放时刻播放音频帧。根据各音频帧的第一播放时刻,确定不存在音频帧的目标时段。针对任一个视频帧,在视频数据的视频播放进度属于目标时段时,根据视频帧的第二播放时间戳,确定视频帧的第二播放时刻,并在第二播放时刻播放视频帧。通过确定音频帧缺失的目标时段。然后针对视频播放进度属于目标时段的这部分视频帧,直接根据视频帧的第二播放时间戳确定其播放时刻,而不是直接控制视频播放进度和音频播放进度一致,从而可以保证针对缺失部分音频数据的音视频文件,不会出现大量异常丢帧和跳转播放的情况出现,进而保证了音视频文件播放的完整性和稳定性。
在上述介绍内容的基础上,下面结合图6至图9对本申请实施例提供的音视频同步方法中,视频播放进度不属于目标时段的情况进行进一步的详细介绍。图6为本申请实施例提供的音视频同步方法的流程图二,图7为本申请实施例提供的音频数据和视频数据的示意图,图8为本申请实施例提供的确定音频播放进度的实现示意图,图9为本申请实施例提供的确定音视频播放误差的实现示意图。
如图6所示,该方法包括:
S601、在视频数据的视频播放进度不属于目标时段时,获取第一音频帧的第一播放时刻,第一音频帧为已缓存的音频数据中的最后一个音频帧。
在本实施例中,同样可以将视频播放进度和目标时段进行比较,在视频播放进度晚于或者等于目标时段的时候,相应的也就是说视频数据已经播放到了音频数据存在的时候,那么相应的就需要根据音频播放进度确定视频帧的播放时刻。
比如说可以结合图7进行理解,如图7所示,假设当前确定了第一个音频帧的第一播放时刻为3.8秒,以及起始时刻为0s,那么可以将起始时刻到第一个音频帧的第一播放时刻的时段确定为目标时段,也就是说将0~3.8秒的时段确定为目标时段。以及假设在5.8秒~6.8秒的时间范围内音频帧也是缺失的,那么相应的5.8秒~8.8秒的时段也是目标时段。
那么当视频播放进度属于0~3.8秒或者5.8秒~8.8秒的目标时段的时候,因为音频帧是缺失的,因此可以按照视频帧的第二播放时间戳确定其播放时刻。
在一种可能的实现方式中,比如说可以按照如下公式确定视频帧的播放时刻:播放时刻=(pts/帧率)×1000ms+起始系统时间。此处的pts就是视频帧的第二播放时间戳。
例如可以将(pts/帧率)×1000ms的计算结果确定为视频帧的第二播放时刻,这个第二播放时刻就可以指示在预设时钟的时间刻度上第几毫秒播放视频帧。
或者还可以在这个计算结果的基础上加上起始系统时间,以得到视频帧的第二播放时刻,这个第二播放时刻就可以指示具体在哪个系统时间播放视频帧,其中起始系统时间是第一帧视频帧开始播放时的系统时间,此处的系统时间可以理解为设备开机的时长。因此在根据第二播放时间戳和帧率确定播放时刻之后,就可以在确定的播放时刻的基础上加上起始系统时间,以确定具体是在哪个系统时刻播放视频帧。
在另一种可能的情况下,当视频播放进度不属于0~3.8秒以及5.8秒~8.8秒的目标时段的时候,因为音频帧是存在的,因此需要根据音频播放进度确定视频帧的播放时刻。
下面首先对确定音频播放进度的实现方式进行介绍,可以理解的是,针对视频数据会记录视频播放进度,相应的针对音频帧也会记录音频播放进度,无论是视频播放进度还是音频播放进度,通常都是记录其播放了多久。
但是在本实施例中,因为音频数据可能存在缺失的部分,因此底层记录的音频播放时长和实际上的音频播放进度是不一致的。
比如说可以结合图8进行理解,如图8所示,假设音频从3.8秒开始播放,播放1秒之后就播放到第4.8秒,此时底层记录的播放时长为1秒,但是实际上的音频播放进度是4.8秒,因此不能将记录的播放时长作为音频播放进度进行适用。
在本实施例中,可以获取第一音频帧的第一播放时刻,第一音频帧为已缓存的音频数据中的最后一个音频帧。
可以理解的是,本实施例中的音视频数据都是边加载边进行后续处理的,因此在分离、解码并播放音频以及视频的过程中,还会持续的缓存新的音视频文件,并针对新的音视频文件也进行分离、解码并播放的操作。本实施例中可以将已缓存的音频数据中的最后一个音频帧定义为第一音频帧,那么第一音频帧也就是说截至当前时刻缓存的最后一个音频帧。然后比如说可以根据第一音频帧的第一播放时间戳,确定第一音频帧的第一播放时刻。
比如说可以结合图8进行理解,假设根据最后一个到达的第一音频帧的第一播放时间戳确定的第一播放时刻为图8中的10.8秒所示的时刻,也就是说最后一个到达的第一音频帧应该在第10.8秒被播放。
S602、根据音频数据的底层写入时长和底层播放时长,确定音频数据的未播放时长,底层写入时长为已缓存的音频数据的总时长,底层播放时长为已播放的音频数据的总时长。
进一步的,在音频数据的播放过程中,底层会记录音频数据的写入时长,以得到底层写入时长,其中底层写入时长是指已缓存的音频数据的总时长,可以理解的是,因为音频数据的缓存是持续进行的,因此在一个完整的音频数据缓存完成之前,底层写入时长是持续发生变化的。以及在音频数据的播放过程中,底层还会记录音频数据的播放时长,以得到底层播放时长,其中底层播放时长就是已播放的音频数据的总时长。
比如说可以结合图8进行理解,假设图8中的音频数据缓存到第10.8秒播放的第一音频帧,那么截止该音频帧被缓存的时刻,底层记录的底层写入时长就是3.8秒~5.8秒以及8.8秒~10.8秒这两个时段对应的总时长,对应在图8的示例中底层写入时长就是4秒,表示当前缓存的音频数据的总时长为4秒。以及假设当前已经音频数据已经播放了1秒,那么底层播放时长就会记录1秒。
但是因为音频数据可能并不是从一开始就存在的,因此底层记录的底层播放时长和音频数据实际上的播放进度可能并不一致,为了准确的确定音频数据的音频播放进度,本实施例中可以根据底层写入时长和底层播放时长确定未播放时长,其中未播放时长也就是已缓存的音频数据中尚未播放的音频帧的总时长。
比如说在图8的示例中,根据底层写入时长和底层播放时长所确定的未播放时长就是3秒,这3秒具体是4.8秒~5.8秒以及8.8秒~10.8秒对应的时长。
S603、根据第一音频帧的第一播放时刻和未播放时长,确定音频数据的音频播放进度。
之后就可以根据第一音频帧的第一播放时刻和未播放时长确定音频数据的音频播放进度。可以理解的是在音频数据中存在不包括音频帧的目标时段,然而在根据底层写入时长和底层播放时长确定未播放时长的时候,并没有将目标时段算进去,也就是说未播放时长中不应该包括目标时段所占用的时长。
因此在确定音频播放进度的时候应该排除这些目标时段,以保证确定的音频播放进度的正确性。在一种可能的实现方式中,比如说可以采用第一音频帧的第一播放时刻,在目标时段之外的其余时段上向前推算未播放时长,以得到第一时刻,然后就可以将第一时刻确定为音频数据的音频播放进度。也就是说在跳过目标时段的约束条件下,采用第一播放时刻减去未播放时长,从而确定音频播放进度。
比如说在图8的示例中,第一音频帧的第一播放时刻为10.8秒,以及上述确定的未播放时长为3秒,以及图8示例中的目标时段包括0~3.8秒以及5.8~3.8秒。在跳过该目标时段的约束条件下,采用第一播放时刻10.8秒减去未播放时长3秒,那么相应的计算跳过5.8~3.8秒这个子时段,然后再从10.8秒向前推算3秒,得到的第一时刻就是4.8秒,因此可以确定音频播放进度为4.8秒。
再比如说在图8的示例中,第一音频帧的第一播放时刻为10.8秒,以及假设底层写入时长为4秒,底层播放时长为3秒,那么相应的未播放时长就是1秒,以及图8示例中的目标时段包括0~3.8秒以及5.8~3.8秒。在跳过该目标时段的约束条件下,采用第一播放时刻10.8秒减去未播放时长1秒,因为这个时段内不包括目标时段,因此直接从10.8秒向前推算1秒,得到的第一时刻就是9.8秒,因此可以确定音频播放进度为9.8秒。
S604、根据当前系统时刻以及确定音频播放进度时的历史系统时刻,对音频播放进度进行修正,得到修正后的音频播放进度。
在确定当前时刻的音频播放进度之后,就可以根据当前时刻的音频播放进度来确定当前需要播放的视频帧的播放时刻。
但是需要注意的是,在进行一系列的数据处理以及数据传输的过程中,音频还是在持续播放的,因此若直接根据上述计算的音频播放进度确定视频帧的播放时刻,则可能会存在一些因为数据处理导致的时间偏差,为了修正这部分时间偏差,本实施例中可以根据当前时刻的当前系统时间,以及在确定上述介绍的音频播放进度的历史时刻的历史系统时间,对上述确定的音频播放进度进行进一步的修正,以得到修正后的音频播放进度。
在一种可能的实现方式中,比如说可以根据当前系统时刻和历史系统时刻,确定时间误差,然后根据时间误差对音频播放进度进行修正,从而得到修正后的音频播放进度。
在上述图8介绍的示例中,比如说确定当前系统时刻和历史系统时刻之间的时间误差为0.1秒,也就是说在计算得到音频播放进度之后,又经过了0.1秒才开始计算视频帧的播放时刻,在这0.1秒内音频数据的播放是继续进行的,那么当前时刻下准确的音频播放进度,就应该是在上述计算的得到的音频播放进度的基础上再加上0.1秒,以得到修正后的音频播放进度。其中修正后的音频播放进度就是当下时刻较为准确的音频播放进度。
S605、根据视频帧的第二播放时间戳和修正后的音频播放进度,确定音视频播放误差。
本实施例中针对每一个视频帧都确定有第二播放时间戳,在确定下一帧待播放的视频帧的播放时刻的时候,比如说可以首先根据视频帧的第二播放时间戳确定视频帧的第二播放时刻,其中第二播放时刻是根据视频帧的播放时间戳确定的播放时刻,并没有考虑到音频数据和视频数据的同步,因此不能直接将第二播放时刻确定为真正的视频帧播放时刻。
而是进一步的,可以根据视频帧的第二播放时刻和修正后的音频播放进度,确定音视频播放误差,其中音视频播放误差就指示了当前待播放的视频帧第二播放时刻和当前的音频数据的播放进度之间的播放误差是多少。
比如说可以结合图9进行理解,如图9所示,假设根据视频帧的第二播放时间戳确定的视频帧的第二播放时刻为图9中的t3时刻所示,以及假设修正后的音频播放进度为图9中的t2`所示,则基于视频帧的第二播放时刻和修正后的音频播放进度,可以确定图9所示的音视频播放误差。比如说可以采用视频帧的第二播放时刻减去修正后的音频播放进度,以得到音视频播放误差。
S606、根据音视频播放误差和当前系统时刻,确定视频帧的第三播放时刻,并在第三播放时刻播放视频帧。
在得到音视频播放误差之后,可以进一步的根据音视频播放误差和当前系统时刻,确定视频帧的第三播放时刻。
可以理解的是,音视频播放误差是根据视频帧的第二播放时刻和修正后的音频播放进度确定的,其可能是正数,也有可能是负数。
在一种可能的实现方式中,当视频帧的第二播放时刻晚于修正后的音频播放进度的时候,音视频播放误差就是正的,在这种情况下也就是说视频播放进度比音频播放进度快。那么比如说可以在当前系统时刻的基础上加上音视频播放误差,也就是将当前系统时刻延后音视频播放误差所指示的时长,就可以得到视频帧的第三播放时刻。
比如说可以结合一个具体的示例进行理解,假设当前视频帧的第二播放时刻为9秒,也就是说根据当前视频帧的播放时间戳确定其应该在第9秒的时候播放。以及假设当前确定的修正后的音频播放进度为8.8秒,也就是说音频数据播放到第8.8秒了,那么当前示例中可以确定音视频播放误差为0.2秒,也就是说当前确定视频播放进度比音频播放进度快了0.2秒。
同时,假设当前系统时刻为30000ms,则可以在当前系统时刻的基础上向后推迟0.2秒,将30200ms确定为第三播放时刻。然后在等到30200ms这个第三时刻到达的时候,再播放该视频帧,此时视频播放进度就是播放到第9秒。以及在这个时刻音频播放进度也在8.8秒的基础上加了0.2秒,因此音频播放进度也是播放到第9秒,这样就可以保证音频播放进度和视频播放进度是一致的。
在一种可能的实现方式中,当视频帧的第二播放时刻早于修正后的音频播放进度的时候,音视频播放误差就是负的,在这种情况下也就是说视频播放进度比音频播放进度慢。那么比如说可以在当前系统时刻的基础上减去音视频播放误差,也就是将当前系统时刻提早音视频播放误差所指示的时长,就可以得到视频帧的第三播放时刻。
比如说可以结合一个具体的示例进行理解,假设当前视频帧的第二播放时刻为8.6秒,也就是说根据当前视频帧的播放时间戳确定其应该在第8.6秒的时候播放。以及假设当前确定的修正后的音频播放进度为8.8秒,也就是说音频数据播放到第8.8秒了,那么当前示例中可以确定音视频播放误差为-0.2秒,也就是说当前确定视频播放进度比音频播放进度慢了0.2秒。
同时,假设当前系统时刻为30000ms,则可以在当前系统时刻的基础上向前提早0.2秒,将29800 ms确定为第三播放时刻。那么就可以确定应该是在29800 ms这个第三时刻播放该视频帧,但是当前系统时刻是30000ms,也就是说29800 ms这个第三时刻已经过去了,因此在第三播放时刻早于当前系统时刻的情况下,应该丢弃掉当前的视频帧。实际上针对播放时刻在8.6秒~8.8秒内的视频帧都会按照上述介绍的方式处理并丢弃,以使得视频播放进度可以尽快的追平音频播放进度,这样就可以保证音频播放进度和视频播放进度是一致的。
可以理解的是,针对存在音频数据的时段内的每一个视频帧都按照上述介绍的方式确定播放时刻,而每一个视频帧的播放时刻,都是根据当下时刻实时的音频播放进度确定的,以保证音频播放进度和视频播放进度是同步的。
本申请实施例提供的音视频同步方法,在视频播放进度不属于目标时段的时候,可以确定已经存在音频数据了,因此针对这部分视频数据的视频帧,可以根据音频播放进度确定视频帧的播放时刻,以保证音频数据和视频数据的同步播放。以及本实施例中在确定音频播放进度的时候,也会根据音频数据的底层写入时长和底层播放时长确定未播放时长,并且根据缓存的最后一阵音频帧的播放时刻和未播放时长确定音频播放进度,从而可以实现针对缺失部分音频帧的音频数据,也准确有效的确定音频播放进度。之后再根据音频播放进度和当前待播放的视频帧的第二播放时间戳,确定音频数据和视频数据之间的播放误差,然后再在当前系统时刻的基础上加上音视频播放误差,以确定第三播放时刻,然后按照第三播放时刻播放视频帧,就可以有效的保证音频数据和视频数据的同步播放。以及在确定音视频播放误差的时候,还会对音频播放进度进行进一步的修正,以修正数据处理和数据传输过程中音频的同步播放所导致的误差影响,进一步的提升音频数据和视频数据的同步播放到的有效性和准确性。
在上述介绍内容的基础上,下面结合图10和图11对本申请实施例提供的音视频同步方法的相关框架和流程进行进一步的详细介绍,图10为本申请实施例提供的音视频同步方法的播放框架示意图,图11为本申请实施例提供的音视频同步方法的播放流程示意图。
在图10的示意中,相关框架和实现都与上述图1介绍的类似,不同之处在于,在解码环节,音频的解码单元还额外计算了目标时段,并且将目标时段同步给视频的解码单元。然后在同步环节,针对视频播放进度在目标时段以内的视频帧和视频播放进度在目标时段以外的视频帧,会按照上述实施例介绍的方式分别进行处理。
以及图11中的实现方式也类似,相关的处理流程与上述图2介绍的类似,不同之处在于,在解码环节,音频的解码单元会确定目标时段,并且将目标时段同步给视频的解码单元。
之后在同步环节,针对视频播放进度在目标时段以内的视频帧,也就是说缺失音频帧的音频数据部分,可以按照视频帧的第二播放时间戳自行计算第二播放时刻,以避免出现针对不存在音频数据的部分出现视频帧大量错误丢帧的情况出现。
而针对视频播放进度在目标时段以外的视频帧,也就是说存在音频帧的音频数据部分,可以按照音频播放进度确定视频帧的第三播放时刻,以保证音频数据和视频数据的同步播放。
综上所述,本申请实施例提供的音视频同步方法,可以有效的实现音频数据和视频数据的同步播放,又可以有效的避免因为音频数据的确实导致视频帧出现大量的异常丢帧,导致音视频文件跳转播放的情况出现,有效保证了音视频文件的播放稳定性和正确性。
图12为本申请实施例提供的音视频同步装置的结构示意图。如图12所示,该装置120包括:获取模块1201、确定模块1202、处理模块1203;
获取模块1201,用于根据音视频文件获取音频数据和视频数据,所述音频数据中包括多个音频帧,所述视频数据中包括多个视频帧;
确定模块1202,用于针对任一个所述音频帧,根据所述音频帧的第一播放时间戳,确定所述音频帧的第一播放时刻,并在所述第一播放时刻播放所述音频帧;
所述确定模块1202,还用于根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段;
所述确定模块1202,还用于针对任一个所述视频帧,在所述视频数据的视频播放进度属于所述目标时段时,根据所述视频帧的第二播放时间戳,确定所述视频帧的第二播放时刻,并在所述第二播放时刻播放所述视频帧。
在一些实现方式中,所述确定模块1202具体用于:
针对任一个所述音频帧,确定所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的第一时长;
若所述第一时长大于或等于预设时长,则将所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的时段,确定为所述目标时段。
在一些实现方式中,所述获取模块1201还用于:
在所述视频数据的视频播放进度不属于所述目标时段时,获取所述音频数据的音频播放进度;
所述确定模块1202还用于:
根据所述音频播放进度,确定所述视频帧的第三播放时刻,并在所述第三播放时刻播放所述视频帧。
在一些实现方式中,所述获取模块1201具体用于:
获取第一音频帧的第一播放时刻,第一音频帧为已缓存的音频数据中的最后一个音频帧;
根据音频数据的底层写入时长和底层播放时长,确定所述音频数据的未播放时长,所述底层写入时长为已缓存的所述音频数据的总时长,底层播放时长为已播放的所述音频数据的总时长;
根据所述第一音频帧的第一播放时刻和所述未播放时长,确定所述音频数据的音频播放进度。
在一些实现方式中,所述确定模块1202具体用于:
根据当前系统时刻以及确定所述音频播放进度时的历史系统时刻,对所述音频播放进度进行修正,得到修正后的音频播放进度;
根据所述视频帧的第二播放时间戳和所述修正后的音频播放进度,确定音视频播放误差;
根据所述音视频播放误差和所述当前系统时刻,确定所述视频帧的第三播放时刻。
在一些实现方式中,所述确定模块1202具体用于:
若所述第三播放时刻晚于当前系统时刻,则在所述第三播放时刻播放所述视频帧。
在一些实现方式中,所述装置还包括:处理模块1203;
所述处理模块1203具体用于:
若所述第三播放时刻早于当前系统时刻,则丢弃所述视频帧。
在一些实现方式中,所述确定模块1202具体用于:
根据当前系统时刻以及所述历史系统时刻,确定时间误差;
根据所述时间误差对所述音频播放进度进行修正,得到修正后的音频播放进度。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例不再赘述。
本申请实施例提供的音视频同步方法,可以应用在具备通信功能的电子设备中。电子设备包括终端设备,终端设备的具体设备形态等可以参照上述相关说明,此处不再赘述。
本申请实施例提供一种终端设备,如图13所示,该终端设备130包括:包括:处理器1301和存储器1302;存储器1302存储计算机执行指令;处理器1301执行存储器1302存储的计算机执行指令,使得终端设备130执行上述方法。
当存储器1302独立设置时,该终端设备还包括总线1203,用于连接所述存储器1202和处理器1301。
本申请实施例提供一种芯片。芯片包括处理器,处理器用于调用存储器中的计算机程序,以执行上述实施例中的技术方案。其实现原理和技术效果与上述相关实施例类似,此处不再赘述。
本申请实施例还提供了一种计算机可读存储介质。计算机可读存储介质存储有计算机程序。计算机程序被处理器执行时实现上述方法。上述实施例中描述的方法可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。如果在软件中实现,则功能可以作为一个或多个指令或代码存储在计算机可读介质上或者在计算机可读介质上传输。计算机可读介质可以包括计算机存储介质和通信介质,还可以包括任何可以将计算机程序从一个地方传送到另一个地方的介质。存储介质可以是可由计算机访问的任何目标介质。
一种可能的实现方式中,计算机可读介质可以包括RAM,ROM,只读光盘(compactdisc read-only memory,CD-ROM)或其它光盘存储器,磁盘存储器或其它磁存储设备,或目标于承载的任何其它介质或以指令或数据结构的形式存储所需的程序代码,并且可由计算机访问。而且,任何连接被适当地称为计算机可读介质。例如,如果使用同轴电缆,光纤电缆,双绞线,数字用户线(Digital Subscriber Line,DSL)或无线技术(如红外,无线电和微波)从网站,服务器或其它远程源传输软件,则同轴电缆,光纤电缆,双绞线,DSL或诸如红外,无线电和微波之类的无线技术包括在介质的定义中。如本文所使用的磁盘和光盘包括光盘,激光盘,光盘,数字通用光盘(Digital Versatile Disc,DVD),软盘和蓝光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光光学地再现数据。上述的组合也应包括在计算机可读介质的范围内。
本申请实施例提供一种计算机程序产品,计算机程序产品包括计算机程序,当计算机程序被运行时,使得计算机执行上述方法。
本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程设备的处理单元以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理单元执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (11)
1.一种音视频同步方法,其特征在于,包括:
根据音视频文件获取音频数据和视频数据,所述音频数据中包括多个音频帧,所述视频数据中包括多个视频帧;
针对任一个所述音频帧,根据所述音频帧的第一播放时间戳,确定所述音频帧的第一播放时刻,并在所述第一播放时刻播放所述音频帧;
根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段;
针对任一个所述视频帧,在所述视频数据的视频播放进度属于所述目标时段时,根据所述视频帧的第二播放时间戳,确定所述视频帧的第二播放时刻,并在所述第二播放时刻播放所述视频帧。
2.根据权利要求1所述的方法,其特征在于,所述根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段,包括:
针对任一个所述音频帧,确定所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的第一时长;
若所述第一时长大于或等于预设时长,则将所述音频帧的第一播放时刻和所述音频帧的前一个音频帧的第一播放时刻之间的时段,确定为所述目标时段。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
在所述视频数据的视频播放进度不属于所述目标时段时,获取所述音频数据的音频播放进度;
根据所述音频播放进度,确定所述视频帧的第三播放时刻,并在所述第三播放时刻播放所述视频帧。
4.根据权利要求3所述的方法,其特征在于,所述获取所述音频数据的音频播放进度,包括:
获取第一音频帧的第一播放时刻,第一音频帧为已缓存的音频数据中的最后一个音频帧;
根据音频数据的底层写入时长和底层播放时长,确定所述音频数据的未播放时长,所述底层写入时长为已缓存的所述音频数据的总时长,底层播放时长为已播放的所述音频数据的总时长;
根据所述第一音频帧的第一播放时刻和所述未播放时长,确定所述音频数据的音频播放进度。
5.根据权利要求3所述的方法,其特征在于,所述根据所述音频播放进度,确定所述视频帧的第三播放时刻,包括:
根据当前系统时刻以及确定所述音频播放进度时的历史系统时刻,对所述音频播放进度进行修正,得到修正后的音频播放进度;
根据所述视频帧的第二播放时间戳和所述修正后的音频播放进度,确定音视频播放误差;
根据所述音视频播放误差和所述当前系统时刻,确定所述视频帧的第三播放时刻。
6.根据权利要求5所述的方法,其特征在于,所述在所述第三播放时刻播放所述视频帧,包括:
若所述第三播放时刻晚于当前系统时刻,则在所述第三播放时刻播放所述视频帧。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
若所述第三播放时刻早于当前系统时刻,则丢弃所述视频帧。
8.根据权利要求5所述的方法,其特征在于,所述根据当前系统时刻以及确定所述音频播放进度时的历史系统时刻,对所述音频播放进度进行修正,得到修正后的音频播放进度,包括:
根据当前系统时刻以及所述历史系统时刻,确定时间误差;
根据所述时间误差对所述音频播放进度进行修正,得到修正后的音频播放进度。
9.一种音视频同步装置,其特征在于,包括:
获取模块,用于根据音视频文件获取音频数据和视频数据,所述音频数据中包括多个音频帧,所述视频数据中包括多个视频帧;
确定模块,用于针对任一个所述音频帧,根据所述音频帧的第一播放时间戳,确定所述音频帧的第一播放时刻,并在所述第一播放时刻播放所述音频帧;
所述确定模块,还用于根据各所述音频帧的第一播放时刻,确定不存在音频帧的目标时段;
所述确定模块,还用于针对任一个所述视频帧,在所述视频数据的视频播放进度属于所述目标时段时,根据所述视频帧的第二播放时间戳,确定所述视频帧的第二播放时刻,并在所述第二播放时刻播放所述视频帧。
10.一种终端设备,其特征在于,包括:处理器和存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,使得所述终端设备执行如权利要求1-8中任一项所述的方法。
11.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310030386.XA CN115834943B (zh) | 2023-01-10 | 2023-01-10 | 音视频同步方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310030386.XA CN115834943B (zh) | 2023-01-10 | 2023-01-10 | 音视频同步方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115834943A CN115834943A (zh) | 2023-03-21 |
CN115834943B true CN115834943B (zh) | 2023-07-04 |
Family
ID=85520500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310030386.XA Active CN115834943B (zh) | 2023-01-10 | 2023-01-10 | 音视频同步方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115834943B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106658135A (zh) * | 2016-12-28 | 2017-05-10 | 北京奇艺世纪科技有限公司 | 一种音视频播放方法及装置 |
CN109348247A (zh) * | 2018-11-23 | 2019-02-15 | 广州酷狗计算机科技有限公司 | 确定音视频播放时间戳的方法、装置及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006157822A (ja) * | 2004-12-01 | 2006-06-15 | Matsushita Electric Ind Co Ltd | 再生装置および再生方法 |
CN101047842A (zh) * | 2006-03-27 | 2007-10-03 | 中兴通讯股份有限公司 | 无线二进制运行环境手机播放流媒体音视频的方法 |
JP4916988B2 (ja) * | 2007-09-25 | 2012-04-18 | さゆり 堀 | 映像音声再生装置、及び映像音声再生方法 |
CN105657447A (zh) * | 2016-01-06 | 2016-06-08 | 无锡天脉聚源传媒科技有限公司 | 一种视频合并方法及装置 |
CN112153447B (zh) * | 2020-09-27 | 2022-06-14 | 海信视像科技股份有限公司 | 一种显示设备及音画同步控制方法 |
-
2023
- 2023-01-10 CN CN202310030386.XA patent/CN115834943B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106658135A (zh) * | 2016-12-28 | 2017-05-10 | 北京奇艺世纪科技有限公司 | 一种音视频播放方法及装置 |
CN109348247A (zh) * | 2018-11-23 | 2019-02-15 | 广州酷狗计算机科技有限公司 | 确定音视频播放时间戳的方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115834943A (zh) | 2023-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101626516B (zh) | 再现装置及方法 | |
US8850502B2 (en) | Content reproduction device, content reproduction system, and content reproduction method | |
EP3748972B1 (en) | Video recording method and system | |
CN107277558B (zh) | 一种实现直播视频同步的播放器客户端、系统及方法 | |
KR101135506B1 (ko) | 정보 처리 장치, 정보 처리 방법, 기록 매체, 및 프로그램 | |
US20180376195A1 (en) | Live streaming quick start method and system | |
EP2683174A2 (en) | Video encoding apparatus, video decoding apparatus, video encoding method, and video decoding method | |
CN106534952A (zh) | 一种源切换后片源续播方法及智能电视 | |
CN112601127B (zh) | 视频显示方法及装置、电子设备、计算机可读存储介质 | |
EP2713620A2 (en) | Video encoding apparatus, video decoding apparatus, video encoding method, and video decoding method | |
US20180367827A1 (en) | Player client terminal, system, and method for implementing live video synchronization | |
CN112929713A (zh) | 数据同步方法、装置、终端及存储介质 | |
CN106878807B (zh) | 一种视频切换方法和装置 | |
US10812839B2 (en) | Techniques for automated data record generation from live programs | |
CN115834943B (zh) | 音视频同步方法及装置 | |
US10237512B1 (en) | Automated in-play detection and video processing | |
CN102647622B (zh) | 流媒体剪辑播放进度管理方法及系统 | |
CN107820111B (zh) | 信息设备 | |
JP2011257870A (ja) | 光ディスク再生装置、光ディスク、データ配信システム、およびデータ配信方法 | |
WO2018076899A1 (zh) | 一种数据切换方法、装置、终端及计算机可读存储介质 | |
CN108966000A (zh) | 播放方法及其装置、介质、终端 | |
CN106851330B (zh) | 一种基于web技术的在线点播微课视频的打点播放方法 | |
US9263090B2 (en) | Image processing apparatus, image processing method, and program | |
CN112188258B (zh) | 暂停同步方法及装置、存储介质、用户端、多设备播放系统 | |
CN114257864B (zh) | 一种基于HLS格式视频源场景下播放器的seek方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |