Javascript 在没有输入媒体设备的机器上无法查询输出媒体设备(带标签)?
我需要列出用户机器上可用的音频输出选项。为此,可以使用该方法,该方法返回MediaDeviceInfo元素数组的承诺:Javascript 在没有输入媒体设备的机器上无法查询输出媒体设备(带标签)?,javascript,audio,Javascript,Audio,我需要列出用户机器上可用的音频输出选项。为此,可以使用该方法,该方法返回MediaDeviceInfo元素数组的承诺: let devices = await navigator.mediaDevices.enumerateDevices(); 现在我需要为用户显示一个选择下拉列表。此下拉列表应填充每个设备的名称,该名称可通过MediaDeviceInfo.label属性获得,但前提是用户在响应MediaDevices.getUserMedia调用时授予访问音频设备的权限(否则label属性为
let devices = await navigator.mediaDevices.enumerateDevices();
现在我需要为用户显示一个选择下拉列表。此下拉列表应填充每个设备的名称,该名称可通过MediaDeviceInfo.label
属性获得,但前提是用户在响应MediaDevices.getUserMedia
调用时授予访问音频设备的权限(否则label
属性为空字符串)
因此,考虑到这一点,我们应该这样做:
await navigator.mediaDevices.getUserMedia({ audio: true });
let devices = await navigator.mediaDevices.enumerateDevices();
devices.forEach(deviceInfo => console.log(deviceInfo.label));
现在这里有一个小问题
MediaDevices.getUserMedia
要求用户计算机上存在一个音频输入或视频输入,如果没有音频输入或视频输入,则会立即抛出!也就是说,我不能用它来查询用户机器上的输出设备,如果那台机器没有输入设备的话,至少可以说这是非常有趣的
那么,在没有输入设备的机器上,我应该如何查询输出设备呢?
注意:这是在最新的Chrome中,问题与web上的JavaScript有关,即不是Electron之类的,它们没有显示此问题。这有点难以重现,需要模拟没有输入设备的情况。听起来像是Chrome的bug,也许在那里提交bug报告?正在引发哪个异常?@Tommos——这是一个
DevicesNotFoundError
,它是NotFoundError
()的特定于Chrome的错误。据我所知,这是应该扔在这种情况下,因为确实没有音频输入设备。问题是,这也阻止了用标签查询输出设备。我猜API的设计还没有完全完成,将音频输入权限与输出链接起来是有问题的,但它在没有输入设备的情况下中断的事实一点也不好。这很糟糕,但我想你必须找到一个解决办法。由于您可以检测到此异常,因此最好编写一本手册,说明如何更改操作系统的默认输出(例如,针对这些用户)?