Safari getUserMedia() 未处理的承诺拒绝
Safari getUserMedia() Unhandled Promise Rejection
根据互联网上的建议,我将 muted
和 playsinline
属性添加到我的视频元素中。我仍然无法在 Safari 11 中获得愿景,但只有这个错误。
我还尝试从我的视频元素中删除 autoplay
。
Unhandled Promise Rejection: TypeError: Type error
是否有可能 webrtc
在 Safari 11 中工作,或者我是否在浪费时间?
getUserMedia()
适用于所有其他浏览器(Chrome、Firefox、Edge、Opera)。
谢谢!
我用这个 shim,https://github.com/addyosmani/getUserMedia.js/blob/gh-pages/lib/getUserMedia.js 这个 returns 一个成功的回调,
然后在回调中,
var video = camOptions.videoEl; //the video element
var vendorURL = window.URL || window.webkitURL;
try {
video.src = vendorURL ? vendorURL.createObjectURL(stream) : stream;
}
catch(err) {
//HERE IS THE TYPE ERROR IN SAFARI
}
您得到的 TypeError
是因为您在调用 GetUserMedia
时传递了 错误的约束条件 。当您传递设备(浏览器)未识别或具有无效值的约束时,会发生此错误。
此外,您需要使用 video.srcObject
而不是已弃用的 video.src
。
这是一个适用于 Safari 的工作示例。请记住,这仅适用于 iOS 11 及更高版本:
// Get the <video> element
var video = document.getElementById('vid');
// Default constrains
var constraints = { audio: true, video: true };
navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess);
var handleSuccess = function (stream) {
video.srcObject = stream;
};
最好在调用 navigator.mediaDevices.getUserMedia 之前定义 handleSuccess 回调,我在这里停留了几分钟。
根据互联网上的建议,我将 muted
和 playsinline
属性添加到我的视频元素中。我仍然无法在 Safari 11 中获得愿景,但只有这个错误。
我还尝试从我的视频元素中删除 autoplay
。
Unhandled Promise Rejection: TypeError: Type error
是否有可能 webrtc
在 Safari 11 中工作,或者我是否在浪费时间?
getUserMedia()
适用于所有其他浏览器(Chrome、Firefox、Edge、Opera)。
谢谢!
我用这个 shim,https://github.com/addyosmani/getUserMedia.js/blob/gh-pages/lib/getUserMedia.js 这个 returns 一个成功的回调,
然后在回调中,
var video = camOptions.videoEl; //the video element
var vendorURL = window.URL || window.webkitURL;
try {
video.src = vendorURL ? vendorURL.createObjectURL(stream) : stream;
}
catch(err) {
//HERE IS THE TYPE ERROR IN SAFARI
}
您得到的 TypeError
是因为您在调用 GetUserMedia
时传递了 错误的约束条件 。当您传递设备(浏览器)未识别或具有无效值的约束时,会发生此错误。
此外,您需要使用 video.srcObject
而不是已弃用的 video.src
。
这是一个适用于 Safari 的工作示例。请记住,这仅适用于 iOS 11 及更高版本:
// Get the <video> element
var video = document.getElementById('vid');
// Default constrains
var constraints = { audio: true, video: true };
navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess);
var handleSuccess = function (stream) {
video.srcObject = stream;
};
最好在调用 navigator.mediaDevices.getUserMedia 之前定义 handleSuccess 回调,我在这里停留了几分钟。