【发布时间】:2015-10-23 15:01:46
【问题描述】:
当用户在我的网站上录制音频文件时,是否可以读取(内置)麦克风的硬件信息(至少是名称)?
这可以用 JavaScript 实现还是有其他方法可以解决这个问题?我在网上搜索,但只能找到用 JavaScript 录制的脚本。
【问题讨论】:
标签: javascript web microphone
当用户在我的网站上录制音频文件时,是否可以读取(内置)麦克风的硬件信息(至少是名称)?
这可以用 JavaScript 实现还是有其他方法可以解决这个问题?我在网上搜索,但只能找到用 JavaScript 录制的脚本。
【问题讨论】:
标签: javascript web microphone
此答案使用非标准 API,浏览器支持有限。在撰写本文时,它在当前的 Chrome 中有效,但不会在其他浏览器的未来版本中采用,并且可能会在 Chrome 中消失。如需获得更广泛支持的解决方案,请参阅:https://stackoverflow.com/a/31758598/610573
使用MediaStreamTrack.getSources(),您可以获得可用来源的列表。每个来源都有一个kind 属性,以及一个label。
MediaStreamTrack.getSources(function(sourceInfos) {
for (var i = 0; i != sourceInfos.length; ++i) {
var thisSource = sourceInfos[i];
console.log('stream type: '+thisSource.kind+', label: '+thisSource.label);
// example: stream type: audio, label: internal microphone
}
});
文档及相关
MediaStreamTrack MDN - https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack
【讨论】:
MediaStreamTrack.getSources 已过时,仅适用于 Chrome 和 Opera。
较新版本:在 Firefox、MS Edge 和 Chrome 45 中可用,带有实验标志。
使用标准navigator.mediaDevices.enumerateDevices(),您可以获得可用资源的列表。每个来源都有一个kind 属性,以及一个label。
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>" };
<div id="div"></div>
文档及相关
navigator.mediaDevices MDN - https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices
感谢adapter.js polyfill,最后一个演示可以在常规 Chrome 中运行。
【讨论】: