在 Chrome 64 中,我们将针对启用了 echoCancellation
约束条件的 getUserMedia 音频串流尝试一种新行为。新变化是,此类串流将在串流期间暂时停用硬件噪声抑制功能。我们预计这将使回声消除器的性能得到提升。由于此功能处于实验阶段,因此需要明确启用;请参阅下文。
目前,只有部分输入设备支持此行为,并且仅在 macOS 上支持。仅限于在系统偏好设置的声音面板中具有可切换的“降噪”功能的设备。
背景
回声消除器会尝试从麦克风拾取的音频信号中移除扬声器播放的任何声音。如果不启用此功能,您在通话中说的话会被对方的麦克风拾取,然后再发送给您。您会听到自己的回声!
为了成功消除回声,WebRTC 的回声消除器(在 Chrome 中使用)需要从麦克风获取尽可能干净的音频信号。在音频到达回声消除器之前应用的处理(例如硬件降噪)通常会影响其性能。此外,系统已经启用了软件降噪功能,但只有在回声消除器处理完毕后才会启用。
新行为的详细信息
网站开发者可以选择加入来源试用版,在其网站上启用新行为。最终用户可以在启动 Chrome 时传递命令行标志,以全局启用该功能。如需了解详情,请参阅下文。
启用此功能后,如果网页调用 getUserMedia 从输入设备获取音频,则会发生以下情况:
如果启用了
echoCancellation
约束条件,则在新创建的音频流的整个生命周期内,硬件降噪功能将处于关闭状态。由于此设置是系统级的,因此将应用于来自同一设备(即同一麦克风)的所有音频输入流。
当需要关闭硬件降噪功能的最后一个数据流关闭后,系统会重新开启硬件降噪功能。
如果之前已停用硬件降噪功能,Chrome 将不会更改其状态。
如果在未启用
echoCancellation
的情况下调用 getUserMedia,Chrome 将不会触及硬件噪声抑制功能。
由于此设置也可由用户控制,因此会与用户进行一些特定互动:
如果 Chrome 已关闭硬件噪声抑制功能,而用户又将其重新开启,Chrome 不会再次尝试为该串流停用该功能。
如果 Chrome 已关闭硬件噪声抑制功能,而用户将其重新开启,然后再次关闭,Chrome 仍会在流式传输结束后重新启用该功能。
只需启用实验即可实现此行为。无需进行任何 API 更改。
如何启用实验
如需在您的网站上实现此新行为,您需要注册“停用硬件噪声抑制”源代码试用。如果您只想在本地试用该功能,也可以在命令行中启用该功能:
chrome --enable-blink-features=DisableHardwareNoiseSuppression
在命令行中传递此标志可为当前会话全局启用该功能。
我们希望通过此实验评估以下几个方面:
在现场,启用与停用硬件降噪功能之间的定性差异。
在 Chrome 中更改此设置对最终用户和他们可能正在运行的其他软件有何影响?
我们很期待收到您对这两方面的反馈。开启此功能后,通话质量是变好了还是变差了?实现是否存在问题,导致意外行为?无论如何,如果您要试用此功能,请针对此 bug 提交反馈。如果可能,请说明您使用了哪些麦克风 / 耳机 / 等设备,以及这些设备是否支持环境噪音降低功能。如果您要开展更多大规模实验,请提供音频通话质量比较统计信息的链接。