Safari getUserMedia() 未处理的承诺拒绝

Safari getUserMedia() Unhandled Promise Rejection

根据互联网上的建议,我将 mutedplaysinline 属性添加到我的视频元素中。我仍然无法在 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 回调,我在这里停留了几分钟。