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

Javascript Safari getUserMedia()未处理的承诺拒绝,javascript,safari,cross-browser,webrtc,getusermedia,Javascript,Safari,Cross Browser,Webrtc,Getusermedia,根据互联网上的建议,我在视频元素中添加了静音和playsinline属性。我仍然不能在Safari 11中看到一个景象,但只有这个错误。 我还试图从我的视频元素中删除autoplay 未处理的承诺拒绝:类型错误:类型错误 有没有可能让webrtc在Safari 11中工作,或者我在浪费时间 getUserMedia()适用于所有其他浏览器(Chrome、Firefox、Edge、Opera) 谢谢大家! 我使用这个垫片,它返回一个成功回调 var video = camOptions.video

根据互联网上的建议,我在视频元素中添加了
静音
playsinline
属性。我仍然不能在Safari 11中看到一个景象,但只有这个错误。 我还试图从我的视频元素中删除
autoplay

未处理的承诺拒绝:类型错误:类型错误

有没有可能让
webrtc
在Safari 11中工作,或者我在浪费时间

getUserMedia()
适用于所有其他浏览器(Chrome、Firefox、Edge、Opera)

谢谢大家!

我使用这个垫片,它返回一个成功回调

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
}
然后在回调中

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;
};
//获取元素
var video=document.getElementById('vid');
//默认约束
var约束={audio:true,video:true};
navigator.mediaDevices.getUserMedia(约束)。然后(handleSuccess);
var handleSuccess=函数(流){
video.srcObject=流;
};

在调用navigator.mediaDevices.getUserMedia之前,最好先定义handleSuccess回调,我在这里停留了几分钟。