MediaDevices.enumerateDevices() 未在浏览器中显示虚拟网络摄像头,但 google meet 和其他网站正在显示

MediaDevices.enumerateDevices() is not showing virtual webcam in browser but google meet and other website are showing

我使用 Google meet in Chrome browser 进行在线视频会议。在 Google 会议中,我可以 select 我在视频设备中的网络摄像头。我可以 select 任何真实的硬件或虚拟网络摄像头,而且效果很好。

我确定Chrome检测到所有真实或虚拟网络摄像头看到chrome://media-internals/

的内容

但是MediaDevices.enumerateDevices()只显示真实的硬件网络摄像头,不显示虚拟网络摄像头。

<!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>

这里是 devtools 中控制台的输出:

[
    {
        "deviceId": "",
        "kind": "audioinput",
        "label": "",
        "groupId": "a71e32bec65bc4788683c156cfbc3c005bce4535b980209e4a455973bd93f36a"
    },
    {
        "deviceId": "",
        "kind": "videoinput",
        "label": "",
        "groupId": "03e0a9c9e71757f81bef3f3a74c4a56785b2d3d103a7de883101e509c233977f"
    },
    {
        "deviceId": "",
        "kind": "audiooutput",
        "label": "",
        "groupId": "a71e32bec65bc4788683c156cfbc3c005bce4535b980209e4a455973bd93f36a"
    }
]

为什么 Google meet 和其他网站显示所有相机包括虚拟相机,为什么 MediaDevices.enumerateDevices() 不显示虚拟相机?

成功 getUserMediaenumerateDevices 中仅显示空标签和默认设备是一种边缘情况,只有在对 file:/// 网址进行测试时才会发生。它应该在 https:// url(和本地主机)上正常工作,其中成功的 getUserMedia 调用授予对扩展设备列表的权限(有关详细信息,请参阅此 PSA