Firefox:navigator.getUserMedia不是一个函数

时间:2015-03-11 16:14:09

标签: javascript firefox html5-audio

我正在玩浏览器和音频。

我正在做这个

        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

我做错了什么?

4 个答案:

答案 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 */
  }
}