我目前正在探索 webRTC,我想做的是获取所有媒体设备信息以及deviceId
using navigator.mediaDevices.enumerateDevices();
然后根据其种类属性将其分离出来,并允许用户选择针对特定种类使用哪种媒体设备。就像显示找到的相机的下拉列表并允许用户选择要使用的相机一样,这就是为什么我需要每个设备的 deviceId 。
这是我当前用于获取媒体设备的代码:
const getConnectedDevices = async (type, callback) => {
const mediaDevices = await navigator.mediaDevices.enumerateDevices();
console.log(mediaDevices);
callback(mediaDevices.filter((device) => device.kind === type));
};
这就是我得到的输出:
[
{
deviceId: ""
groupId: "51081772b5c5df2dbcb2ca2b8ae36c5d693d816f8d4bf4039cdb15802b7ffc54"
kind: "audioinput"
label: ""
},
{
deviceId: ""
groupId: "2e7a46f912e66fea3b6af4822e427c02a7725c39d86194dccdf5b7993293d7da"
kind: "videoinput"
label: ""
},
{
deviceId: ""
groupId: "51081772b5c5df2dbcb2ca2b8ae36c5d693d816f8d4bf4039cdb15802b7ffc54"
kind: "audiooutput"
label: ""
}
]
一直得到一个空的deviceId。
我也尝试过打电话await navigator.mediaDevices.getUserMedia( {video: true,audio: true,})
before await navigator.mediaDevices.enumerateDevices()
但仍然得到相同的结果。
它返回空deviceId
现在领先于getUserMedia
因为跟踪库是(并且仍然是 https://chromestatus.com/metrics/feature/timeline/popularity/1119) 呼叫enumerateDevices
集体对人进行指纹识别,无意要求摄像头或麦克风。
该规范由隐私兴趣小组 (PING) https://www.w3.org/Privacy/IG/,结果是,这先列举策略(在询问用户提供摄像头或麦克风之前枚举设备)已被弃用,以提高用户隐私。即使在选择用户获得持久权限的浏览器中也是如此。(警告:最后一部分在 Chrome 中被取消,所以请继续 ★错误 1101860 https://crbug.com/1101860!)
所有大型 WebRTC 站点都已经使用设备优先相反的策略(首先要求摄像头或麦克风,然后在直播时在 ⚙️ 选项下实现设备切换)。因此,这一重大更改的网络兼容性被认为是可以接受的。
换句话说,提前getUserMedia
解决,只能获知用户是否没有摄像头或没有麦克风。这是仅剩下的两个指纹识别位(您不会看到列出的多个设备)。
我之前也尝试过调用 [getUserMedia],...但仍然得到相同的结果。
那么你做错了什么,因为两者label
s and deviceId
然后,可以使设备切换仍然有效。看WebRTC 示例 https://webrtc.github.io/samples/src/content/devices/input-output/进行演示。您甚至仍然可以存储这些deviceId
s 并将它们与getUserMedia
在以后的访问中,该部分仍然有效。在使用以下命令询问它们之前,您无法枚举它们(跟踪它们的存在)deviceId
约束。
操作假设是最流行的跟踪库在阴影中运行,并且不会冒实际代表其客户端站点提示用户使用摄像头或麦克风的风险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)