【问题标题】:Detect If Headset is connected or not in AngularJS在AngularJS中检测耳机是否连接
【发布时间】:2020-11-12 23:56:35
【问题描述】:

我想检查麦克风和耳机是否已连接。我已经通过下面的代码成功检测到麦克风是否连接。

 var mic = navigator.mediaDevices.getUserMedia({ audio: true });
    mic.then(function () {
        alert("Mic connected")
    }).catch(function (err) {
        alert("Please Connect Your Mic");
    })

现在我想对耳机做同样的事情,但我找不到任何解决方案。有人可以帮助如何做到这一点。谢谢。

【问题讨论】:

  • 您现在得到的反馈不也是针对耳机的吗? getUserMedia documentation 显示任何音频设备之间没有区别。此外,.getUserMedia({ audio: true }); 仅请求使用它的权限,它一开始就没有说明连接的设备。你需要看MediaDevices.enumerateDevices()
  • 不,它不用于耳机,它仅用于麦克风检测。 MediaDevices.enumeratedDevices() 返回五个音频输出设备,但我只想获取有关我的耳机的信息
  • 再次.getUserMedia({ audio: true }); 仅报告您可以访问系统上的任何 音频设备,它不区分扬声器、耳机、麦克风等。使用来自MediaDevices.enumeratedDevices() 的列表,您可以选择耳机或麦克风。当然,这因系统甚至用户而异。如果幸运的话,该名称中包含 headset,但很可能不会(这可以在系统级别分配)。
  • 是的,这些列表对于每个系统都是不同的,所以我没有使用它,并且 .getUserMedia({ audio: true });我不知道它只报告麦克风。
  • 确实没有办法避免使用MediaDevices.enumeratedDevices() 来解决这个问题。您只看到使用getUserMedia({ audio: true }); 的麦克风的原因是您拥有使用扬声器/耳机(或任何输出设备)的默认访问权限。这在理论上也可能有所不同,因此系统也可能会要求获得使用它们的权限,尽管我认为这根本没有实现。

标签: javascript angular webrtc


【解决方案1】:

您可以为设备更改添加事件监听器:

navigator.mediaDevices.addEventListener('devicechange', () => {
  // you need to label the device if it is a headset or not.
});

Chekout this 参考了解更多信息

【讨论】:

  • 这只有在设备发生变化时才有效,对吗?例如。如果我移除任何输入/输出设备,它就会工作。我想在没有任何变化的情况下检查它
  • 还枚举设备显示 5 个音频输出设备,所以我想专门检查我的耳机
猜你喜欢
  • 1970-01-01
  • 2020-08-17
  • 2023-03-20
  • 2015-12-22
  • 2010-11-17
  • 2017-04-24
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多