You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获Webview音频流切换为STREAM_VOICE_CALL并开启AEC解决Agora啸叫问题

问题排查与解决方案

1. STREAM_VOICE_CALL切换不生效问题

你当前的代码只修改了音量控制流,缺少必要的系统配置和Agora SDK适配,导致修改被覆盖,修复逻辑如下:

  • 首先要在AndroidManifest.xml中添加必要权限:
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    
  • 原生Android切换到通话音频流,需要同时设置音频模式为通话模式,你可以在修改音量控制流前添加配置:
    audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
    
  • 注意:Agora SDK默认会接管AudioManager配置,你手动修改的参数会被SDK内部逻辑覆盖,优先通过Agora提供的API配置即可,不需要自己操作AudioManager。

2. 原生AEC实现错误问题

你的AEC代码存在两处核心错误:

  1. 音频会话ID传参错误:AcousticEchoCanceler.create()需要传入正在使用的音频流对应的session ID,你自己调用generateAudioSessionId()生成的是全新的、未关联任何录音/播放流的ID,AEC无法对应到你的通话音频流,自然不会生效。
  2. 空指针风险:enableEchoCanceler的else分支、releaseEchoCanceler方法中直接使用!!调用aec实例,当aec为null时会直接触发崩溃。

如果确实需要自行实现原生AEC,修正后的代码如下:

private fun enableEchoCanceler(targetSessionId: Int, enable: Boolean) {
    if (enable) {
        if (AcousticEchoCanceler.isAvailable() && aec == null) {
            aec = AcousticEchoCanceler.create(targetSessionId)
            aec?.enabled = true
            // 增加生效校验,部分设备硬件AEC存在兼容性问题,即使申请也可能启用失败
            if (aec?.isEnabled != true) {
                aec?.release()
                aec = null
            }
        }
    } else {
        aec?.apply {
            enabled = false
            release()
        }
        aec = null
    }
}

private fun releaseEchoCanceler() {
    enableEchoCanceler(0, false)
}

调用时需要传入Agora SDK实际使用的音频会话ID,通过Agora API获取:val sessionId = rtcEngine.getAudioSessionId(),不要自己生成。

3. Agora平台最优适配方案

针对你的场景,完全不需要自己操作原生AudioManager和AEC,直接通过Agora官方API配置即可解决所有问题:

// 初始化RtcEngine后直接设置音频参数
// 配置为语音通话场景,SDK内部会自动切换到STREAM_VOICE_CALL、启用系统AEC
rtcEngine.setAudioProfile(
    Constants.AUDIO_PROFILE_SPEECH_STANDARD,
    Constants.AUDIO_SCENARIO_CHATROOM_VOICE
)
// 强制开启硬件回声消除
rtcEngine.setParameters("{\"che.audio.hw.aec\":true}")
// 可选:如果需要强制指定音频流类型为通话流
rtcEngine.setParameters("{\"che.audio.stream_type\":1}")

以上配置完成后,SDK会自动处理音频路由、回声消除逻辑,不会和系统逻辑冲突,稳定性远高于自行实现。

内容的提问来源于stack exchange,提问作者c-an

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:39:01