如何检测麦克风类型

时间:2015-07-23 12:07:17

标签: javascript webrtc getusermedia

我使用webRTC(getUserMedia)录制声音并将其上传到后端服务器。一切顺利,除了我无法确定麦克风类型(它是内置麦克风,USB麦克风,耳机麦克风,还是其他?)

有谁知道我怎么能检测到这种类型?

1 个答案:

答案 0 :(得分:5)

您可以使用navigator.mediaDevices.enumerateDevices()列出用户的相机和麦克风,并尝试从其标签中推断出类型(不幸的是,没有麦克风类型字段)。

以下代码适用于Firefox 39和Chrome 45 *:



var stream;
navigator.mediaDevices.getUserMedia({ audio:true })
.then(s => (stream = s), e => console.log(e.message))
.then(() => navigator.mediaDevices.enumerateDevices())
.then(devices => {
  stream && stream.stop();
  console.log(devices.length + " devices.");
  devices.forEach(d => console.log(d.kind + ": " + d.label));
})
.catch(e => console.log(e));

var console = { log: msg => div.innerHTML += msg + "<br>" };
&#13;
<div id="div"></div>
&#13;
&#13;
&#13;

在我的系统上的Firefox中,这会产生:

5 devices.
videoinput: Logitech Camera
videoinput: FaceTime HD Camera (Built-in)
audioinput: default (Logitech Camera)
audioinput: Built-in Microphone
audioinput: Logitech Camera

现在,有一些警告:By spec标签仅显示是否授予了设备访问权限,这就是代码段要求它的原因(尝试两种方式)。

此外,Chrome 45需要持久权限(错误?),这在不安全的HTTP中不可用,因此您可能需要先reload this question in HTTPS查看标签。如果您这样做,请不要忘记之后在URL栏中撤消访问权限,否则Chrome会保留它,这可能是堆栈溢出的坏主意!

或者,请尝试使用https://webrtc.github.io/samples/src/content/devices/input-output polyfill在常规Chrome中使用的adapter.js,但要求您在看到标签之前授予持久权限并重新加载页面(因为它是如何编写的)。

(*)编辑:显然,enumerateDevices刚刚退回到Chrome 45中的实验标记下,因此您需要启用它as explained here。对于那个很抱歉。我希望不会长久。