Firefox:navigator.getUserMedia 不是函数
Firefox: navigator.getUserMedia is not a function
我正在玩浏览器和音频。
我正在做这个
var session = {
audio: true,
video: false
};
var recordRTC = null;
navigator.getUserMedia(session, initializeRecorder, onError);
但是,使用最新可用的 FF 我得到一个 javascript 错误,说
navigator.getUserMedia is not a function
我从这个博客post复制了这段代码:https://blog.groupbuddies.com/posts/39-tutorial-html-audio-capture-streaming-to-nodejs-no-browser-extensions
与最新 Chrome 类似:
Uncaught TypeError: undefined is not a function
但我知道 api 这两种浏览器都支持
我做错了什么?
检查MDN page,尤其是第一个例子的第一部分:
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
它没有得到很好的支持 - 您需要浏览器前缀。
尚不支持无前缀。参见 http://caniuse.com/#search=getusermedia
您需要获取特定于浏览器的前缀并使用它。正如张贴在 :
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
这会将 navigator.getUserMedia
设置为它检测到的任何正确的前缀版本。
由于 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);
}
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 */
}
}
问题是
如果当前文档没有安全加载,navigator.mediaDevices 将是未定义的,您不能使用 getUserMedia()。有关此问题以及与使用 getUserMedia() 相关的其他安全问题的更多信息,请参阅安全性
如 https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
中给出
经过搜索,我得到了解决方案
尝试以下步骤:
打开Chrome浏览器,输入chrome://flags/#unsafely-treat-insecure-origin-as-secure 在 url.
添加主机/本地路径 url(例如 localhost/myproject 或 YOUR_HOSTNAME)
Select 已启用.
重新启动 浏览器。
我正在玩浏览器和音频。
我正在做这个
var session = {
audio: true,
video: false
};
var recordRTC = null;
navigator.getUserMedia(session, initializeRecorder, onError);
但是,使用最新可用的 FF 我得到一个 javascript 错误,说
navigator.getUserMedia is not a function
我从这个博客post复制了这段代码:https://blog.groupbuddies.com/posts/39-tutorial-html-audio-capture-streaming-to-nodejs-no-browser-extensions
与最新 Chrome 类似:
Uncaught TypeError: undefined is not a function
但我知道 api 这两种浏览器都支持
我做错了什么?
检查MDN page,尤其是第一个例子的第一部分:
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
它没有得到很好的支持 - 您需要浏览器前缀。
尚不支持无前缀。参见 http://caniuse.com/#search=getusermedia
您需要获取特定于浏览器的前缀并使用它。正如张贴在
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
这会将 navigator.getUserMedia
设置为它检测到的任何正确的前缀版本。
由于 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);
}
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 */
}
}
问题是
如果当前文档没有安全加载,navigator.mediaDevices 将是未定义的,您不能使用 getUserMedia()。有关此问题以及与使用 getUserMedia() 相关的其他安全问题的更多信息,请参阅安全性
如 https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
经过搜索,我得到了解决方案
尝试以下步骤:
打开Chrome浏览器,输入chrome://flags/#unsafely-treat-insecure-origin-as-secure 在 url.
添加主机/本地路径 url(例如 localhost/myproject 或 YOUR_HOSTNAME)
Select 已启用.
重新启动 浏览器。