如何检测麦克风类型

Ter*_*nus 1 javascript webrtc getusermedia

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

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

jib*_*jib 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>" };
Run Code Online (Sandbox Code Playgroud)
<div id="div"></div>
Run Code Online (Sandbox Code Playgroud)

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

5 devices.
videoinput: Logitech Camera
videoinput: FaceTime HD Camera (Built-in)
audioinput: default (Logitech Camera)
audioinput: Built-in Microphone
audioinput: Logitech Camera
Run Code Online (Sandbox Code Playgroud)

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

此外,Chrome 45需要持久权限(一个错误?),这在不安全的HTTP中不可用,因此您可能需要先在HTTPS中重新加载此问题以查看标签.如果你这样做,不要忘记之后在URL栏中撤销访问权限,否则Chrome会保留它,这在stackoverflow上可能是一个坏主意!

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

(*)编辑:显然,enumerateDevices刚刚退回到Chrome 45中的实验标记下,因此您需要按照此处的说明启用它.对于那个很抱歉.我希望不应该长久.