更多原生回声消除

我们将继续进行上一个实验。在 Chrome M68 中,我们添加了一个实验性 MediaStreamTrack 限制条件来控制所使用的回声消除器,添加了对 Windows 上的原生回声消除器的支持,并改进了 macOS 上的原生回声消除器的功能。与之前一样,所有这些都是在源试用之后进行的,因此如果您想试用,则必须注册或使用命令行 flag 启动 Chrome。如需了解详情,请参阅下文

新变化

首先,现在可以在 getUserMedia 调用中添加新的限制条件,从而控制使用哪个回声消除器,例如:

echoCancellationType: type

其中,type 可以是以下项之一:

  • browser使用浏览器提供的软件实现;或
  • system,以使用底层系统提供的实现。目前,这是 macOS 和 Windows 上的其中一个实现。

如果您省略了约束条件,Chrome 就会像往常一样选择回声消除器:如果有硬件回声消除功能,则使用该功能;否则,Chrome 的软件回声消除器就会使用。如果不指定限制条件,Chrome 绝不会选择此试验中的两个实验性回声消除器之一。

由于 echoCancellationType 的工作方式与其他限制类似,因此可以将 system 指定为理想值,并让 Chrome 使用该值(如果可用),或回退到 browser 值。Chrome 中始终提供 browser echoCAMPAIGNType。要确定选择的是哪个回声消除器,您可以对 getUserMedia 音轨调用 getSettings(),然后检查 echoCancellationType 字段的值。

最后,您可以通过对 MediaStreamTrack 调用 getCapabilities() 来检查该 MediaStreamTrack 可以使用哪些回声消除器。不过,InputDeviceInfo 尚未实现 echoCancellationType

Windows 回声消除支持

我们扩展了原生回声消除器支持,现包含使用语音捕获 DSP 组件的 Windows。与 macOS 回声消除器一样,我们希望评估其性能,并了解它是否存在性能优于我们的软件解决方案的情况(如果仅在更靠近音频硬件的位置)。与 macOS 的情况相反,我们在 Windows 上进行的初始测试不太理想。我们将继续调整实现,看看能否使其获得更好的性能。目前,最好避免在更大范围内尝试使用 Windows 回声消除器。请在受控设置(例如在本地机器上)尝试运行,但不要指望它可以完美地运行!

改进了 macOS 回声消除支持

在之前的实验中,macOS 实现缺乏正确跟踪所使用的输出设备的能力。这意味着,计算机默认设备以外的任何设备都无法消除回声。在很多情况下,这也许不是问题,因为当耳机等插上或拔出时,macOS 可以自动切换默认设备。不过,它并非在所有情况下都能正常工作。

此功能已添加到 Chrome M68,并同时针对 macOS 和 Windows 回声消除器实现了。Chrome 的软件回声消除器未因功能不足而受到影响,因为它使用内部环回来取消播放音频。

如何启用实验

若要让您的网站能够实现这种新行为,您需要注册“针对原生 AEC 的实验性支持”源试用。如果您只想在本地试用,可以在命令行中启用该实验:

chrome --enable-blink-features=ExperimentalHardwareEchoCancellation

在命令行中传递此标志会使 Chrome 对当前会话全局使用新的 echoCancellationType 限制条件。使用此限制条件后,您便可以在应用中测试原生回声消除器,如上所述。此命令行 flag 与之前的试用版相同;在 Chrome M68 上,它会启用新功能。启用新的源试用只会激活新功能,而不会在旧版 Chrome 中触发之前的试用。

提交反馈

与上个实验一样,我们关注的是 macOS 和 Windows 回声消除器(主要是前者)的定性性能。我们还希望就新的 echoCancellationType 限制条件的实际效果、使用难易程度等提供反馈,包括将其纳入 getSettingsgetCapabilities 中。

此外,我们还很想知道 Chrome 在使用这些原生回声消除器时如何与其他应用交互,以及实现过程中出现的任何稳定性问题或其他问题。

如果您尝试执行此操作,请在此 bug 中提交反馈。 如果可能,请提供所使用的硬件(操作系统版本、硬件型号、麦克风/耳机等)。如果要进行更大规模的实验,请链接到有关语音通话质量的比较统计信息的链接,无论实验是客观还是主观。