:随着现代社会生活方式变化,社交娱乐的方式也在逐渐改变。传统面对面的社交娱乐活动正在慢慢地变革,慢慢的变多的交互行为逐渐转移到网络上。RTC 技术的进步也推动了网络娱乐形式的变化,单方向信息传递方式如电影、听歌、看视频为主的娱乐方式占比在下降,互动性更强的方式如互动直播、语音通话、在线 KTV 歌等却在逐步崛起。
作为人类最重要的交流方式之一,声音的处理至关重要。一种原因是因为人类对于声音极其敏感,声音的传播受人体生理结构特点的影响,由于视觉受限于光照和方位,不是时刻可以依赖的信息获取来源,很多情况下听觉成为人类对环境信息感知的最重要通道。另一方面声音脱离画面单独存在的交流方式也有独立应用的场景。
RTC 互动交流功能作为非常非常重要的功能,对音频通话的处理提出了以下要求:
而社交娱乐的特点对音频处理又提出了新的要求。如用户希望得到高质量的音乐、好的临场感、趣味性强的音频效果、高质量音频内容共享等方面。因此,这就要求我们应该从不同的方面去优化音频,以达到最优效果。今天我们分享的就是音频共享。
音频共享一般是指将设备中音频声音共享给其他参与者,使双方能够听到同一种声音,如一起听歌等。
通话中的用户听到相同的声音,在某些情况下对于用户的临场感提升很重要。有一种直接的方式是可以从麦克风通道让对面的用户听见本端的声音,但很多时候这样的效果不会太好。采集播放环节的失真,麦克风通道针对人声的特定处理都可能会破坏高质量音频的效果。
提供一个绕过前端处理环节并且灵活方便应对各种场景的音频共享功能就变成了现实需求。
为了使用户得到满足多个场景下对音频共享的需求,网易云信实现了使用灵活的音频共享方案。
通过内置解码器解码后混音,可以兼容常见的 Mp3,AAC 等多种格式数据文件,这是最简单常见的一种方式。
当用户对第三方软件播放的声音很喜欢时怎么办?我们基于系统接口提供了播放数据的抓取和处理,让用户不用苦于无法获取数据源,使得音频共享的来源更加多样化。
这里的架构和常见的 RTC 架构似乎有些许不同之处,不光增加了一个回声消除模块,参考信号的来源似乎也有变化。这就是这个架构特殊的地方,下面一个回声消除模块用于基本通话,由于共享的声音同时要被自己和对方听到,麦克风采集到的声音里也有一定可能会包含这部分信号,需要消除的部分不仅要包括对端的声音,还要包括本端播放的声音。
这里取用实际播出的信号作为参考输入,能够保证本端人声输入更干净。另外一个额外的回声消除用于消除对端的人声。在使用第三方播放声音作为共享源的时候,我们拿到的信号包含了播放的全部内容。这样的处理可以在共享源中消除掉对端声音,使得共享过程中仍能保证高质量的音频通话。
上述音频共享方案是一个统一架构,能够适用于游戏开黑、音频分享、线上 KTV 等场景。涵盖了娱乐办公的多个场景。
有了这个基本处理框架以后,就能够最终靠灵活设置内部流程,配合适当的外部逻辑实现各项功能。以下图为例:
把上面的第三方音频内容换成游戏、音乐播放器或者浏览器,就能够最终靠简单操作实现游戏开黑、一起听歌、会议等音频共享场景了。
左侧是主唱端,提供伴奏音乐,在本地的人声加入后,通过 RTC 音频流传给副唱。
右侧的演唱者的声音会通过 RTC 流传给主唱,以供两人合唱同步,同时将副唱的人声和主唱侧传过来的包含主唱人声的歌曲混合,形成完整的合唱,推送给直播观众。
以上是一个在线 KTV 的场景实现。当然,在线 KTV 场景的实现涉及多个角度,遇到的问题远远不止音频共享这部分。歌词的传递、各端的同步、音频端到端的延时等问题都是需要克服的障碍,解决好这样一些问题才能提供更好的体验
网易云信的 SDK 产品提供完整的音频共享解决方案,支持双声道全频道,可以覆盖包括游戏开黑、一起听歌,在线 KTV 等一系列场景。如有兴趣能登录网易云信官网下载 Demo 进行体验。
LVS 音视频技术大会即将开始,网易云信服务端首席架构师吉奇将进行主题演讲《网易云信自研大规模传输网核心系统架构剖析》,欢迎各位持续关注。