首页 / 直播合唱音频的同步方法、计算机设备及存储介质

直播合唱音频的同步方法、计算机设备及存储介质实质审查 发明

技术领域

[0001] 本申请涉及直播技术领域,特别是涉及直播合唱音频的同步方法、计算机设备及存储介质。

相关背景技术

[0002] 随着互联网技术和通信技术的发展,社会进入了智能互联的时代,在互联网进行互动、娱乐和工作也越来越普遍,其中较为普遍的就是直播技术,人们能够通过智能设备能够随时随地观看直播或者进行直播,极大地丰富人们的生活以及拓宽了人们的视野。
[0003] 为了丰富直播的形式,在直播过程中主播可以向其他主播发起合唱请求,从而与其他主播以合唱的形式进行直播。但是在直播合唱的过程中,由于主唱和副唱的声音来源于不同的终端,导致不便于对主唱音频、副唱音频和伴奏音频进行较好的混合同步,进而使得观众在直播间所收听到的合唱出可能会出现不同步的情况。

具体实施方式

[0014] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0015] 随着直播行业的快速发展,直播成为了人们通过互联网娱乐的一种重要方式。在直播过程中,主播在主播终端进行表演,用户可以在观众终端对主播的表演进行观看,也可以通过观众终端跟主播进行互动。主播的直播画面可以在个人直播间进行呈现。在直播过程中,通过呈现各种各样不同的直播形式来吸引用户的观看,例如在直播过程中,主播可以向其他主播发出合唱请求,在其他主播接受并应答合唱请求后,可以在该主播的直播界面同时显示该主播和其他主播的直播界面,并播放该主播与其他主播进行合唱的音频,从而提高用户观看的兴趣。
[0016] 发明人经过长期研究发现,在对直播合唱中的主唱端所产生的主唱音频帧、副唱端所产生的副唱音频帧以及伴奏音频帧进行混合的过程中,由于主唱音频帧、副唱音频帧是在不同的终端进行采集的,由于网络延迟或者主唱、副唱所唱的快或慢,都会导致在对主唱音频帧、副唱音频帧和伴奏音频帧进行混合的过程中无法实现较好的同步,进而导致观众在直播间所收听到的混合后的音频同步效果较差,给观众造成不好的收听体验。为了改善上述技术问题,本申请提出以下实施例。
[0017] 如图1所示,本申请直播系统实施例描述的直播系统1可以包括服务器10、主播终端20以及观众终端30。主播终端20和观众终端30可以为电子设备,具体地,主播终端20和观众终端30为安装有相应客户终端程序的电子设备,也即客户终端。电子设备可以是移动终端、计算机、服务器或者其他终端等,移动终端可以是手机、笔记本电脑、平板电脑、智能穿戴设备等,计算机可以是台式电脑等。
[0018] 服务器10可以从主播终端20中对直播数据流拉流,并可以将获取的直播数据流进行相应的处理后推流到观众终端30。观众终端30获取到直播数据流后即可观看主播或者嘉宾的直播过程。直播数据流的混流可以发生在服务器10、主播终端20和观众终端30中的至少一方。主播终端20和主播终端20之间、主播终端20和观众终端30之间均可以进行视频连麦或语音连麦。在连麦过程中,连麦方可以将包括视频流在内的直播数据流推送到服务器10,进而将相应的直播数据推送至相应的连麦方以及观众终端30。主播终端20和观众终端
30能够在直播间中显示到相应的直播画面。具体地,在直播合唱的过程中,主播终端20可以包括主唱端40和副唱端50,主唱端40向副唱端50发送合唱请求,副唱端50接收并应答合唱请求,也就是说,副唱端50与主唱端40进行连麦,在主唱端40和副唱端50的直播间中均能够同时显示主唱端40和副唱端50的直播画面,并播放主唱端40与副唱端50进行合唱的音频以及对应的伴奏。具体地,服务器10例如可以是混画服务器,不仅可以用于对主唱端40和副唱端50所产生的主唱音频帧和副唱音频帧进行混流和同步,还可以对主唱端40和副唱端50的画面进行处理,如虚拟背景、特效叠加等处理。
[0019] 当然,主播终端20和观众终端30是相对而言的,处于在直播过程中的终端为主播终端20,处于观看直播过程的终端为观众终端30。
[0020] 如图2所示,本申请直播合唱音频的同步方法实施例可以以服务器10为执行主体。本实施例可以包括如下步骤:S100:获取主唱端的主唱音频帧、副唱端的副唱音频帧和伴奏音频帧。S200:将主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳统一转换为以服务器系统时间为基准的音频时间戳。S300:利用主唱音频帧、副唱音频帧和伴奏音频帧转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步。
[0021] 在直播合唱的过程中,获取主唱端40的主唱音频帧、副唱端50的副唱音频帧和伴奏音频帧,由于主唱音频帧、副唱音频帧和伴奏音频帧均采集于不同的终端,故主唱音频帧、副唱音频帧和伴奏音频帧所携带的音频时间戳的基准均是不相同的。通过将主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳统一转换为以服务器10系统时间为基准的音频时间戳,实现统一主唱音频帧、副唱音频帧和伴奏音频帧的音频时间戳的基准,进而可以利用主唱音频帧、副唱音频帧和伴奏音频帧转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步,使得主唱音频帧、副唱音频帧和伴奏音频帧可以以同一系统时间为基准的音频时间戳进行同步,有利于提高主唱音频帧、副唱音频帧和伴奏音频帧在同步过程中的准确性,提高观众在收听直播合唱过程中所听到的同步后的音频的质量,提高观众的收听体验感。
[0022] 本实施例描述的方法可应用于服务器10在接收到主唱端40的主唱音频帧和副唱端50的副唱音频帧以及伴奏音频帧之后,对主唱音频帧、副唱音频帧和伴奏音频帧进行同步和混流的场景,如图3所示,以下对本实施例以服务器10为执行主体进行详细描述。
[0023] S100:获取主唱端的主唱音频帧、副唱端的副唱音频帧和伴奏音频帧。
[0024] 主唱端40可以包括在直播合唱过程中发起合唱请求的一方。副唱端50可以包括在直播合唱过程中,接受并应答合唱请求,参与主唱端40所发起的合唱的一方或者多方。主唱音频帧可以包括主唱端40所采集到的声音的音频帧,具体地,主唱音频帧可以包括主唱端40所携带的音频设备所采集到的处于主唱端40的主播所产生的演唱声音的音频帧。副唱音频帧可以包括副唱端50所采集到的声音的音频帧,具体地,副唱音频帧可以包括副唱端50所携带的音频设备所采集到的处于副唱端50的主播所产生的演唱声音的音频帧。伴奏音频帧可以包括在直播合唱过程中所要合唱歌曲对应的伴奏的音频帧。
[0025] 举例来说,当主唱端40和副唱端50为移动终端,如手机时,音频设备可以为手机自带的麦克风。在直播合唱过程中,作为主唱的主播可以通过手机的麦克风采集自己的演唱声音,作为副唱的主播也可以通过手机的麦克风采集自己的演唱声音,然后通过手机将采集到的声音发送到服务器10中与伴奏音频帧进行混合,得到混合后的音频文件,并通过服务器10分发到主唱端40、副唱端50以及当前处于直播间的观众对应的观众终端30中,使得观众可以收听到主唱和副唱的合唱音频。
[0026] 在一种实现方式中,在获取主唱端40的主唱音频帧、副唱端50的副唱音频帧和伴奏音频帧之前,主唱端40可以先向服务器10发送合唱请求,具体地,合唱请求可以携带请求发送时刻的NTP时间,uid和合唱曲目信息,uid可以用于标识主唱端40对应的主播。服务器10在接收到主唱端40发送的合唱请求之后,可以在频道内广播合唱请求,以确定副唱端50。
频道可以是用于供想要进行合唱的主播进入的频道,包括主唱端40和副唱端50,当服务器
10在频道内广播合唱请求后,当前处于该频道中的所有主播都能够接收到该合唱请求。当处于该频道中的至少一个主播接收合唱请求后,可以记录接收合唱请求时间NTP’,进行对应合唱曲目下载,并在合唱曲目下载就绪后向服务器10发送合唱应答信息。具体地,合唱应答信息可以携带从主唱端40到副唱端50的延迟时间,且延迟时间=NTP’‑NTP。
[0027] 服务器可以10将合唱应答信息发送给主唱端40,主唱端40接收到合唱应答信息之后,可以计算主唱端40的伴奏启动延迟,并向服务器10发送合唱同步请求。具体地,合唱同步请求可以携带延迟时间以及主唱端40对应的uid。服务器10在接收到主唱端40发送的合唱同步请求之后,可以在频道内广播合唱同步请求。处于频道内的至少一个副唱端50接收到合唱同步请求后,可以根据自身延迟时间以及所有副唱端50中最大的延迟时间,计算副唱端50各自对应的伴奏启动延迟。具体地,自身延迟时间可以是基于副唱端50的硬件条件所确定的延迟时间,不同的副唱端50的自身延迟时间可以是不相同的。副唱端50的伴奏启动延迟可以为所有副唱端50中最大的延迟时间减去该副唱端50的自身延迟时间。
[0028] 主唱端40和副唱端50在计算出各自对应的伴奏启动延迟之后,可以基于各自的伴奏启动延迟,启动合唱任务。主唱端40和副唱端启动合唱任务之后,可以通过各自自带的音频设备,如麦克风,获取伴奏和同步信息。
[0029] 通过服务器10进行频道内广播,把伴奏和同步信息同步到服务器10,如混画服务器,进行合成。具体地,主唱音频帧和副唱音频帧各自携带有同步信息,同步信息可以包括音频时间戳、对应的伴奏时间戳、对应的伴奏进度以及唱端标志。具体地,音频时间戳可以包括音频设备采集到该音频帧对应的时间戳。伴奏进度可以包括该音频帧对应的伴奏播放的时长。伴奏时间戳可以包括该音频帧对应的伴奏进度对应的时间戳。唱端标志可以包括用于标识该音频帧所产生的唱端的标志。具体地,同步信息还可以包括命令信息。命令信息可以是基于用户的动作传回来的信息,例如,主唱端40在合唱过程中突然暂停,则此时的命令信息可以为暂停,并且其他副唱端50的命令信息也都为暂停。
[0030] 服务器10在接收到主唱端40和副唱端50的同步信息后,可以对主唱端40和副唱端50的同步信息进行解析,以获取主唱端40的主唱音频帧、副唱端50的副唱音频帧和伴奏音频帧。
[0031] 在一种实现方式中,对于如何获取主唱端40的主唱音频帧、副唱端50的副唱音频帧和伴奏音频帧,可以参考S100包括的如下步骤:
[0032] S110:接收主唱端的主唱音频流和副唱端的副唱音频流。
[0033] 主唱端40和副唱端50在启动合唱之后,主唱端40可以将采集到的主场音频流上传到服务器10中,副唱端50也可以将采集到的副唱音频流上传到服务器10。服务器10可以接收主唱音频流和副唱音频流,从而服务器10可以对主唱音频流和副唱音频流进行合唱,进而通过服务器10将合唱后的音频流发送给观众终端30,以供观众进行收听。
[0034] S120:从主唱音频流中获取伴奏音频帧对应的伴奏链接。
[0035] 服务器10在接收到主唱音频流后,由于主唱音频流可以包括主唱在进行合唱过程中的伴奏音频帧和主唱演唱声音对应的音频帧,故服务器10可以从主唱音频流中获取伴奏音频帧,进而获取伴奏音频帧对应的伴奏链接。具体地,服务器10可以从主唱音频流中获取伴奏音频帧对应的合唱曲目的URL。通过获取伴奏帧对应的伴奏链接,可以确定出主唱端40所发起合唱的合唱曲目,进而可以获取与合唱曲目对应的伴奏音频帧。
[0036] S130:利用伴奏链接从服务器本地或者互联网上获取伴奏音频帧。
[0037] 服务器10在从主唱音频流中获取伴奏音频帧对应的伴奏链接之后,可以利用伴奏链接从服务器10本地或者互联网上获取伴奏音频帧。具体的,服务器10可以利用获取到的伴奏音频帧对应的合唱曲目的URL,从服务器10本地查找或者互联网上下载合唱曲目对应的伴奏音频,进而获取对应的伴奏音频帧。
[0038] 通过利用伴奏链接从服务器10获取伴奏音频帧用于对主唱音频帧和副唱音频帧的合唱,可以降低由于主唱端40的丢包而引起的伴奏混音输出时卡顿的概率,有利于提高在对主唱音频帧、副唱音频帧以及伴奏音频帧进行混流和同步过程中的稳定性,进而提高所输出的混流和同步后的音频的质量。
[0039] 在一种实现方式中,S100还可以包括如下步骤:
[0040] S140:获取主唱端的第一个主唱音频帧。
[0041] 第一个主唱音频帧可以包括服务器10接收到的主唱端40所发送的第一个音频帧,也可以包括服务器10接收到的第一个携带有同步信息的音频帧。如果服务器10获取到的第一个音频帧不是第一个主唱音频帧的话,且不携带同步信息,那么获取到的音频帧则可以丢弃。当获取到主唱端40的第一个携带有同步信息主唱音频帧时,则开始进行处理。
[0042] 在一种实现方式中,对于如何获取主唱端40的第一个主唱音频帧,可以参考S140包括的如下步骤:
[0043] S141:从存储有主唱音频帧和副唱音频帧的预设缓冲区中获取当前待转换的音频帧。
[0044] 预设缓冲区可以包括服务器10中用于存储接收到的主唱音频帧和副唱音频帧。具体地,预设缓冲区可以包括抖动缓冲区。服务器10在对主唱音频帧和副唱音频帧进行同步的过程中,可以从存储有主唱音频帧和副唱音频帧的预设缓冲区中获取当前待转换的音频帧。
[0045] 在一种实现方式中,S141可以包括如下步骤:
[0046] S1411:获取主唱端的主唱音频流和副唱端的副唱音频流,并存储于预设缓冲区中,以在预设缓冲区存储主唱音频帧和副唱音频帧。
[0047] 服务器10在接收到主唱端40发送的主唱音频流以及副唱端50发送的副唱音频流之后,可以将主唱音频流和副唱音频流存储于预设缓冲区中,以在预设缓冲区中存储主唱音频帧和副唱音频帧,从而使得在对主唱音频流和副唱音频流进行混流的过程中可以从预设缓冲区中提取主唱音频帧和副唱音频帧进行处理。
[0048] S142:判断当前待转换的音频帧是否为在时间序列上第一个携带同步信息的音频帧。
[0049] 服务器10从预设缓冲区中获取到当前待转换的音频帧后,可以判断当前待转换的音频帧是否为在时间序列上第一个携带同步信息的音频帧。具体地,服务器10可以对获取到的待转换的音频帧进行解析,判断该待转换的音频帧是否携带有同步信息,并且可以基于解析得到的音频时间戳判断当前待转换的音频帧是否为在时间序列上第一个携带同步信息的音频帧。
[0050] S143:若是,则基于当前待转换的音频帧的唱端标志判断当前待转换的音频帧是否为主唱音频帧。
[0051] 若服务器10基于当前待转换的音频帧的同步信息判定当前待转换的音频帧是在时间序列上第一个携带同步信息的音频帧,则可以基于当前待转换的音频帧的唱端标志判断当前待转换的音频帧是否为主唱音频帧。具体地,服务器10在对当前待转换的音频帧的同步信息进行解析后可以得到当前待转换的音频帧对应的唱端标志,进而可以基于唱端标志判断当前待转换的音频帧是否为主唱音频帧。
[0052] S144:若是,则确定当前待转换的音频帧为第一个主唱音频帧。
[0053] 若基于唱端标志判定当前待转换的音频帧为主唱音频帧,则可以判定当前待转换的音频帧为第一个主唱音频帧。
[0054] 服务器10在获取到第一个主唱音频帧之后,可以对第一个主唱音频帧以及后续获取到的其他主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳进行转换,以使主唱音频帧、副唱音频帧和伴奏音频帧的音频时间戳能够以同一基准进行计算,进而能够在基于音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行混流的过程中实现主唱音频帧、副唱音频帧和伴奏音频帧的同步性。
[0055] S200:将主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳统一转换为以服务器系统时间为基准的音频时间戳。
[0056] 由于主唱音频帧携带的音频时间戳是以主唱端40的系统时间为基准的时间戳,副唱音频帧携带的音频时间戳是以副唱端50的系统时间为基准的时间戳,伴奏音频帧携带的音频时间戳是以服务器10的系统时间为基准的时间戳,在对主唱音频帧、副唱音频帧和伴奏音频帧进行混流的时候,若按照主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳进行混流,则可能受到网络情况、延迟或者丢帧等情况导致不同步,从而导致混流后的合唱音频不同步,影响观众的收听体验感。因此,可以通过统一主唱音频帧、副唱音频帧和伴奏音频帧各自音频时间戳的基准时间,从而有利于提高主唱音频帧、副唱音频帧和伴奏音频帧的同步性。具体地,可以通过将主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳统一转换为以服务器系统时间为基准的音频时间戳,实现对主唱音频帧、副唱音频帧和伴奏音频帧各自音频时间戳的同步。
[0057] 在一种实现方式中,对于如何将主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳统一转换为以服务器系统时间为基准的音频时间戳,可以参考S200包括的如下步骤:
[0058] S210:将主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳分别转换为以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。
[0059] 时间零点可以包括在对主唱音频帧、副唱音频帧以及伴奏音频帧分别进行转换时作为时间基准的时间点。
[0060] 第一个主唱音频帧对应的伴奏时间戳可以包括对第一个主唱音频帧所携带的同步信息进行解析所得到的对应的伴奏时间戳。
[0061] 服务器10系统时间可以包括服务器10本身用于计量时间的标准时间,具体地,若服务器10为混画服务器,则服务器10系统时间则可以为混画服务器的系统时间。
[0062] 由于第一个主唱音频帧携带有同步信息,故在对主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳进行转换的过程中可以以第一个主唱音频帧对应的伴奏时间戳为时间零点为基准进行转换。并且由于在对主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳进行转换的过程中,可以通过服务器10对主唱音频帧、副唱音频帧以及伴奏音频帧进行混流,故可以以服务器10系统时间作为基准来对主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳进行转换,从而可以降低由于主唱端40或副唱端50的延迟或丢帧而造成的误差,提高在对主唱音频帧、副唱音频帧以及伴奏音频帧进行混流过程中的同步性。
[0063] 在一种实现方式中,对于如何将主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳分别转换为以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳,可以参考S210包括的如下步骤:
[0064] S211:获取第一个主唱音频帧的服务器系统接收时间。
[0065] 第一个主唱音频帧的服务器10系统接收时间可以包括服务器10在接收到第一个主唱音频帧时所对应的服务器10系统时间。具体地,当服务器10接收到主唱端40发送的第一个主唱音频帧时,此时服务器10对应的系统时间可以为RecvTime,则可以将RecvTime确定为第一个主唱音频帧的服务器10系统接收时间。举例来说,当服务器10接收到主唱端40发送的第一个主唱音频帧时,此时服务器10对应的系统时间为RecvTime=20000ms,则可以将RecvTime=20000ms确定为第一个主唱音频帧的服务器10系统接收时间。
[0066] S212:基于第一个主唱音频帧的服务器系统接收时间和第一个主唱音频帧对应的伴奏时间戳计算时间转换基准值。
[0067] 时间转换基准值可以包括用于将主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳转换为以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的音频时间戳的过程中进行计算的基准值。通过时间转换值对主唱音频帧、副唱音频帧以及伴奏音频帧各自携带的音频时间戳进行转换,从而可以得到以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的主唱音频帧、副唱音频帧以及伴奏音频帧各自对应的转换后的音频时间戳。
[0068] 在获取到第一个主唱音频帧的服务器10系统接收时间之后,可以基于第一个主唱音频帧的服务器10系统接收时间和第一个主唱音频帧对应到的伴奏时间戳计算时间转换基准值。
[0069] 对于如何基于第一个主唱音频帧的服务器10系统接收时间和第一个主唱音频帧对应的伴奏时间戳计算时间转换基准值,可以参考S212包括的如下步骤:
[0070] S2121:将第一个主唱音频帧的服务器系统时间减去伴奏进度与伴奏时间戳之差以及伴奏时间戳,得到时间转换基准值。
[0071] 伴奏进度可以包括通过对第一个主唱音频帧携带的同步信息进行解析后所得到的伴奏进度。具体地,可以通过对第一个主唱音频帧所携带的同步信息进行解析,可以得到对应的伴奏进度为base0,以及对应的伴奏时间戳为local0。若此时对应的第一个主唱音频帧的服务器10系统时间为RecvTime,进而可以计算出对应的时间转换基准值BaseDiff=RecvTime‑(base0‑local0)‑local0。举例来说,当对第一个主唱音频帧所携带的同步信息进行解析,得到伴奏进度base0=10ms,对应的伴奏时间戳local0=5000ms时,可以计算出对应的时间转换基准值BaseDiff=RecvTime‑(base0‑local0)‑local0=20000‑(10‑5000)‑5000=19990ms。
[0072] S213:利用时间转换基准值将主唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。
[0073] 在计算出时间转换基准值之后,可以利用时间转换基准值将主唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的音频时间戳。具体地,在对主唱音频帧的音频时间戳进行转换的过程中,可以将包括第一个主唱音频帧在内的,服务器10从主唱端40接收到的每一个主唱音频帧所携带的同步信息中的音频时间戳转换为第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。
[0074] 在一种实现方式中,对于如何利用时间转换基准值将主唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳,可以参考S213包括的如下步骤:
[0075] S2131:将主唱音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值,得到主唱音频帧转换后的音频时间戳。
[0076] 主唱音频帧的音频时间戳可以包括从主唱音频帧所携带的同步信息中解析得到的主唱音频帧所对应的音频时间戳。具体地,主唱音频帧的音频时间戳可以包括主唱端40在采集到该帧主唱音频帧时所对应的主唱端40的系统时间。通过对主唱音频帧所携带的同步信息进行解析可以得到主唱音频帧的音频时间戳为pts(i)。也就是说,第一个主唱音频帧的音频时间戳相当于第一个主唱音频帧对应的伴奏进度对应的伴奏时间戳,即pts(0)=local0。
[0077] 在对主唱音频帧的音频时间戳进行转换的过程中,若在合唱过程中没有对伴奏进行快进或者倒退,则每一个音频时间戳对应的伴奏进度和伴奏时间戳之差都是相同的,而当合唱过程中发生快进或者倒退,则伴奏进度和伴奏时间戳之差会发生改变。进一步地,服务器10在接收主唱端40或副唱端50上传的主唱音频帧或副唱音频帧的过程中,基于预先服务器10与主唱端40或副唱端50之间的约定,主唱端40或副唱端50可以在伴奏进度产生跳变时,重新采集当前的伴奏进度,并向服务器10发送采集得到的跳变后的伴奏进度,若主唱端40或副唱端50的伴奏进度没有发生跳变,则继续沿用之前的伴奏进度和伴奏时间戳,从而可以使得主唱端40和副唱端50在合唱过程中节省性能。因此,主唱音频帧转换后的音频时间戳可以将主唱音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值。由于在计算时间转换基准值中的伴奏进度与伴奏时间戳之差可以与计算主唱音频帧转换后的音频时间戳中的伴奏进度与伴奏时间戳互相抵消,进而可以得出主唱音频帧转换后的音频时间戳实际上相当于主唱音频帧的音频时间戳减去第一个主唱音频帧对应的伴奏时间戳,再加上第一个主唱音频帧的服务器10系统时间。也就是说,在合唱过程中没有发生快进或者倒退的情况下,通过计算主唱音频帧的音频时间戳与第一个主唱音频帧对应的伴奏时间戳之差,再加上第一个主唱音频帧的服务器10系统时间,即可得到主唱音频帧转换后的第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。即主唱音频帧转换后的音频时间戳unipts(i)=pts(i)+(base(i)‑local(i))+BaseDiff=pts(i)+(base(i)‑local(i))+(RecvTime‑(base0‑local0)‑local0),在将计算时间转换基准值中的伴奏进度与伴奏时间戳之差与计算主唱音频帧转换后的音频时间戳中的伴奏进度与伴奏时间戳互相抵消之后则可以得到,unipts(i)=pts(i)‑local0+RecvTime。
[0078] 举例来说,若第一个主唱音频帧的音频时间戳pts(0)=5000ms,且第一个主唱音频帧对应的伴奏进度base0=10ms,伴奏时间戳local0=5000ms,第一个主唱音频帧的服务器10系统时间RecvTime=20000ms,通过计算可以得到第一个主唱音频帧转换后的音频时间戳unipts(0)=pts(0)‑local0+RecvTime=5000‑5000+20000=20000ms。若第二个主唱音频帧的音频时间戳pts(1)=5040ms,在伴奏进度没有发生跳变的情况下,此时服务器10获取到的伴奏进度仍然为base(1)=10ms,伴奏时间戳仍然为local(1)=5000ms,通过计算可以得到第二个主唱音频帧转换后的音频时间戳unipts(1)=pts(1)‑local0+RecvTime=5040‑5000+20000=20040ms。若第三个主唱音频帧的音频时间戳pts(2)=5080ms,在伴奏进度没有发生跳变的情况下,此时服务器10获取到的伴奏进度仍然为base(2)=10ms,伴奏时间戳仍然为local(2)=5000ms,通过计算可以得到第三个主唱音频帧转换后的音频时间戳unipts(2)=pts(2)‑local0+RecvTime=5080‑5000+20000=20080ms。若在第四个主唱音频帧发生了快进,此时,服务器10获取到的重新采集的伴奏进度为base(3)=130ms,以及对应的伴奏时间戳为local(3)=5120ms,在第四个主唱音频帧的音频时间戳为pts(3)=
5120ms的情况下,通过计算可以得到第四个主唱音频帧转换后的音频时间戳unipts(3)=pts(3)‑local0+RecvTime=5120‑5000+20000=20120ms。若第五个主唱音频帧相较于第四个主唱音频帧没有发生快进或者倒退,服务器10获取到的伴奏进度仍然为base(4)=
130ms,伴奏时间戳仍然为local(4)=5120ms,且第五个主唱音频帧的音频时间戳pts(4)=
5160ms,通过计算可以得到第五个主唱音频帧转换后的音频时间戳unipts(4)=pts(4)‑local0+RecvTime=5160‑5000+20000=20160ms。
[0079] S214:利用时间转换基准值将副唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。
[0080] 在计算出时间转换基准值之后,可以利用时间转换基准值将副唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的音频时间戳。具体地,在对副唱音频帧的音频时间戳进行转换的过程中,可以将在第一个主唱音频帧之后,服务器10从主唱端40接收到的每一个副唱音频帧所携带的同步信息中的音频时间戳转换为第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的音频时间戳。
[0081] 在一种实现方式中,对于如何利用时间转换基准值将副唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的音频时间戳,可以参考S214包括的如下步骤:
[0082] S2141:将副唱音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值,得到副唱音频帧转换后的时间戳。
[0083] 副唱音频帧的音频时间戳可以包括从副唱音频帧所携带的同步信息中解析得到的副唱音频帧所对应的音频时间戳。具体地,副唱音频帧的音频时间戳可以包括副唱端50在采集到该帧副唱音频帧时所对应的副唱端50的系统时间。通过对副唱音频帧所携带的同步信息进行解析可以得到副唱音频帧的音频时间戳为pts(i)。
[0084] 在对副唱音频帧的时间戳进行转换的过程中,可以将副唱音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值,得到副唱音频帧转换后的时间戳。与在对主唱音频帧的音频时间戳进行转换的过程相同,副唱音频帧对应的伴奏进度与伴奏时间戳之差也可以与在计算时间转换基准值中的伴奏进度与伴奏时间戳之差互相抵消,进而同样可以得出副唱音频帧转换后的音频时间戳实际相当于副唱音频帧的音频时间戳减去第一个主唱音频帧对应的伴奏时间戳,再加上第一个主唱音频帧的服务器10系统时间。也就是说,在合唱过程中没有发生快进或者倒退的情况下,通过计算副唱音频帧的音频时间戳与第一个主唱音频帧对应的伴奏时间戳之差,再加上第一个主唱音频帧的服务器10系统时间,即可得到副唱音频帧转换后的第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。即副唱音频帧转换后的音频时间戳unipts(i)=pts(i)+(base(i)‑local(i))+BaseDiff=
[0085] pts(i)+(base(i)‑local(i))+(RecvTime‑(base0‑local0)‑local0),在将副唱音频帧对应的伴奏进度与伴奏时间戳之差也与在计算时间转换基准值中的伴奏进度与伴奏时间戳之差互相抵消之后则可以得到,unipts(i)=pts(i)‑local0+RecvTime。
[0086] 在一种实现方式中,在将副唱音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值,得到副唱音频帧转换后的时间戳之前,可以包括如下步骤:
[0087] S2142:基于当前待转换的音频帧的唱端标志判断当前待转换的音频帧是否为副唱音频帧,且判断时间转换基准值是否为零。
[0088] 唱端标志可以是对当前待转换的音频帧所携带的同步信息进行解析所得到的。唱端标志可以是用于标识当前音频帧所对应的唱端的标志。具体地,在对当前待转换的音频帧的音频时间戳进行转换之前,可以对当前待转换的音频帧所携带的同步信息进行解析,以得到当前待转换的音频帧对应的唱端标志,从而可以基于解析得到的唱端标志判定当前待转换的音频帧是否为副唱音频帧,并且可以判断时间转换基准值是否为零。
[0089] S2143:若当前待转换的音频帧为副唱音频帧,且时间转换基准值不为零,则执行利用时间转换基准值将副唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。
[0090] 由于计算时间转换基准值的数据是基于第一个主唱音频帧所携带的同步信息中的时间信息而确定的,若当前待转换的音频帧为副唱音频帧,且时间转换基准值为零的话,则可以认为服务器10还没有接收到主唱端40发送的第一个主唱音频帧,那么此时服务器10接收到的副唱端50的副唱音频帧则会被丢弃不进行处理。因此,若当前待转换的音频帧为副唱音频帧,则需要判断时间转换基准值是否为零。当需要转换的音频帧为副唱音频帧,且时间转换基准值不为零时,可以执行利用时间转换基准值将副唱音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器10系统时间为基准的音频时间戳。
[0091] S215:利用时间转换基准值将伴奏音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳。
[0092] 伴奏音频帧可以对应于主唱音频帧对应的伴奏音频帧。由于伴奏音频文件可以利用伴奏链接从服务器10本地或者互联网上获取,故伴奏音频帧的音频时间戳可以包括伴奏音频文件内自带原始时间戳经过以零为基准处理所得到的时间戳。具体地,在对伴奏音频文件内自带原始时间戳进行以零为基准的处理的过程中,可以将第一个伴奏音频帧的音频时间戳记为零,之后的伴奏音频帧的音频戳则可以以第一个伴奏音频帧的音频时间戳为基准进行处理。举例来说,若第一个伴奏音频帧处理前的音频时间戳为pts(0)=20ms,第二个伴奏音频帧处理前的音频时间戳为pts(1)=40ms,在将第一个伴奏音频帧的音频时间戳记为零之后,pts(0)=0ms,pts(1)=20ms。
[0093] 在一种实现方式中,对于如何利用时间转换基准值将伴奏音频帧的音频时间戳以第一个主唱音频帧对应的伴奏时间戳为时间零点的且以服务器系统时间为基准的音频时间戳,可以参考如下步骤:
[0094] S2151:将伴奏音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值,得到伴奏音频帧转换后的时间戳。
[0095] 伴奏音频帧的伴奏时间戳可以包括伴奏音频帧的音频时间戳与第一个主唱音频帧的伴奏时间戳之和。具体地,伴奏音频帧的伴奏时间戳local(i)可以包括伴奏音频帧的经过以零为基准处理所得到的音频时间戳pts(i)与第一个主唱音频帧的伴奏时间戳local0之和,即伴奏音频帧的伴奏时间戳local(i)=pts(i)+local0。
[0096] 在对伴奏音频帧的音频时间戳进行转换的过程中,可以将伴奏音频帧的音频时间戳加上对应的伴奏进度与伴奏时间戳之差,再加上时间转换基准值,得到伴奏音频帧转换后的时间戳。与在对主唱音频帧和副唱音频帧的音频时间戳进行转换的过程相同,同样是通过将伴奏音频帧对应的伴奏进度与伴奏时间戳之差与在计算时间转换基准值中的伴奏进度与伴奏时间戳之差互相抵消。具体地,由于伴奏音频帧的伴奏时间戳可以包括伴奏音频帧的音频时间戳与第一个主唱音频帧的伴奏时间戳之和,在计算伴奏音频帧转换后的音频时间戳的时候,若合唱过程中没有发生快进或者倒退的情况下,也就是伴奏进度没有发生改变的情况下,伴奏音频帧对应的伴奏进度与伴奏时间戳之差,可以与计算时间转换基准值中的伴奏进度与伴奏时间戳之差相互抵消,进而可以得出伴奏音频帧转换后的音频时间戳实际上相当于伴奏音频帧的音频时间戳减去第一个主唱音频帧对应的伴奏时间戳,再加上第一个主唱音频帧的服务器10系统时间。即伴奏音频帧转换后的音频时间戳unipts(i)=pts(i)+(base(i)‑local(i))+BaseDiff,将伴奏音频帧的伴奏时间戳local(i)可以包括伴奏音频帧的音频时间戳pts(i)与第一个主唱音频帧的伴奏时间戳local0之和,以及时间转换基准值代入之后可以得到unipts(i)=pts(i)+(base(i)‑(pts(i)+local0))+[0097] (RecvTime‑(base0‑local0)‑local0),在将伴奏音频帧对应的伴奏进度与伴奏时间戳之差与计算时间转换基准值中的伴奏进度与伴奏时间戳之差相互抵消之后可以得到,unipts(i)=pts(i)‑local0+RecvTime。
[0098] 在分别对每一个主唱音频帧、副唱音频帧以及伴奏音频帧转换为以服务器10系统时间为基准的音频时间戳之后,则可以按照转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步和混流。
[0099] S300:利用主唱音频帧、副唱音频帧和伴奏音频帧转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步。
[0100] 在合唱过程中,主唱端40和副唱端50可能会由于网络延迟或者丢帧等原因造成服务器10接收到的主唱音频帧和副唱音频帧不同步。通过将主唱音频帧、副唱音频帧以及伴奏音频帧都转换为以服务器10系统时间为基准的音频时间戳,从而可以利用主唱音频帧、副唱音频帧和伴奏音频帧转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步,有利于提高在对主唱音频帧、副唱音频帧和伴奏音频帧进行混流过程中的同步性,进而提高混流后的音频文件的音频质量。
[0101] 在一种实现方式中,对于如何利用主唱音频帧、副唱音频帧和伴奏音频帧转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步,可以参考S300包括的如下步骤:
[0102] S310:将主唱音频帧、副唱音频帧各自转换后的音频时间戳分别独立地与伴奏音频帧转换后的音频时间戳进行同步。
[0103] 由于伴奏音频帧对应的伴奏音频文件是服务器10基于伴奏链接从服务器10本地或者互联网上获取的,相较于主唱音频帧和副唱音频帧,伴奏音频帧的完整度和准确度更高。因此,在进行同步的过程中可以将主唱音频帧、副唱音频帧各自转换后的音频时间戳分别独立地与伴奏音频帧转换后的音频时间戳进行同步。
[0104] 在一种实现方式中,在S300之后可以包括如下步骤:
[0105] S400:将同步之后的主唱音频帧、副唱音频帧和伴奏音频帧进行混流,以得到输出音频流。
[0106] 输出音频流可以包括将主唱音频帧、副唱音频帧以及伴奏音频帧进行混流后所得到的音频流。在将主唱音频帧、副唱音频帧各自转换后的音频时间戳分别独立地与伴奏音频帧转换后的音频时间戳进行同步,由于主唱音频帧、副唱音频帧以及伴奏音频帧各自对应的音频时间戳都是相同的时间基准,可以将同步之后的主唱音频帧、副唱音频帧和伴奏音频帧进行混流,以得到以相同的时间基准进行混流的输出音频流,不会由于主唱音频流或副唱音频流中的某条流出现网络延迟或丢帧而影响混流结果。
[0107] S500:将输出音频流发送给内容分发网络,以将输出音频流发送给直播间内所有的客户终端。
[0108] 服务器10在将同步之后的主唱音频帧、副唱音频帧和伴奏音频帧进行混流得到输出音频流之后,可以将输出音频流发送给内容分发网络,以通过内容分发网络将输出音频流发送给直播间内的所有客户终端。具体地,可以通过内容分发网络将输出音频流发送给当前处于直播间内的所有观众终端30,以使观众能够通过观众终端30收听到混流后的输出音频流。
[0109] 综上所述,在直播合唱的过程中,获取主唱端的主唱音频帧、副唱端的副唱音频帧和伴奏音频帧,由于主唱音频帧、副唱音频帧和伴奏音频帧均采集于不同的终端,故主唱音频帧、副唱音频帧和伴奏音频帧所携带的音频时间戳的基准均是不相同的。通过将主唱音频帧、副唱音频帧和伴奏音频帧各自携带的音频时间戳统一转换为以服务器系统时间为基准的音频时间戳,实现统一主唱音频帧、副唱音频帧和伴奏音频帧的音频时间戳的基准,进而可以利用主唱音频帧、副唱音频帧和伴奏音频帧转换后的音频时间戳对主唱音频帧、副唱音频帧和伴奏音频帧进行同步,使得主唱音频帧、副唱音频帧和伴奏音频帧可以以同一系统时间为基准的音频时间戳进行同步,有利于提高主唱音频帧、副唱音频帧和伴奏音频帧在同步过程中的准确性,提高观众在收听直播合唱过程中所听到的同步后的音频的质量,提高观众的收听体验感。
[0110] 如图4所示,本申请计算机设备实施例描述的计算机设备100可以是用于对主唱音频帧、副唱音频帧以及伴奏音频帧的音频时间戳进行转换以及混流的服务器10,计算机设备100可以包括处理器110、存储器120和通信电路130。
[0111] 存储器120用于存储计算机程序,可以是RAM(只读存储器,Read‑Only Memory),也是可以ROM(随机存取存储器,Random Access Memory),或者其他类型的存储设备。具体地,存储器可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器中的非暂态的计算机可读存储介质用于存储至少一条程序代码。
[0112] 处理器110用于控制计算机设备100的操作,处理器110还可以称为CPU(Central Processing Unit,中央处理单元)。处理器110可能是一种集成电路芯片,具有信号的处理能力。处理器110还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器110也可以是任何常规的处理器等。
[0113] 处理器110用于执行存储器120中存储的计算机程序以实现本申请直播合唱音频的同步方法实施例描述的直播合唱音频的同步方法。
[0114] 计算机设备100还可以包括通信电路,通信电路是计算机设备100用于与外面的设备进行通信连接器件或电路,以使得处理器110能够经通信电路130与外界设备进行数据交互。
[0115] 关于本申请计算机设备实施例中各功能模块或者部件功能和执行过程的详细阐述,可以参照上述本申请直播合唱音频的同步方法实施例中的阐述,在此不再赘述。
[0116] 在本申请所提供的几个实施例中,应该理解到,所揭露的计算机设备100和直播合唱音频的同步方法,可以通过其它的方式实现。例如,以上所描述的计算机设备100各实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0117] 作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
[0118] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0119] 参阅图5,上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在计算机可读存储介质200中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令/计算机程序用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种介质以及具有上述存储介质的电脑、手机、笔记本电脑、平板电脑、相机等电子终端。
[0120] 关于计算机可读的存储介质中的程序数据的执行过程的阐述可以参照上述本申请直播合唱音频的同步方法实施例中阐述,在此不再赘述。
[0121] 以上所述仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

当前第1页 第1页 第2页 第3页