You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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中你同时激活了screen1screen2——这里可能存在本地视频和远程视频共用显示组件的问题,导致设备的扬声器播放远程音频时被本地麦克风再次采集,形成回声。

建议调整代码,让本地视频和远程视频使用单独的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. 避免重复的音频/视频配置调用

确保不要在代码中重复调用EnableVideoObserverEnableAudio等方法,重复配置可能导致SDK的音频处理模块出现异常,影响回声抑制效果。


如果以上方法都尝试后仍有问题,可以尝试切换不同的AudioProfile配置(比如AUDIO_PROFILE_MUSIC_STANDARD_STEREO)测试,或者检查目标设备的麦克风权限是否正常授予。

内容的提问来源于stack exchange,提问作者Thai Son

火山引擎 最新活动