在实时音视频通话中,背景噪声可能会影响通话质量,RTC SDK 提供了两种降噪方式:浏览器内置降噪和 AI 音频降噪插件。本文档将介绍如何选择和集成适合你业务场景的降噪方式。
你可以根据噪声类型,选择不同的降噪方式。
| 噪声类型 | 特点 | 推荐降噪方式 |
|---|---|---|
| 平稳噪声 | 持续且音量稳定的背景噪声,如空调、风扇或电子设备的嗡嗡声。 | |
| 非平稳噪声 | 出现时机或响度都不可预测的瞬时噪声,如键盘敲击、物体碰撞、人声干扰。 | AI 音频降噪插件 |
在开始采集和发布音频前,调用 setAudioCaptureConfig 并将 noiseSuppression、echoCancellation 和 autoGainControl 均设置为 true。
以上选项的完整说明参见
MediaTrackConstraints。
// 必须在 startAudioCapture() 和 publishStream() 之前设置 await engine.setAudioCaptureConfig({ noiseSuppression: true, echoCancellation: true, autoGainControl:true, }); await engine.startAudioCapture(); await engine.publishStream(MediaType.AUDIO);
在你的项目中引入 AI 降噪插件,可通过以下任一方式:
确保插件来自本地工程中已引入的 RTC SDK。避免因插件版本不匹配导致的引用错误。
import RTCAIAnsExtension from '@volcengine/rtc/extension-ainr';
const {RTCAinrExtension} = window.VERTCExtensions;
初始化插件并检查浏览器是否支持。
// 创建插件实例 const AIAnsExtension = new RTCAIAnsExtension(); // 检查当前浏览器环境是否支持 AI 降噪插件 const isSupported = await AIAnsExtension.isSupported();
注册 AI 插件并设置监听事件。
import VERTC from '@volcengine/rtc'; // 直接引入 import {EventTypes as AIAnsEventTypes} from '@volcengine/rtc/extension-ainr'; // 创建引擎实例 const engine = VERTC.createEngine('appid'); // 注册 AI 降噪插件 try { await engine.registerExtension(AIAnsExtension); } catch (error) { // 注册失败,详细信息见:error.message } AIAnsExtension.on(AIAnsEventTypes.onUnsupported, ({message}) => { // 降噪插件运行时遇到不支持情况,详细信息见:message }) AIAnsExtension.on(AIAnsEventTypes.onOverload, ({elapsedTime}) => { // 系统负载过高,降噪插件运算耗时过长。建议降低档位或者关闭降噪插件。 }) AIAnsExtension.on(AIAnsEventTypes.onError, ({message}) => { // 降噪插件运行时遇到错误。详细信息见:message // 根据错误信息情况可以考虑尝试恢复降噪插件运行,或者关闭降噪插件 AIAnsExtension.resume(); })
开启内部音频采集。
engine.startAudioCapture();
// 为外部屏幕流开启降噪 AIAnsExtension.enable({ streamIndex: StreamIndex.STREAM_INDEX_SCREEN, sourceType: AudioSourceType.AUDIO_SOURCE_TYPE_EXTERNAL, }); // 对内部主流关闭降噪 AIAnsExtension.disable({ streamIndex: StreamIndex.STREAM_INDEX_MAIN, sourceType: AudioSourceType.AUDIO_SOURCE_TYPE_INTERNAL, });
// 开启降噪 AIAnsExtension.enable(); // 关闭降噪 AIAnsExtension.disable();
// 自动模式 await AIAnsExtension.setAnsMode(AnsMode.AUTO);
降噪模式说明如下:
| 模式 | 取值 | 说明 |
|---|---|---|
| LOW | 'low' | 适用于微弱平稳噪声。 |
| MEDIUM | 'medium' | 适用于抑制中度平稳噪声,如空调声、风扇声。。 |
| HIGH | 'high' | 适用于抑制嘈杂非平稳噪声,如键盘声、敲击声、碰撞声、动物叫声。 |
| AUTO | 'auto' | 启用音频降噪能力。具体的降噪算法由 AI 降噪插件决定。 |
当同时配置了浏览器内置降噪并注册了 AI 降噪插件时, MediaTrackConstraints 设置的传统降噪参数生效情况如下:
| 插件状态 | autoGainControl | echoCancellation | noiseSuppression |
|---|---|---|---|
| 插件已注册未开启 | 有效 | 有效 | 固定为 true |
| 插件已注册已开启 | 固定为 true | 有效 | 固定为 false |
AI 降噪插件默认处理 48kHz 采样率、音频帧大小为 480 的音频流,并默认开启了采样率转换功能。如果待处理的音频流满足上述条件,可参照以下设置,关闭采样率转换以获得更优性能。
const AIAnsExtension = new RTCAIAnsExtension({ resample: false, });