【问题标题】:navigator.mediaDevices.enumerateDevices() does not get multiple audiooutputnavigator.mediaDevices.enumerateDevices() 没有获得多个音频输出
【发布时间】:2021-05-04 00:24:31
【问题描述】:

项目:列出所有媒体设备,然后选择1个不同于Windows默认的特定音频输出设备

我使用了enumerateDevices(),下面有很多代码示例,例如here,以及:

  • 在 Firefox 上:音频输入、视频输入列表,没有显示音频输出,但每个只有 1 个(我有 2 个输入,3 个输出)
  • 在 Chrome 上,Brave:显示相同的列表,每个也只有 1 个,并且类型/标签/id 为空(尽管 groupId 不为空)

代码:

function checkDevices(devices){
        (async () => {   
  await navigator.mediaDevices.getUserMedia({audio: true, video: true});   
  let devices = await navigator.mediaDevices.enumerateDevices();   
  devices.forEach(function (device) {
      console.log(device.kind + ": " + device.label + " id: " + device.groupId);//Other parameters device.kind/device.deviceId
    });
  })();
}
function checkError(err){
    console.log(err.name + ": " + err.message);
} 
navigator.mediaDevices.enumerateDevices().then(checkDevices).catch(checkError);

有人可以帮忙吗?

输出火狐 enter image description here

输出 Chrome(在 Brave 上相同) enter image description here

【问题讨论】:

  • 您需要共享您的代码,以便对其进行审核。没有人能帮助你而不看你做了什么
  • @Lee3 谢谢,代码已添加,您能帮忙吗?

标签: audio-streaming web-audio-api mediadevices enumerate-devices


【解决方案1】:

我找到了代码不起作用的原因,以及一些解决方法,可能对类似情况的其他人有所帮助:

原因: enumerateDevices() 需要用户的许可和浏览器的安全性 (https) 才能正确列出可用设备。由于代码位于本地,因此它返回错误列表和空标签/种类。

一些解决方法:

  1. 发布html,例如,我用https://www.netlify.com/(免费);但是如果您的项目正在开发中,每次尝试重新上传 html 并不方便。 Netlify 允许链接到 github,所以代码可以自动刷新

  2. 使用像www.w3schools.com这样的在线编译器,因为代码是从网站上运行的,它可以工作

  3. 使用electron做桌面应用,代码和web app基本一样。不知道电子?观看此视频(15 分钟)here

希望这些对某人有所帮助!

【讨论】:

  • 一些例子会有所帮助。
猜你喜欢
  • 2019-03-30
  • 2020-08-21
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多