Как найти текущий поток MediaStream для микрофона и применить ограничения — WEBRTC

Я хочу отредактировать сигнал микрофона, используемый конференцией BigBlueButton, и отключить автоматическую регулировку усиления и подавление эха.

Однако у меня нет информации об экземпляре MediaStream, используемом на странице конференции. Итак, первый вопрос: можно ли найти такой активный поток на странице? для последующего применения к нему ограничений. Существует этот вопрос, в котором говорится, что невозможно найти активные потоки. Но время прошло и, возможно, варианты изменились. Кроме того, могут быть другие способы добраться до этого объекта потока.

Кроме этого, может быть, есть возможность изменить собственные флаги браузеров для этих AGC или AEC из скрипта или расширения JS? (а не из самого браузера)

В более конкретных деталях этой проблемы: внутри дистрибутива BBB я искал файлы js ( sip.js и bbb_webrtc_bridge_sip.js), которые используют метод getUserMedia, и я отредактировал их, чтобы дать ему желаемые ограничения, но безрезультатно. Если кто-то знает об этой конкретной платформе, я хотел бы попросить вашей помощи.

Примечание. На указанной странице есть аудиообъект, который доказывает, что srcObject разрешается в MediaStream, я могу получить к нему доступ и применить к нему ограниченные действия, но только в эхо-тесте. После прохождения этого теста и внутри фактической конференции доступ к этому аудиообъекту не имеет никакого эффекта.


person Roberto Becerra    schedule 29.03.2020    source источник


Ответы (1)


Решение оказалось не для доступа к MediaStream из нового JS-скрипта или расширения, а, как и в специфике вопроса: из JS-файлов BigBlueButton:

Файлы sip.js и bbb_wertc_bridge_sip.js, упомянутые выше, принадлежали флеш-клиенту, который теперь не используется в пользу клиента html5, поэтому правильный файл для редактирования:

/usr/share/meteor/bundle/programs/web.browser/app/compatibility/sip.js

и поэтому я искал экземпляры ограничений или место, где создается медиапоток, вставлял пользовательские ограничения и принудительно вводил их:

строка 11941->. mediaHint = Object.keys(mediaHint || {}).length ? mediaHint : this.mediaHint;

заменен на-> mediaHint = this.mediaHint, чтобы принудительно ввести следующее условие, которое создает новый поток с моими собственными ограничениями в:

строка 11956->

var constraints = mediaHint.constraints ||
(this.mediaHint && this.mediaHint.constraints) ||
{audio: true, video: true};

вставил свои собственные ограничения:

var constraints = {
                   audio: {
                          autoGainControl: false,
                          echoCancellation: false,
                          noiseSuppression: false,
                   },
                   video:false
};

Это работает, и теперь эти ограничения отключают AGC, AEC и NS.

person Roberto Becerra    schedule 04.04.2020