为什么mediaDevices.enumerateDevices两次列出某些设备?什么是默认值?

Ghe*_*man 3 javascript webrtc

我在Chrome中的JavaScript中编写以下代码:

navigator.mediaDevices.enumerateDevices()
  .then((list) => {
    console.log(list);
  });
Run Code Online (Sandbox Code Playgroud)

这将输出媒体设备列表,例如麦克风和相机。每个设备都表示为具有自己的对象deviceId。但是有些设备(例如特别是一个麦克风)被列出了两次。并将它们各自的时间deviceId设置为'default'。一个默认麦克风有何特别之处?我如何知道它的实际deviceId情况呢?

jib*_*jib 5

一个deviceId让网站管理用户正在使用的设备。例如,将其存储在cookie中以记住上次用户的偏好。

某些浏览器(Chrome浏览器,Opera)两次列出同一麦克风,但使用不同的ID。就我而言:

  1. 默认-内置麦克风(内置)
  2. 内置麦克风(内置)

前者是“操作系统默认设置”,无论最终用户在系统偏好设置/声音(OSX)或控制面板/声音(Windows)中配置了什么。这个想法是:当从cookie中调用并使用它时,其ID会为您提供使用时操作系统配置的任何内容,这可能与上次有所不同。

后者始终是特定的麦克风。他们groupId的比赛;它们是相同的物理设备atm。

deviceId = "default"是Chrome(和Opera)的怪异之处。AFAICT是一个有效的ID,与其他任何ID一样。如果您想要另一个,请比较他们的groupIds来找到它。

Safari不会这样做。Firefox最近停止这样做(从版本63开始)。

相机绝不会以这种方式复制。