javascript- Safari 上的 getUserMedia

Posted

技术标签:

【中文标题】javascript- Safari 上的 getUserMedia【英文标题】:javascript- getUserMedia on Safari 【发布时间】:2021-12-29 03:35:35 【问题描述】:

https://caniuse.com/?search=getusermedia

根据上面提供的链接,Safari 15 是否支持 getUserMedia?我尝试使用它来访问相机,当我在 safari 15 上对其进行测试时,它要求相机许可,在我允许许可后它仍然没有显示任何内容。链接显示 Safari 15 支持 getUserMedia/Stream API 但不支持 Navigator API: getUserMedia。下面是我的代码,我应该参考哪一个? getUserMedia/Stream APINavigator API:getUserMedia

    navigator.mediaDevices
    .getUserMedia(constraints)
    .then(function (stream) 
        track = stream.getTracks()[0];
        cameraView.srcObject = stream;
    )
    .catch(function (error) 
        console.error("Oops. Something is broken.", error);
    );

html

            <video id="camera--view" autoplay></video>

【问题讨论】:

“我应该参考哪一个” 您的代码使用的是this one,即steram API one,它在ios Safari v11+(以及独立的PWA)上受支持来自 Safar v13.4+)。 “它什么都不告诉我”是什么意思?您是否在代码中到达了履行处理程序(.then 回调)? 请注意,您对track 变量的赋值是可疑的(它可能 没问题,但这种事情通常是错误的),请参阅this question's answers 以防万一你试图过早地使用track @T.J.Crowder 在我允许后它只会显示白色空白。我不知道我是否达到了目标,因为我没有任何方法可以在 Iphone safari 上打开“控制台”。由于它在 Chrome 和 Firefox 上运行良好,所以我只是 假设 它没有达到要求。你能给我提供任何在 Iphone safari 上打开控制台的方法,以便我可以确保它实现与否。谢谢! “我不知道我是否达到了目标,因为我没有任何方法可以在 Iphone safari 上打开“控制台”。” 你可以这样做 其他要查找的内容,例如向文档添加元素、执行alert、... 【参考方案1】:

你肯定想要navigator.mediaDevices.getUserMedia() 方法。它绝对适用于 iOS。另一个已弃用。 Apple 加入 getUserMedia() 方太晚了,以至于他们没有实现已弃用的 API。

您可以阅读有关查看 iOS 控制台的信息。您需要将 iOS 设备连接到 Mac,然后使用该 Mac 上的 Safari 来执行此操作。 xxx脖子疼。解释如何超出 Stack Overflow 答案的范围。

或者你可以使用alert()进行调试。

您需要在适当的时候致电cameraView.play()。这是documentation。

它建议做这样的事情。

 navigator.mediaDevices
    .getUserMedia(constraints)
    .then(function (stream) 
        cameraView.srcObject = stream
        cameraView.onloadedmetadata = function(e) 
            cameraView.play()
        
      )
    .catch(function (error) 
        alert(error)
    )

用警报代替控制台输出。

【讨论】:

【参考方案2】:

在我允许权限后,它仍然没有显示任何内容

我通过在 html 中添加 muted 和 playinline 解决了这个问题。根据我所知道的,当视频不能内联播放和静音时,iOS 将不允许自动播放。

            <video id="camera--view" muted autoplay playsinline></video>

【讨论】:

以上是关于javascript- Safari 上的 getUserMedia的主要内容,如果未能解决你的问题,请参考以下文章

移动 Safari:输入字段上的 Javascript focus() 方法仅适用于点击?

如果在 iOS 9+ 上的 Safari 中手机上安装了应用程序,如何从 Javascript 检查?

Safari iphone/ipad 在新链接上的“鼠标悬停”在前一个被替换为 javascript 后

如何在 iOS 上仅将 javascript 函数定位到 Safari < 6.0

webrtc with firebase:如何修复 ios/safari 上的黑屏

Safari 推送通知 - Javascript 未正确检查浏览器