MediaDevices.enumerateDevices() не показывает виртуальную веб-камеру в браузере, но Google Meet показывает

Я использую Google Meet в браузере Chrome для онлайн-видеоконференций. В Google Meet я могу выбрать свою веб-камеру в видеоустройствах. Я могу выбрать любое реальное оборудование или виртуальную веб-камеру, и все работает хорошо.

Но показывает только настоящую аппаратную веб-камеру и не показывает виртуальные веб-камеры.

      <!DOCTYPE html>
<html>

<body>
    <script>
        (async () => {
            await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
            let devices = await navigator.mediaDevices.enumerateDevices();
            console.log(devices);
        })();
    </script>
</body>

</html>

Почему Google Meet показывает виртуальную камеру и почему MediaDevices.enumerateDevices() не показывает виртуальную камеру?

2 ответа

Решение

Пустая метка и только устройства по умолчанию, показанные в enumerateDevices после успешного getUserMedia это крайний случай, который может произойти только при тестировании на file:///URL-адреса. Он должен нормально работать на https://URL-адреса (и на localhost), где успешный вызов getUserMedia предоставляет разрешение на расширенный список устройств (подробности см. в этом PSA )

Сегодня для Windows используются два мультимедийных API: DirectShow и Microsoft Media Foundation. Еще в начале 2000-х DirectShow заменил ныне несуществующий Video For Windows API. DirectShow устарел и заменен Microsoft Media Foundation. Однако Microsoft Media Foundation еще не завершена, и все еще существует множество устройств захвата и программного обеспечения, которые используют DirectShow API.

Я предполагаю, что виртуальные веб-камеры используют DirectShow, в то время как драйверы для реальных веб-камер предоставляют реализации как Media Foundation, так и DirectShow. Может быть и наоборот, но я думаю, вы меня поняли. Теперь это звучит как MediaDevices.enumerateDevices()использует только один из Windows Media API для своего устройства видеозахвата (возможно, Media Foundation). Это объясняет, почему виртуальные веб-камеры не отображаются в JavaScript.

Другие вопросы по тегам