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

音视频同步播放方法、装置、设备及存储介质

文献发布时间:2024-04-18 20:01:30


音视频同步播放方法、装置、设备及存储介质

技术领域

本发明涉及计算机技术领域,尤其涉及一种音视频同步播放方法、音视频同步播放装置、终端设备及计算机可读存储介质。

背景技术

随着互联网和流媒体技术的发展,视频广播和屏幕投影的需求蓬勃发展。日常生活中经常通过无线网络进行视频广播和屏幕投影,以实现将媒体资源的画面和声音从一台设备投放到另一台设备播放的需求越来越多。目前,视频广播常见的无线传输协议是DLNA,而屏幕投影常见的无线传输协议是AirPlay和Miracast。

在实际应用中,无论采用哪种无线传输协议进行媒体资源投放,均可能出现音频、视频播放不同步,以及视频卡帧、跳帧等现象,十分影响用户体验,且无线传输协议的不同以及接收设备的不同可能会导致播放效果有较大差异,使得目前的音视频同步处理技术难以兼容多种无线传输协议和多种接收设备。

发明内容

为了克服现有技术的不足,本发明的目的在于提供一种音视频同步播放方法、音视频同步播放装置、终端设备及计算机可读存储介质,能够兼容多种的无线传输协议和多种接收设备,实现良好的音视频同步处理效果。

本发明的音视频同步播放方法采用如下技术方案实现:

一种音视频同步播放方法,包括以下步骤:

媒体资源解析步骤:解析接收到的媒体资源流,分离出相应的视频流和音频流,计算视频流的帧基准时间,获取视频流的总长度,将视频流逐帧传入视频待解队列,计算音频流的帧基准时间,获取音频流的总长度,将音频流逐帧传入音频待解队列;

视频解码步骤:从视频待解队列中将视频帧逐帧出队列,计算当前出队视频帧的播放时间,将该视频帧的播放时间与时钟累加变量进行比较,当视频帧的播放时间与时钟累加变量相等时,则将该视频帧送解;

视频播放步骤:将视频帧解码完成所得到YUV视频帧送显;

音频解码步骤:从音频待解队列中将音频帧逐帧出队列,计算当前出队音频帧的播放时间,基于该播放时间对时钟累加变量赋值,并将该音频帧送解,将音频帧解码完成所得到的PCM音频帧传入音频待播队列;

音频播放步骤:从音频待播队列中将PCM音频帧逐帧送到声卡输出;

时钟累加步骤:基于预设时间间隔对时钟累加变量进行累加操作。

进一步地,在时钟累加步骤中,基于预设时间间隔对时钟累加变量进行累加操作,指的是,每1ms对时钟累加变量进行加1操作。

进一步地,在媒体资源解析步骤中,视频流的帧基准时间是基于视频流的帧率计算得到,音频流的帧基准时间是基于音频流的采样率及编码格式计算得到。

进一步地,在视频解码步骤中,视频帧的播放时间,是基于视频帧的基准时间计算所得;在音频解码步骤中,音频帧的播放时间,是基于音频帧的基准时间计算所得。

进一步地,在视频解码步骤中,将视频帧送解,指的是将视频帧送到MPP解码库进行硬件解码;在音频播放步骤中,将音频帧送解,指的是将音频帧送到ffmpeg进行软件解码。

进一步地,所述音视频同步播放方法还包括检测步骤:检测播放是否处于暂停状态以及检测视频待解队列是否为空,当检测到播放处于暂停状态时或者视频待解队列为空时,暂停视频解码步骤和音频解码步骤,直至检测到播放处于非暂停状态且视频待解队列非空时,启动视频解码步骤,并且当从视频待解队列中出队列的视频帧为I帧时,启动音频解码步骤。

本发明的音视频同步播放装置采用如下技术方案实现:

一种音视频同步播放装置,包括以下线程模块:

第一线程模块,用于执行媒体资源解析步骤:解析接收到的媒体资源流,分离出相应的视频流和音频流,计算视频流的帧基准时间,获取视频流的总长度,将视频流逐帧传入视频待解队列,计算音频流的帧基准时间,获取音频流的总长度,将音频流逐帧传入音频待解队列;

第二线程模块,用于执行视频解码步骤:从视频待解队列中将视频帧逐帧出队列,计算当前出队视频帧的播放时间,将该视频帧的播放时间与时钟累加变量进行比较,当视频帧的播放时间与时钟累加变量相等时,则将该视频帧送解;

第三线程模块,用于执行视频播放步骤:将视频帧解码完成所得到YUV视频帧送显;

第四线程模块,用于执行音频解码步骤:从音频待解队列中将音频帧逐帧出队列,计算当前出队音频帧的播放时间,基于该播放时间对时钟累加变量赋值,并将该音频帧送解,将音频帧解码完成所得到的PCM音频帧传入音频待播队列;

第五线程模块,用于执行音频播放步骤:从音频待播队列中将PCM音频帧逐帧送到声卡输出;

第六线程模块,用于执行时钟累加步骤:基于预设时间间隔对时钟累加变量进行累加操作。

进一步地,所述第二线程模块,还用于执行检测步骤:检测播放是否处于暂停状态以及检测视频待解队列是否为空,当检测到播放处于暂停状态时或者视频待解队列为空时,暂停视频解码步骤以及通知第四线程模块暂停音频解码步骤,直至检测到播放处于非暂停状态且视频待解队列非空时,启动视频解码步骤,并且当从视频待解队列中出队列的视频帧为I帧时,通知第四线程模块启动音频解码步骤。

本发明的终端设备采用如下技术方案实现:

一种终端设备,包括存储器、处理器以及存储在存储器上并且可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现上述音视频同步播放方法。

本发明的计算机可读存储介质采用如下技术方案实现:

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述音视频同步播放方法。

相比现有技术,本发明的有益效果在于:

本发明所提供的音视频同步播放方法、音视频同步播放装置、终端设备及计算机可读存储介质,是针对接收到的媒体资源流本身进行音视频同步处理,因此能够兼容多种的无线传输协议和多种接收设备,实现良好的音视频同步处理效果。

附图说明

图1为本发明实施例的音视频同步播放方法的流程图;

图2为本发明实施例的音视频同步播放装置的第一线程模块的流程图;

图3为本发明实施例的音视频同步播放装置的第二线程模块的流程图;

图4为本发明实施例的音视频同步播放装置的第三、第四、第五、第六线程模块的流程图。

具体实施方式

下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。

参考图1至图4,本发明实施例提供了一种音视频同步播放方法、音视频同步播放装置、终端设备及计算机可读存储介质。

本实施例的音视频同步播放方法,具体包括媒体资源解析步骤、检测步骤、视频解码步骤、视频播放步骤、音频解码步骤、音频播放步骤和时钟累加步骤;本发明实施例的音视频同步播放装置,包括第一线程模块(以下称线程1)、第二线程模块(以下称线程2)、第三线程模块(以下称线程3)、第四线程模块(以下称线程4)、第五线程模块(以下称线程5)和第六线程模块(以下称线程6)。

在本实施例中,媒体资源解析步骤包括:通过ffmpeg解析接收到的媒体资源流,分离出相应的视频流和音频流;计算视频流的帧基准时间,获取视频流的总长度,将视频流逐帧传入视频待解队列;计算音频流的帧基准时间,获取音频流的总长度,将音频流逐帧传入音频待解队列。在该媒体资源解析步骤中,视频流的帧基准时间是基于视频流的帧率计算得到,例如视频流的帧率是30fps,则帧基准时间是1/30s。在媒体资源解析步骤中,音频流的帧基准时间是基于音频流的采样率及编码格式计算得到,例如音频流的采样率是48000Hz,则每个采样的基准时间是1/48000s,音频帧包括有1024个采样的音频数据(AAC编码格式规定),因此可计算得每个音频帧的基准时间。需要注意到视频帧的基准时间并非是音频帧的基准时间的整数倍,这是采用时钟累加变量g_clocktime的一个重要原因。另外,获取视频流和音频流的总长度,是为了判断是否已遍历到音视频流的结尾部分,总长度可以是总时长或总帧数等。

在本实施例中,视频解码步骤包括:从视频待解队列中将视频帧逐帧出队列,计算当前出队视频帧的播放时间,将该视频帧的播放时间与时钟累加变量g_clocktime进行比较,当视频帧的播放时间与时钟累加变量g_clocktime相等时,则将该视频帧送解,此处具体指的是将视频帧送到MPP解码库进行硬件解码,用于将视频帧解码成YUV格式。在该步骤中,如果视频帧的播放时间大于时钟累加变量g_clocktime,则可计算两者之间的时间差值作为等待时间,延时相应时长后,再讲该视频帧送到MPP送解。

在本实施例中,视频播放步骤包括:将视频帧解码完成所得到YUV视频帧送显;具体地,当检测到MPP中有解码完成的YUV格式的视频帧时,则通过DRM送到显示输出进行播放。

在本实施例中,音频解码步骤包括:从音频待解队列中将音频帧逐帧出队列,计算当前出队音频帧的播放时间,基于该播放时间对时钟累加变量g_clocktime赋值,并将该音频帧送解,将音频帧解码完成所得到的PCM音频帧传入音频待播队列,此处将音频帧送解,指的是将音频帧送到ffmpeg进行软件解码。

在本实施例中,音频播放步骤包括:从音频待播队列中将PCM音频帧逐帧送到声卡输出。

在本实施例中,时钟累加步骤包括:基于预设时间间隔对时钟累加变量g_clocktime进行累加操作;例如,具体可以是每1ms对时钟累加变量g_clocktime进行加1操作。此处表明g_clocktime的精度为1ms。

在本实施例中,检测步骤包括:检测播放是否处于暂停状态以及检测视频待解队列是否为空,当检测到播放处于暂停状态时或者视频待解队列为空时,暂停视频解码步骤和音频解码步骤,直至检测到播放处于非暂停状态且视频待解队列非空时,启动视频解码步骤,并且当从视频待解队列中出队列的视频帧为I帧时,启动音频解码步骤。此处播放是否处于暂停状态,指的就是音视频的播放是否处于暂停状态,即视频播放步骤和音频播放步骤暂停,可由用户中途暂停、设置进度等动作触发。

在本实施例的检测步骤,还包括:检测音频解码标志位为是否为1,该音频解码标志位在刚开始拉流时、暂停播放时、调整播放进度、待解队列为空时设置为0。当检测到播放处于非暂停状态且视频待解队列非空时,启动视频解码步骤,此时音频解码标志位为0,当从视频待解队列中出队列的视频帧为I帧时,启动音频解码步骤,此时音频待解队列的第一个音频帧出队,将其播放时间赋值给时钟累加变量g_clocktime,然后将音频解码标志位设置为1,再将该音频帧送解;其中,等检测到音频解码标志位为1时,才开始计算这个I帧的播放时间。设置音频解码标志位的目的是为了保证视频帧解码在音频帧解码之后,并保证g_clocktime先被赋值后再播放相应的音视频帧。

在本实施例的视频解码步骤中,视频帧的播放时间,是基于视频帧的基准时间计算所得;在本实施例的音频解码步骤中,音频帧的播放时间,是基于音频帧的基准时间计算所得。

本实施例的音视频同步播放装置中,其特征在于,线程1用于执行媒体资源解析步骤,线程2用于执行视频解码步骤,线程3用于执行视频播放步骤,线程4用于执行音频解码步骤,线程5用于执行音频播放步骤,线程6用于执行时钟累加步骤。这些步骤的具体内容与上述方法的相应步骤一致。

在本实施例中,线程2还用于执行检测步骤:检测播放是否处于暂停状态以及检测视频待解队列是否为空,当检测到播放处于暂停状态时或者视频待解队列为空时,暂停视频解码步骤以及通知线程4暂停音频解码步骤,直至检测到播放处于非暂停状态且视频待解队列非空时,启动视频解码步骤,并且当从视频待解队列中出队列的视频帧为I帧时,通知线程4启动音频解码步骤。此处播放是否处于暂停状态,指的就是音视频的播放是否处于暂停状态,即视频播放步骤和音频播放步骤暂停,可由用户中途暂停、设置进度等动作触发。

线程2所执行的检测步骤,还包括:检测音频解码标志位为是否为1,该音频解码标志位在刚开始拉流时、暂停播放时、调整播放进度、待解队列为空时设置为0。当线程2检测到播放处于非暂停状态且视频待解队列非空时,启动视频解码步骤,此时音频解码标志位为0,当从视频待解队列中出队列的视频帧为I帧时,通知线程4启动音频解码步骤,此时音频待解队列的第一个音频帧出队,将其播放时间赋值给时钟累加变量g_clocktime,然后将音频解码标志位设置为1,再将该音频帧送解;其中,等线程2检测到音频解码标志位为1时,才开始计算这个I帧的播放时间。设置音频解码标志位的目的是为了保证视频帧解码在音频帧解码之后,并保证g_clocktime先被赋值后再播放相应的音视频帧。

本实施例的音视频同步播放装置,还应包括有WiFi模块,用于实现流媒体的无线传输。例如,视频广播常见的无线传输协议是DLNA,流媒体发送端根据DLNA协议发起投屏时,会推送相应的URL地址,线程1可根据该URL地址拉取媒体资源流并进行解析。又例如,WiFi模块支持P2P模式,可应用Miracast协议,其为一种基于WiFi P2P的音视频传输协议,即其实际上是从设备到设备点对点传输的一种协议,其他设备可以通过WLAN来搜索本装置对外发出的WiFi热点,并直接连接到本装置上传输音视频,由线程1对接收到的流进行解析。又例如,WiFi模块支持AP模式,可应用AirPlay协议,AirPlay是苹果公司的一种无线流媒体传输技术,本装置通过在局域网上开放一个AirPlay服务器来供其他设备在局域网上搜索,在本装置与发送端设备建立连接后从设备获取音视频流,由线程1进行解析。此处WiFi模块所提到的技术内容都是非常常见的现有技术,虽然这三种无线传输协议从原理来说并不相同,但是只要能将音视频流传输到本装置上即可调用线程1-线程6进行音视频的同步处理。

通过上述举例,容易理解的是,本实施例的方法和装置,实际上是针对接收到媒体资源流本身作音视频同步处理,因此能够兼容多种的无线传输协议和多种接收设备,实现良好且相似的音视频同步处理效果。

传统的音视频同步处理技术主要是通过同步发送设备和接收设备的时间戳以及在接收设备上使用缓存的方式来实现音视频同步播放。而本实施例的方法和装置,其音视频同步处理的技术原理基于帧基准时间进行操作,具体如下:

计算视频流的帧基准时间和音频流的帧基准时间,可以得到播放一个视频帧对应播放多少个音频帧,因为音频帧是按播放时间从前到后按顺序排列的,因此设置音频待播队列,保证音频能够按顺序播放,不会出现音频卡顿等异常播放,以方便基于音频帧的播放时间,对视频帧的解码播放顺序、具体时机进行控制;由于视频帧的基准时间不是音频帧的基准时间的整数倍,因此采用时钟累加变量g_clocktime,音频帧送解的同时以其播放时间对g_clocktime赋值,g_clocktime本身每隔1ms累加计数一次,从而能够将视频帧的播放时间与g_clocktime进行比较是否相等,实现对视频帧的解码播放顺序、具体时机达到高精度的控制,最终达到音视频同步播放的目的。

本实施例的方法和装置,能够兼容多种的无线传输协议和多种接收设备,实现良好且相似的音视频同步处理效果;本实施例的方法和装置,通过使用队列,在处理音视频数据的时候可以建立缓冲的机制,不至于出现播放第一帧花屏的现象,可以解决中途设置进度时、pts出现变化出现的卡顿丢帧等问题;本实施例的方法和装置,能够有效避免因不同解码速度所导致的音视频播放不同步,以及跳帧、卡顿等现象。

本发明实施例还提供一种终端设备,包括存储器、处理器以及存储在存储器上并且可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如本实施例所述的音视频同步播放方法。

本实施例的终端设备(可用作接收端),实际上是针对接收到媒体资源流本身作音视频同步处理,因此能够兼容多种的无线传输协议和多种接收设备,实现良好且相似的音视频同步处理效果。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如本实施例所述的音视频同步播放方法。

本实施例的计算机可读存储介质,实际上是针对接收到媒体资源流本身作音视频同步处理,因此能够兼容多种的无线传输协议和多种接收设备,实现良好且相似的音视频同步处理效果。

上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

技术分类

06120116556767