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

时间:2018-11-14 16:39:19

标签: javascript webrtc

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

navigator.mediaDevices.enumerateDevices()
  .then((list) => {
    console.log(list);
  });

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

Safari不执行此操作。 Firefox最近停止了这样做(从版本63开始)。

照相机永远不会以这种方式复制。