在没有 audio/video 捕获的情况下请求完整的 MediaDeviceInfo

Request full MediaDeviceInfo without audio/video capture

我正在使用 MediaDevices API 获取音频输出设备列表:

const outputDevices = (
  await navigator.mediaDevices.enumerateDevices()
).filter(device => device.kind === 'audiooutput');

这有效,但是 label 是空白的。

我知道如果我使用 getUserMedia() 请求音频或视频流,我可以重新枚举设备并获取它们的标签。有什么方法可以在 没有 getUserMedia() 的情况下获得查看设备的权限?我想设置音频输出的接收器ID,没有理由使用捕获设备。

要获取此信息,我必须先进行简单的 getUserMedia ({audio: true}) 操作。枚举完成后删除流中的曲目,然后删除流是没有问题的。

它将要求用户许可。为什么?因为恶意方可能会使用您的设备枚举数据来对您的浏览器进行指纹识别并帮助跟踪您。

不幸的是,这是音频输出设备的 known limitation API - 关于 github 问题的讨论指向可能的解决方案,但尚未做出明确的决定。