WebRTC — это все еще развивающийся стандарт, и поэтому иногда возникают проблемы, когда он ведет себя по-разному на различном оборудовании, в разных браузерах и т. д.
Сегодня мы обновили Twilio Client 1.2, чтобы предоставить вам больше контроля над базовыми примитивами WebRTC, в частности над getUserMedia, который позволяет получить доступ к микрофону пользователя. Эта новая функция позволяет поддерживать стабильное качество звука в различных аудиосредах.
Twilio Client обычно сам заботится о проблемах со звуком, но иногда вы можете столкнуться с проблемами, специфичными для конкретных устройств, когда полезно вручную настроить параметры getUserMedia. Twilio.js теперь позволяет передавать определенные настройки в базовый объект WebRTC.
Вот один пример, где это может быть полезно. Один из наших клиентов обнаружил, что их аудиоустройства некорректно работают с функциями автоматической регулировки усиления (AGC) в Windows. AGC предназначена для динамической фильтрации входного уровня громкости микрофона в зависимости от громкости источника, чтобы другой конец слышал постоянный, ровный уровень громкости.
К сожалению, один клиент обнаружил, что его AGC не совсем оправдывает свое название. Каждый раз, когда они совершали звонок с помощью Chrome в Windows, операционная система медленно увеличивала громкость микрофона до максимума. Это было неприятным опытом для собеседника.
Причиной проблемы было то, что AGC пыталась найти правильную громкость для микрофона, но ошибалась.
К счастью, новый параметр audioConstraints в Twilio Client теперь позволяет вам включать или отключать такие функции, как AGC, передавая аудиоограничения напрямую в базовый вызов getUserMedia, что позволяет обойти необычные, специфичные для среды проблемы, подобные этой.
Чтобы избежать упомянутой нами ранее проблемы «выкручивания на максимум», вы можете использовать audioConstraints для отключения AGC в Chrome через параметр googAutoGainControl, как показано ниже:
Это всего лишь один пример того, насколько полезно передавать параметры напрямую в getUserMedia. Новый параметр audioConstraints является необязательным вторым аргументом для Twilio.Device.setup(). Любые параметры, которые вы передадите сюда, будут отправлены в getUserMedia.
Например, вы можете использовать audioConstraints для программного выбора определенного аудиоустройства: