语聊房是一个对音质要求极高的场景,用户长时间在线,任何杂音、回声或啸叫都会严重影响体验。本文结合即构科技的实时音视频 SDK(ZEGO Express SDK)的音频处理能力,系统梳理这些问题的成因与解决方案。

一、问题概述
语聊房中出现杂音、回声、啸叫的表现:
| 问题类型 | 典型表现 |
|---|---|
| 杂音/噪声 | 通话中夹杂空调声、键盘敲击声、环境嘈杂声等背景噪音 |
| 回声 | 说话时能听到自己声音的延迟回音,或听到对方说话有明显拖尾 |
| 啸叫 | 突然出现尖锐刺耳的高频”嗡嗡”或”滋滋”声 |
这三类问题看似相似,但成因不同,解决方式也有差异。
二、问题原因分析
2.1 杂音/噪声的成因
- 环境噪声采集:麦克风灵敏度高,空调、风扇、键盘、餐厅嘈杂声等都会被一并采集进去。
- 网络抖动:弱网环境下音频数据包丢失或乱序,解码后产生爆音、断续等失真杂音。
- 设备硬件质量差:低端麦克风信噪比低,采集本身就带有底噪。
2.2 回声的成因
回声是语聊房中最常见也最难排查的问题,主要有以下几种情况:
- 扬声器外放:手机或电脑扬声器播放的声音被麦克风重新采集,经网络传回对方,对方就听到了自己声音的回音。
- AEC 失效:CPU 负载过高导致回声消除算法处理延迟,或音频前/后处理逻辑阻塞(超过 10ms 未返回)。
- 混流回声:连麦时同时拉取了包含自己声音的混流,导致自己的声音被二次播放。
- 多方通话定位误区:当某个用户听到回声时,往往不是自己的问题,而是通话对方的回声消除失效。
2.3 啸叫的成因
- 声音正反馈回路:麦克风与扬声器距离过近,扬声器播放的声音被麦克风采集后再次放大播出,形成正反馈,产生啸叫。
- 音量增益过高:AGC 或手动音量设置过大,超出 AEC 的消除能力范围。
三、ZEGO SDK 解决方案
ZEGO Express SDK 内置了完整的音频处理能力,覆盖上述三类问题。
3.1 音频 3A 处理(核心方案)
3A 是指 AEC(回声消除)、AGC(自动增益控制)、ANS(降噪)三项音频处理技术,对应 SDK 接口是enableAEC、enableHeadphoneAEC、setAECMode,它们是解决语聊房音质问题的基础手段。
注意:
enableAEC、enableHeadphoneAEC、setAECMode等接口需要在startPublishingStream、startPlayingStream、startPreview等接口之前调用才有效。
AEC:回声消除
enableAEC 开启后,SDK 会对采集到的音频数据进行过滤,减少回声成分。
SDK 支持三种传统回声消除模式,可通过 setAECMode 设置:
| 枚举值 | 说明 |
|---|---|
ZegoAECMode.AGGRESSIVE | 激进模式,回声消除效果最强,但可能对音质有一定影响 |
ZegoAECMode.MEDIUM(默认) | 适度模式,在音质和消除效果之间取得平衡 |
ZegoAECMode.SOFT | 舒适模式,基本不影响音质,但可能残留少量回声 |
此外,SDK 还支持 AI 回声消除模式(需联系 ZEGO 技术支持开通特殊编包):
| 枚举值 | 说明 |
|---|---|
ZegoAECMode.AI | AI 模式,智能识别并消除回声,人声保真度明显提升,无额外延迟与功耗增量 |
ZegoAECMode.AI_AGGRESSIVE | AI 强消除模式,适用于混响显著的聊天室场景 |
对于使用耳机的用户,还可以通过 enableHeadphoneAEC 单独控制耳机场景下的回声消除(语聊场景建议开启)。
示例代码:
// 开启回声消除(需在推拉流前调用)
engine.enableAEC(true);
// 语聊场景使用耳机时建议开启
engine.enableHeadphoneAEC(true);
// 设置为适度模式(默认值,一般无需修改)
engine.setAECMode(ZegoAECMode.MEDIUM);
// 开启回声消除(需在推拉流前调用)
[[ZegoExpressEngine sharedEngine] enableAEC:YES];
// 语聊场景使用耳机时建议开启
[[ZegoExpressEngine sharedEngine] enableHeadphoneAEC:YES];
// 设置为适度模式
[[ZegoExpressEngine sharedEngine] setAECMode:ZegoAECModeMedium];
AGC:自动增益控制
enableAGC 开启后,SDK 自动调节麦克风音量,适应远近拾音,保持音量稳定,避免因音量忽大忽小引发的啸叫风险。
语聊场景建议保持默认配置(SDK 内部自动判断是否启用)。
// Android:显式开启 AGC
engine.enableAGC(true);
// iOS:显式开启 AGC
[[ZegoExpressEngine sharedEngine] enableAGC:YES];
ANS:降噪
enableANS 开启后,SDK 识别并消除背景噪声,使人声更清晰。可通过 setANSMode 设置降噪强度:
| 枚举值 | 说明 |
|---|---|
ZegoANSMode.AGGRESSIVE | 激进降噪,效果最强,可能轻微影响音质 |
ZegoANSMode.MEDIUM(默认) | 适度降噪,效果与音质平衡 |
ZegoANSMode.SOFT | 轻度降噪,基本不影响音质,但会残留部分噪声 |
对于键盘敲击、桌面碰撞等突发性瞬态噪声,可额外开启 enableTransientANS。
// Android
engine.enableANS(true);
engine.enableTransientANS(true); // 可选:开启瞬态噪声抑制
engine.setANSMode(ZegoANSMode.MEDIUM);
// iOS
[[ZegoExpressEngine sharedEngine] enableANS:YES];
[[ZegoExpressEngine sharedEngine] enableTransientANS:YES];
[[ZegoExpressEngine sharedEngine] setANSMode:ZegoANSModeMedium];
3.2 场景化 AI 降噪(进阶方案)
传统 ANS 主要针对稳态噪声(持续性背景音),对于非稳态噪声(突发性噪声)效果有限。ZEGO Express SDK 提供的场景化 AI 降噪能实时自动识别场景,智能调整降噪策略:
- 通话场景:将除人声外的所有声音识别为噪音并消除,包括鼠标、键盘、空调、厨房碗碟、嘈杂餐厅、环境风声、咳嗽、吹气等,同时消除小房间人声混响,实现人声高保真
- 音乐场景:实时检测 mic 输入中的音乐信号,在声卡、弹唱或近场音乐场景下自动降低降噪等级,保证音乐高保真音质
功能优势:
- 能消除约 80% 的噪声
- 延迟低,内存占用与传统降噪基本一致
- CPU 使用率低
- 音乐场景识别准确率达 99%
AI 降噪提供三种模式,通过 setANSMode 设置:
| 模式 | 适用场景 |
|---|---|
ZegoANSMode.AI(轻量) | 室内噪音等相对舒适的环境,功耗最低 |
ZegoANSMode.AI_BALANCED(均衡) | 户外闹市、交通出行等复杂噪音环境,全面消除噪音同时无损人声 |
ZegoANSMode.AI_LOW_LATENCY(低延迟) | 游戏语音、游戏开黑、实时合唱等延迟敏感场景,10ms 延迟下保持纯净降噪效果 |
注意:使用 AI 降噪功能前,需联系 ZEGO 技术支持进行特殊编包。设置 AI 降噪模式后,SDK 会强制关闭瞬态噪声抑制(
enableTransientANS)。
// Android:开启 AI 均衡降噪(适合语聊房复杂环境)
engine.enableANS(true);
engine.setANSMode(ZegoANSMode.AI_BALANCED);
// iOS:开启 AI 均衡降噪
[[ZegoExpressEngine sharedEngine] enableANS:YES];
[[ZegoExpressEngine sharedEngine] setANSMode:ZegoANSModeAIBalanced];
3.3 音频路由管理
啸叫问题与音频路由密切相关。当用户使用扬声器外放时,麦克风与扬声器距离近,极易形成声音反馈回路。
ZEGO Express SDK 支持以下音频路由类型(ZegoAudioRoute):
| 枚举值 | 说明 |
|---|---|
ZegoAudioRouteSpeaker | 扬声器(外放) |
ZegoAudioRouteHeadphone | 有线耳机 |
ZegoAudioRouteBluetooth | 蓝牙设备 |
ZegoAudioRouteReceiver | 听筒(贴耳播放) |
建议策略:
- 语聊房默认使用听筒或耳机模式,从根源上避免啸叫。
- 若业务需要扬声器外放,确保 AEC 已开启,并将 AEC 模式设置为
AGGRESSIVE或AI_AGGRESSIVE。 - 蓝牙耳机接入时,建议同时开启
enableHeadphoneAEC。
四、语聊房推荐配置
以下是针对语聊房场景的完整 3A 推荐配置,在推流前调用:
Android(Java):
// 1. 回声消除:开启,使用默认 AGGRESSIVE 模式即可
engine.enableAEC(true);
// 使用耳机时也开启回声消除(语聊场景推荐)
engine.enableHeadphoneAEC(true);
// 2. 自动增益控制:保持默认(SDK 自动判断),或显式开启
engine.enableAGC(true);
// 3. 降噪:开启,普通环境用 MEDIUM,复杂环境升级为 AI_BALANCED
engine.enableANS(true);
engine.setANSMode(ZegoANSMode.MEDIUM);
// 如已开通 AI 降噪,复杂环境可改为:
// engine.setANSMode(ZegoANSMode.AI_BALANCED);
// 4. 瞬态噪声抑制(键盘、敲击等突发噪声)
engine.enableTransientANS(true);
iOS(Objective-C):
// 1. 回声消除
[[ZegoExpressEngine sharedEngine] enableAEC:YES];
[[ZegoExpressEngine sharedEngine] enableHeadphoneAEC:YES];
[[ZegoExpressEngine sharedEngine] setAECMode:ZegoAECModeMedium];
// 2. 自动增益控制
[[ZegoExpressEngine sharedEngine] enableAGC:YES];
// 3. 降噪
[[ZegoExpressEngine sharedEngine] enableANS:YES];
[[ZegoExpressEngine sharedEngine] setANSMode:ZegoANSModeMedium];
// 如已开通 AI 降噪,复杂环境可改为:
// [[ZegoExpressEngine sharedEngine] setANSMode:ZegoANSModeAIBalanced];
// 4. 瞬态噪声抑制
[[ZegoExpressEngine sharedEngine] enableTransientANS:YES];
五、问题排查指南
5.1 回声问题排查
- 定位产生回声的用户:多方通话时,听到回声的用户往往不是问题来源。逐一关闭其他用户的麦克风,找到产生回声的那一方。
- 检查 CPU 负载:CPU 瞬时过高会导致 AEC 处理延迟,产生回声。检查是否有音频前/后处理逻辑阻塞(处理时间应控制在 10ms 以内)。
- 检查混流拉取:连麦时确认是否同时拉取了包含自己声音的混流,如有则会产生二次回声。
- 检查设备自带 AEC:部分设备自带回声消除功能,与 SDK 的 AEC 冲突时效果反而变差。可联系 ZEGO 技术支持分析后关闭设备自带 AEC。
5.2 噪声问题排查
- 确认
enableANS是否已调用并传入true。 - 根据噪声类型调整 ANS 模式:持续性背景噪声用
MEDIUM,复杂环境升级为 AI 模式。 - 键盘、敲击等突发噪声,开启
enableTransientANS。 - 若噪声仍明显,考虑申请开通场景化 AI 降噪(联系 ZEGO 技术支持)。
5.3 啸叫问题排查
- 检查音频路由:确认是否在扬声器外放状态下,麦克风与扬声器距离过近。
- 降低音量增益:检查 AGC 配置或手动音量是否设置过高。
- 加强 AEC:将 AEC 模式切换为
AGGRESSIVE或 AI 强消除模式AI_AGGRESSIVE。 - 引导用户使用耳机:从根源上切断声音反馈回路。
5.4 仍无法解决时
如果按照上述步骤操作后问题仍然存在,可以通过以下方式联系 ZEGO 技术支持,并提供以下信息以便快速定位:
- 出现问题的房间 ID(roomID)
- 听到问题和产生问题的用户 ID(userID)
- 出现问题的具体时间段
- SDK 日志文件(获取方式参考官方文档)
- 音频 Dump 文件(如有)
六、总结
ZEGO Express SDK 内置的 3A 处理在绝大多数语聊房场景下开箱即用,默认配置已能覆盖常见问题。针对复杂噪声环境,可进一步开启场景化 AI 降噪;啸叫和回声问题则需结合音频路由管理和 AEC 模式综合调优。遇到难以复现的问题,借助 ZEGO星图质量监控平台可以快速定位通话质量异常,大幅降低排查成本。
扫描下面二维码联系我们👇,快速解决相关问题。

原创文章,作者:ZEGO即构科技,如若转载,请注明出处:https://market-blogs.zego.im/reports-baike/3394/