Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在没有输入媒体设备的机器上无法查询输出媒体设备(带标签)?_Javascript_Audio - Fatal编程技术网

Javascript 在没有输入媒体设备的机器上无法查询输出媒体设备(带标签)?

Javascript 在没有输入媒体设备的机器上无法查询输出媒体设备(带标签)?,javascript,audio,Javascript,Audio,我需要列出用户机器上可用的音频输出选项。为此,可以使用该方法,该方法返回MediaDeviceInfo元素数组的承诺: let devices = await navigator.mediaDevices.enumerateDevices(); 现在我需要为用户显示一个选择下拉列表。此下拉列表应填充每个设备的名称,该名称可通过MediaDeviceInfo.label属性获得,但前提是用户在响应MediaDevices.getUserMedia调用时授予访问音频设备的权限(否则label属性为

我需要列出用户机器上可用的音频输出选项。为此,可以使用该方法,该方法返回MediaDeviceInfo元素数组的承诺:

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的设计还没有完全完成,将音频输入权限与输出链接起来是有问题的,但它在没有输入设备的情况下中断的事实一点也不好。这很糟糕,但我想你必须找到一个解决办法。由于您可以检测到此异常,因此最好编写一本手册,说明如何更改操作系统的默认输出(例如,针对这些用户)?