【问题标题】:Safari getUserMedia() Unhandled Promise RejectionSafari getUserMedia() 未处理的承诺拒绝
【发布时间】:2017-11-13 22:25:48
【问题描述】:

按照互联网上的建议,我将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 这会返回一个成功回调,

然后在回调中,

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
}

【问题讨论】:

    标签: javascript safari cross-browser webrtc getusermedia


    【解决方案1】:

    您得到的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;
    };
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-31
        • 2023-03-17
        • 2018-04-01
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多