我正在玩浏览器和音频。
我正在做这个
var session = {
audio: true,
video: false
};
var recordRTC = null;
navigator.getUserMedia(session, initializeRecorder, onError);
但是,使用最新的FF可用,我收到了一个javascript错误,说
navigator.getUserMedia不是函数
我从此博文中复制了此代码:https://blog.groupbuddies.com/posts/39-tutorial-html-audio-capture-streaming-to-nodejs-no-browser-extensions
在最新Chrome上也类似:
未捕获的TypeError:undefined不是函数
但我知道这两个浏览器都支持这个api
我做错了什么?
答案 0 :(得分:31)
它还没有预先支持。见http://caniuse.com/#search=getusermedia
您需要获取特定于浏览器的前缀并使用它。已发布在another answer:
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
这会将navigator.getUserMedia
设置为它检测到的正确前缀版本。
答案 1 :(得分:11)
检查MDN page,尤其是第一个示例的第一部分:
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
不是很好支持 - 您需要浏览器前缀。
答案 2 :(得分:7)
由于不推荐使用navigator.getUserMedia()
,请使用以下命令:
navigator.getUserMedia = (
navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia
);
if (typeof navigator.mediaDevices.getUserMedia === 'undefined') {
navigator.getUserMedia({
audio: true
}, streamHandler, errorHandler);
} else {
navigator.mediaDevices.getUserMedia({
audio: true
}).then(streamHandler).catch(errorHandler);
}
答案 3 :(得分:1)
Navigator.getUserMedia()已过时,建议使用MediaDevices.getUserMedia()
async function getMedia(pc) {
let stream = null;
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
/* use the stream */
} catch(err) {
/* handle the error */
}
}