webrtc:mediaDevices.enumerateDevices()返回空的deviceId

我目前正在探索 webRTC,我想要做的是获取所有 mediadevices 信息以及 deviceId 使用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,})之前也尝试过打电话,await navigator.mediaDevices.enumerateDevices()但仍然得到相同的结果。

回答

deviceId现在提前返回空的s,getUserMedia因为跟踪库曾经(并且仍然)enumerateDevices集体呼叫指纹人员,而无意要求摄像头或麦克风。

该规范已由隐私兴趣小组 (PING)审核,因此,不推荐使用此枚举优先策略(在询问用户相机或麦克风之前枚举设备),以改善用户隐私。即使在将用户选择为持久权限的浏览器中也是如此。(警告:这最后一部分在 Chrome 中被取消了,所以请去吧?crbug 1101860!)

所有大型 WebRTC 站点都已经使用设备优先策略来代替(首先要求摄像头或麦克风,然后在直播时在 ?? 选项下实现设备切换)。因此,这种重大变化的网络兼容性被认为是可以接受的。

换句话说,在getUserMedia解析之前,您只能了解用户是否没有摄像头或没有麦克风。这些是唯一剩下的两个指纹位(您不会看到列出多个设备)。

我之前也尝试过调用 [getUserMedia],但仍然得到相同的结果。

然后你做错了,因为labels 和deviceIds 都可用,使设备切换仍然有效。有关演示,请参阅WebRTC 示例。您甚至可以存储这些deviceIds 并getUserMedia在以后的访问中使用它们,该部分仍然有效。在使用deviceId约束要求它们之前,您无法枚举它们(跟踪它们的存在)。

操作假设是最流行的跟踪库在阴影中运行,并且不会冒险代表他们的客户站点实际提示用户使用他们的相机或麦克风。


以上是webrtc:mediaDevices.enumerateDevices()返回空的deviceId的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>