Agora.io基础视频通话回声问题消除方法咨询
解决Agora.io视频通话中的句尾回声问题
我看到你在使用Agora.io实现Unity视频通话时,遇到了在A10、A71手机和电脑端通话时对方听到句尾回声的问题,结合你的代码片段,我整理了几个针对性的解决方法,应该能帮你解决这个问题:
1. 启用Agora内置的回声抑制(AEC)功能
Agora SDK自带了强大的音频处理模块,但默认情况下可能需要显式配置才能让回声抑制完全生效。建议在初始化RtcEngine或者调用JoinChannel前添加以下配置:
// 优先设置通话场景,SDK会自动优化音频处理逻辑 mRtcEngine.SetAudioProfile(AudioProfileType.AUDIO_PROFILE_SPEECH_STANDARD, AudioScenarioType.AUDIO_SCENARIO_COMMUNICATION); // 显式开启回声抑制(AEC) mRtcEngine.SetParameters("{\"che.audio.enable_aec\":true}"); // 可选:启用音量提示,帮助你排查音频输入输出的异常情况 mRtcEngine.EnableAudioVolumeIndication(200, 3, true);
通话场景下,SDK会优先优化语音清晰度和回声抑制效果,显式开启AEC参数可以确保该功能在目标设备上正常工作。
2. 修正代码中的视频Surface绑定逻辑
看你的代码,在OnUserJoined里把远程视频绑定到了screen1,但在JoinChannel中你同时激活了screen1和screen2——这里可能存在本地视频和远程视频共用显示组件的问题,导致设备的扬声器播放远程音频时被本地麦克风再次采集,形成回声。
建议调整代码,让本地视频和远程视频使用单独的Surface:
修改JoinChannel方法,添加本地视频绑定:
public void JoinChannel(string channelName) { //set callback Debug.Log("Join channel"); screen1.SetActive(true); screen2.SetActive(true); joinButton.SetActive(false); inputField.SetActive(false); mRtcEngine.OnJoinChannelSuccess = OnJoinChannelSuccess; mRtcEngine.OnUserJoined = OnUserJoined; mRtcEngine.OnUserOffline = OnUserOffline; // 先启用音频,确保音频处理模块正常启动 mRtcEngine.EnableAudio(); //enable video mRtcEngine.EnableVideo(); //allow camera output callback mRtcEngine.EnableVideoObserver(); // 绑定本地视频到screen1 VideoSurface localSurface = screen1.AddComponent<VideoSurface>(); localSurface.SetForUser(0); // 0代表本地用户 localSurface.SetEnable(true); //join the channel mRtcEngine.JoinChannel(channelName, null, 0); }
修改OnUserJoined方法,使用screen2显示远程视频:
private void OnUserJoined(uint uid, int elapsed) { textDebug.GetComponent<Text>().text = "OnUserJoined"; Debug.Log("OnUserJoined"); GameObject go = screen2; // 用独立的screen2显示远程视频 go.name = uid.ToString(); VideoSurface o = go.AddComponent<VideoSurface>(); o.SetForUser(uid); o.SetEnable(true); Debug.Log(uid); mRemotePeer = uid; }
这样分开本地和远程视频的显示,可以避免设备扬声器播放的远程音频被本地麦克风重复采集,从物理层面减少回声来源。
3. 检查设备系统级音频设置
对于Android设备(比如A10、A71),系统自带的音频增强功能可能会和Agora的音频处理冲突,建议:
- 关闭设备设置中的麦克风增强、自动增益控制选项
- 如果使用外放通话,尽量避免将手机靠近麦克风;优先使用耳机测试,排除物理回声的可能
- 电脑端同样建议使用耳机,避免扬声器声音直接传入麦克风
4. 避免重复的音频/视频配置调用
确保不要在代码中重复调用EnableVideoObserver、EnableAudio等方法,重复配置可能导致SDK的音频处理模块出现异常,影响回声抑制效果。
如果以上方法都尝试后仍有问题,可以尝试切换不同的AudioProfile配置(比如AUDIO_PROFILE_MUSIC_STANDARD_STEREO)测试,或者检查目标设备的麦克风权限是否正常授予。
内容的提问来源于stack exchange,提问作者Thai Son




