我使用Google相会在Chrome浏览器中进行在线视频会议。在Google中,我可以在视频设备中选择我的摄像头。我可以选择任何真正的硬件或虚拟摄像头,这是很好的。
我确信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和其他网站都在展示包括虚拟相机在内的所有相机,为什么MediaDevices.enumerateDevices()不显示虚拟相机呢?
发布于 2021-08-25 09:49:02
在enumerateDevices成功使用getUserMedia之后,只有在getUserMedia中显示的默认设备才是空标签,只有在file:/// urls上进行测试时才会出现这种情况。它应该在https:// urls (和本地主机)上正常工作,成功的getUserMedia调用授予扩展设备列表权限(详细信息请参见此PSA )。
https://stackoverflow.com/questions/68756589
复制相似问题