对于泛娱乐领域来讲,如何提升用户活跃、刺激变现是永恒的话题。不仅仅需要运营策划新活动与玩法,更需要从产品层面不断提升体验。
我们曾经分享过“跨直播间PK”的实现思路,这种玩法我们已经可以在几个主流直播平台中看到。从实现效果来讲,就是不同主播间的粉丝可以同时看到两个主播在连麦聊天,或做游戏,它的互动性更强。而实现方式有两种,一种是将多个主播加入同一个直播频道,然后进行旁路推流;另一种,是利用信令控制来实现,具体请见往期文章。据说在“跨直播间PK”功能上线首日,某个平台的用户日活与打赏数据节节攀升,不仅增强用户粘性,还提升了社交体验。
“跨直播间PK”是泛娱乐社交平台对“颜值社交”的深耕与创新场景。但除了“看脸追星”,“听声追星”的需求也不容小觑。
人们普遍认为“声控”只是小众爱好,仅仅聚集于荔枝、蜻蜓、喜马拉雅等App上,但其实,如果你留意过抖音、bilibili等平台,不露脸,只秀音色的视频或直播同样能获得数十万的关注。围绕声音,也有很多值得尝试的玩法,比如以下几种。
语音连麦
这是最常见的场景,主播与一个或多个粉丝线上连麦互动。技术实现上比较简单,几个用户之间的音频数据通过UDP协议进行低延时传输,同时利用信令系统来保证用户进入同一个频道,并控制通话的开启、挂断。
![9fb7d02ca543f59b8d47ce53bd4d63b7.png](https://img-blog.csdnimg.cn/img_convert/9fb7d02ca543f59b8d47ce53bd4d63b7.png)
主要的挑战在于保证双方音频通话的低延时,一方面是要优化数据传输策略,规避网络拥塞;另一方面,还要做好节点部署,保证大部分用户的可用性。同时,对于大平台来讲,一旦有大量用户进行语音连麦,会大幅增加对服务器的请求数,所以还要保证服务端的高可用。
边聊边玩
这种模式算是社交与游戏的结合产物,所以我们在一些社交平台或休闲游戏中能看到。用户在社交平台中开启小游戏,并邀请好友加入,在玩游戏的同时,还能对话、调侃。这个场景的技术难点与语音连麦相近。
边聊边唱
这个场景本质上还是语音连麦。不同的是,主播在与用户聊天的同时,还可以播放本地或云端的音乐伴奏或MV。在所有需要唱歌的场景下,最关键,也是最难解决的就是人声与伴奏的同步。通常在社交直播中,可以通过在主播设备端对人声与伴奏进行混音,来解决这个问题。
轮麦演唱
我们曾分享的在线KTV就是一个典型的轮麦演唱。主播可以邀请多个听众上麦,“话筒”会按顺序传递给不同连麦观众,观众自己点歌自己唱。主播仍然可以控制歌曲的播放,如切歌、暂停等操作。其难点主要有两方面,歌曲控制的同步、高音质与画质。
![6901b10225dbfaa5ed443f2e67454f50.png](https://img-blog.csdnimg.cn/img_convert/6901b10225dbfaa5ed443f2e67454f50.png)
以上几种功能,大多比较常见,但还有一种比较少见,也是今天我们要重点解析的,就是实时合唱。
正题来了,什么是实时合唱
现在大部分K歌应用中,都有“合唱”功能。用户点歌,然后开启合唱功能,自己一个人根据伴奏演唱,完成后点击“上传”,刚才录下的歌声就变成了带有一人歌声的伴奏。其它用户可以选择这个伴奏唱歌,录制完成后,间接的完成了合唱。简单来讲,就是做了两次“录制-上传”的操作。
这种“录制合唱”,并不是我们要做的“实时合唱”。
录制合唱有其优点:音质好,开发者可以设置客户端录制和输出的采样率、比特率,保证用户的声音被原原本本地记录和传输;对网络要求低,只有在上传和下载两个过程需要用到网络,合唱的混音在本地完成,因此不存在网络延时问题。合唱的效果也完全取决于用户自身。其缺憾也显而易见,就是用户并没有“合唱”的体验,仍然是一个人在唱歌。
而我们要做的“实时合唱”的体验并非如此。实时合唱的流程体验大致如下:
- 发起人点歌,并发起合唱;
- 邀请好友进行合唱;
- 合唱伴奏通过网络同时发送给两位歌手;
- 两位歌手同时在线合唱,并能听到彼此的声音。
在实时合唱的场景下,用户不再是一个人唱,而是在自己演唱的同时,可以听到好友合唱的声音。实时合唱能让用户像获得线下一样的体验,极大的提升沉浸感。
实现难点是什么?
既然实时合唱更能给用户带来参与感,为什么却不常见呢?与重复“录制-上传”的合唱不同,实时合唱的体验给技术提出了更高的要求,主要包含两方面。
一、合唱同步
这里的同步指的是两个歌手的歌声与伴奏三者之间的同步。我们先假设我们的唱歌的两位用户都是专业级的,踩不准节奏的问题完全不存在。如上述场景描述,由于伴奏是同时发送给两个用户,那么关键就在于两者的歌声是否能同步。影响合唱同步的主要因素就是延时。
那么延时会带来多大的影响呢?为了方便大家理解,我们可以以一个非音乐科班生的角度简单计算一下。以歌曲《稻香》为例,它的钢琴曲谱是4/4拍,标准乐曲速度为80拍/分钟。副歌部分大约每个音乐小节唱8到12个字,且主要以八分音符和十六分音符组成,基本上每个音符对应歌词中的一个字。粗略计算的话,大约200 - 300ms左右唱出一个字。
![08042e0aad787c6b571a1b0f397111c1.png](https://img-blog.csdnimg.cn/img_convert/08042e0aad787c6b571a1b0f397111c1.png)
不考虑伴奏的情况下,假设上图中的A和B之间的端到端延时为100ms。从声音传输流程上来说:
- A先唱,B听到A的歌声。此时产生100ms延时;
- B在听到A的歌声后开始加入合唱,歌声传到A端。此时又产生100ms延时;
- 那么 A听到B的歌声永远延时200ms。根据之前唱每个字所用时间的计算,听感上会至少慢半个字,会有错位感。
如果要考虑伴奏的传输,以及伴奏与歌声的混音,情况将更加复杂。所以,实时合唱场景下的延时越低越好。一般端到端延时只要低于150ms,听者是感知不到的。所以唱《稻香》这种速度的歌,延时低于80ms可以完美合唱,演唱者的体验也是好的。如果唱更快速、歌词更密集的歌,延时要求更低,否则合唱时两人永远也对不准拍子,演唱者的体验也非常糟糕。
那么,如何降低延时呢?这个场景下的延时包括两部分:设备端的延时和端到端的延时,我们需要针对不同阶段的延时,来分析如何降低延时。
![15c78aed3c6b056d558526c49502c45f.png](https://img-blog.csdnimg.cn/img_convert/15c78aed3c6b056d558526c49502c45f.png)
音频在采集端、播放端的延时
这张图我们曾在《详解音视频直播中的低延时》中分享过。设备端上的延时包括采集端的采集、前处理、编码,播放端的接收、解码、后处理过程产生的延时,以及两端在编码后和解码前产生端网络延时。
端上的延时主要与硬件性能、采用的编解码算法、音视频数据量相关,设备端上的延时可达到 30~200ms,甚至更高。
音频在设备端上的延时还可以细分为以下几点:
音频采集延时:采集后的音频首先会经过声卡进行信号转换,声卡本身会产生延时;
- 编解码延时:随后音频进入前处理、编码的阶段,如果采用 OPUS 标准编码,最低算法延时大约需要 2.5~60ms;
- 音频播放延时:这部分延时与播放端设备性能相关;
- 音频处理延时:前后处理,包括 AEC,ANS,AGC 等前后处理算法都会带来算法延时,通常这里的延时就是滤波器阶数;
- 端网络延时:这部分延时主要出现在解码之前的 jitter buffer 内。
另外,合唱场景通常会为用户提供各种KTV音效,即人声在编码传输前会增加一步前处理,这还会加大音频在端上的延时。
若想降低音频在端上的延时,就需要针对不同机型进行编解码算法的优化,以降低音频采集、编解码、音频处理带来的延时。端上延时还与设备性能、系统紧密相关,如果歌手中有一方的设备性能较差,也会影响合唱效果。
端到服务器之间的延时
除了端上的延时,音频数据在端到服务器、服务器到服务器之间的传输过程也会产生较大延时,这也是阻碍“实时合唱”功能落地的重要因素。
影响采集端与服务器、服务器与播放端的延时的有以下主几个因素:客户端同服务间的物理距离、客户端和服务器的网络运营商、终端网络的网速、负载和网络类型等。如果服务器就近部署在服务区域、服务器与客户端的网络运营商一致时,影响上下行网络延时的主要因素就是终端网络的负载和网络类型。一般来说,无线网络环境下的传输延时波动较大,传输延时通常在 10~100ms不定。而有线宽带网络下,同城的传输延时能较稳定的低至 5ms~10ms。但是在国内有很多中小运营商,以及一些交叉的网络环境、跨国传输,那么延时会更高。
服务器间的延时
在此我们要要考虑两种情况,第一种,两端都连接着同一个边缘节点,那么作为最优路径,数据直接通过边缘节点进行转发至播放端;第二种,采集端与播放端并不在同一个边缘节点覆盖范围内,那么数据会经由“靠近”采集端的边缘节点传输至主干网络,然后再发送至“靠近”播放端的边缘节点,但这时服务器之间的传输、排队还会产生延时。
在实时合唱的场景中,要解决网络不佳、网络抖动,需要在采集设备端、服务器、播放端增设缓冲策略。一旦触发缓冲策略就会产生延时。如果卡顿情况多,延时会慢慢积累。要解决卡顿、积累延时,就需要优化整个网络状况。
二、高音质
唱歌的人都有一个共同的心理需求,就是希望别人夸自己唱得好听。音质在合唱场景下就显得尤为重要了。而影响实时合唱音质的因素主要包括:音频采样率、码率、延时。
- 采样率:是每秒从连续信号中提取并组成离散信号的采样个数。采样率越高,音频听起来越接近真实声音。
- 码率:它是指经过编码(压缩)后的音频数据每秒钟传输所表示的数据量(比特)。码率越高,意味着每个采样的信息量就越大,对这个采样的描述就越精确,音质越好。
假设网络状态稳定不变,那么采样率越高、码率越高,音质就越好,但是相应单个采样信息量就越大,传输时间可能会相对更长。也就是说,高音质也可能会影响延时。
敲黑板:解题思路
之前我们提到,因解决方案的不同,“音频”有这不同的含义,这与你的实现逻辑有关。
1.音频=歌声+伴奏
在采集端,我们传输的音频如果是包括歌声与伴奏。那么就意味着是这样的逻辑,如下图。
![8503752ed6efef743f6997a77a9caab5.png](https://img-blog.csdnimg.cn/img_convert/8503752ed6efef743f6997a77a9caab5.png)
- 歌手A先获得伴奏;
- A 将歌声与伴奏在本地混音后传输给 B;
- B 根据A的音频进行演唱,这时 B 可以听到合唱的效果;
- B 将合唱后的混音传输给 A,A 就可以听到合唱效果了。
在这种传输方式下,如果要保证 A 能听到合唱效果,会有两段“端到端延时”,即第2、3步产生的。由于B听到的是A的歌声与伴奏,所以该方案能保证 B 的体验。但由于伴奏传输给 B,B 的歌声又需要再传输回到 A,A 听到的伴奏与B的声音其实之间有很大延时。如果按照上文的延时推断,你需要付出更多的努力,才能让端到端的延时降低到歌手A能接受的程度。
2.音频=歌声
在这里,并不是说不要伴奏了。为了解决伴奏、歌声之间的延时问题,我们还有一种方法,就是通过云端将伴奏同时传输给A和B,那么基本可以保证两者能在同一秒听到同一个音符。接下来要解决的就只是歌声的传输了。基本实现逻辑如下,也是我们自己的实现方式:
![73132f66c0f49f4cdd8965f8c9a799f2.png](https://img-blog.csdnimg.cn/img_convert/73132f66c0f49f4cdd8965f8c9a799f2.png)
- 声网从服务器或本地获取合唱伴奏;
- 声网通过 SD-RTN™ 将伴奏,实时同步发送给歌手 A 和 B;
- 歌手 A 和 B 会同时听到伴奏,然后根据伴奏开始自己的演唱;
- SD-RTN™会实时的将A的歌声传给B端,同样,B 的歌声也会被实时的传输到 A 端;
- 歌手A和B都能实时听到伴奏和对方的歌声;
- 同时,观众可以实时听到两个歌手的合唱效果。
这种实现逻辑的好处在于,A、B几乎同时听到伴奏,同时演唱,两者可以实时听到对方的声音。要解决的问题就是降低各自歌声传输到对方的这段端到端延时了。相对来讲,更加简单。
如上文所说,我们要做的就是优化编解码算法,并对各个机型进行适配。同时,优化网络传输策略,增加节点部署等。