Как отключить автоматическое управление усилением (AGC) в веб-приложениях WebRTC, таких как Google Hangouts или OpenTokRTC

В днях googletalkplugin до WebRTC можно отключить AGC (автоматическое управление усилением для микрофона), добавив audio-flags: 1 в файл конфигурации. Однако, поскольку Google Hangouts теперь использует WebRTC, часто случается так, что, когда я общаюсь с кем-то, мой уровень микрофона снимается полностью, так что я более или менее молчал с другой стороны. У меня также были корреспонденты, чей объем микрофона был увеличен полностью, неоднократно.

Я воспроизвел это поведение на http://opentokrtc.com/, который также использует WebRTC. Сделав громкие звуки в моем микрофоне, я смогу получить уровень, чтобы пройти весь путь в несколько шагов. Я могу сделать это как на Chrome 38, так и на FireFox 34.

Однако, когда я использую локальное приложение, например Audacity, на моем компьютере Ubuntu 14.04.1, я не способен влиять на уровень микрофона, делая громкие звуки. Другими словами, на самом деле это выглядит так, как будто здесь скрывается WebRTC.

Кажется, что в реализации Chrome можно настроить AGC WebRTC, передав вызов googAutoGainControl на вызов getUserMedia(). В FireFox я не смог найти эквивалент.

Мой вопрос: как конечный пользователь WebRTC, как настроить мой браузер (Chrome или FireFox) для отключения AGC, поскольку AGC не работает правильно в моей настройке?

Ответы

Ответ 1

GoogAutoGainControl как MediaTrackConstraints относится к Chrome (WebKit).

Устав рабочей группы WebRTC по-прежнему записывает стандарт, и они закончат следующие 30 июня 2015 года.

Firefox не поддерживает прямо сейчас.

Примечание. Для использования AGC не рекомендуется указывать какое-либо ограничение для браузера как обязательное, так как ваш вызов не будет работать в браузере, который не поддерживает ограничение. Вместо этого укажите свои ограничения как необязательные. Ваш браузер сделает все возможное, чтобы удовлетворить как можно больше дополнительных ограничений.

Кстати, вы можете играть с интерфейсом GainNode в Firefox: https://developer.mozilla.org/en-US/docs/Web/API/GainNode

Пример отключения googAutoGainControl:

  var webrtc = new SimpleWebRTC({
    localVideoEl: 'localVideo',
    remoteVideosEl: '',
    autoRequestMedia: true,
    //detectSpeakingEvents: true,
    adjustPeerVolume: false,
    peerVolumeWhenSpeaking: 1,  
    media: {
      audio: {
        optional: [
          //{sourceId: audio_source},
          {googAutoGainControl: false}, 
          {googAutoGainControl2: false}, 
          {googEchoCancellation: false},
          {googEchoCancellation2: false},
          {googNoiseSuppression: false},
          {googNoiseSuppression2: false},
          {googHighpassFilter: false},
          {googTypingNoiseDetection: false},
          {googAudioMirroring: false}
        ]
     },
     video: {
        optional: [
          //{sourceId: video_source}
        ]
      }
    }
    //autoAdjustMic: false        
  });

Конечный пользователь не может отключить в браузере эту функцию прямо сейчас. Расширенный пользователь может редактировать настройки в about: config в Firefox, но в Chrome не существует.

Ответ 2

Похоже, FireFox добавила некоторую поддержку для этого в 46:  https://wiki.mozilla.org/Media/WebRTC/ReleaseNotes/46

Реализованы ограничения echoCancellation, mozAutoGainControl и mozNoiseSuppression gUM. (См. Ошибку 987186.)