【问题标题】:WebRTC Android: sound from phone speaker is going into conference through phone mic and causing echoWebRTC Android:来自电话扬声器的声音通过电话麦克风进入会议并引起回声
【发布时间】:2020-10-08 11:31:45
【问题描述】:

在某些移动设备(如 Motorola One Power - Android 10、Redmi Note 5 Pro - Android 7.1.2)中,来自手机扬声器的声音通过手机麦克风进入会议并引起回声。仅当电话扬声器处于开启状态时才会出现此回声问题。

我使用了 AudioManager 的 MODE_IN_COMMUNICATION 模式:

mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

此外,在音频约束下使用 PeerConnectionFactory 的 createAudioSource() API 创建音频源:

audioConstraints = new MediaConstraints();
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAutoGainControl", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googHighpassFilter", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));

在解决问题方面的任何帮助或指导将不胜感激。

【问题讨论】:

    标签: android webrtc microphone webrtc-android


    【解决方案1】:

    有些手机无法进行硬件回声消除,即使他们宣传它是可用的。 Redmi Note 5肯定是其中之一,看https://github.com/signalapp/Signal-Android/blob/master/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java,搜索HARDWARE_AEC_BLACKLIST。 因此,要启用 WebRTC AEC,请使用 JavaAudioDeviceModule.class 的以下方法

    setUseHardwareAcousticEchoCanceler(false)       
    setUseHardwareNoiseSuppressor(false) 
    

    (作为参考,请查看 PeerConnectionClient.java 的 createJavaAudioDevice() - Checkout official android example on googlesource.com

    【讨论】:

      【解决方案2】:

      Android AudioManager 它提供了对音量和铃声模式控制的访问权限。

      首先使用isMicrophoneMute()方法判断麦克风是打开还是关闭。

      getDevices() 的帮助下找出所有连接的音频设备,这将有助于确定哪个麦克风用户想要静音

      一旦检测到目标麦克风,使用setMicrophoneMute() 设置麦克风静音

      【讨论】:

        猜你喜欢
        • 2012-01-22
        • 2017-07-18
        • 2015-10-31
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多