getUserMedia дает вам микрофон
navigator.mediaDevices.getUserMedia({audio: true})
дает вам микрофон пользователя, а не звук из его системы.
Их микрофон может улавливать системный звук, но нет никаких гарантий. Например, не будет, если:
- У них выключена громкость
- Они используют гарнитуру
Конкретная причина, по которой вы не слышите других участников, - это echoCancellation включен по умолчанию во всех браузерах.
Без эхоподавления, когда ваш микрофон улавливает удаленный динамик, их голос немедленно отправляется обратно к ним, и они слышат эхо. Если их микрофон также не подавляет это эхо, вы получаете цикл с еще большим эхом.
Если вы знаете, что делаете, вы можете отключить echoCancellation с помощью:
await navigator.mediaDevices.getUserMedia({audio: {echoCancellation: false}});
или постфактум с:
await stream.getAudioTracks()[0].applyConstraints({echoCancellation: false});
Вместо этого используйте веб-аудио
Если это ваше собственное приложение для веб-конференций, то у вас уже должны быть все необходимые аудиодорожки. Вы должны иметь возможность передавать по крайней мере активного выступающего напрямую в MediaRecorder или, возможно, даже микшировать звук с помощью веб-аудио.
Приближается звук демонстрации экрана
Звук от совместного использования экрана указан в спецификации, но это необязательно, как для реализации, так и на усмотрение конечных пользователей.
Пока я считаю, что Chrome работает над его реализацией.
person
jib
schedule
24.11.2019