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回调,我在这里停留了几分钟。