Safari 12

时间:2019-01-31 14:09:14

标签: javascript safari getusermedia

出于某些原因,Safari 12(尚未在其他版本上尝试过)完全忽略了getUserMedia约束。

我的代码看起来像这样

  navigator.mediaDevices.getUserMedia({
    video: {
      facingMode: 'environment',
      width: {
        min: 640,
        ideal: 1280
      }
    },
    audio: true
  })
 .then(userStream)//Safari on Mac ignores constraints and ends up executing here
 .catch(fallback)//Chrome on Mac raises and error and ends up executing here

在Chrome上stream.getVideoTracks()[0].getConstraints(),我得到的正是预期的效果-上面列出的约束条件。

在Safari中执行相同操作时,我得到一个空对象。

当我尝试强制使用后置摄像头(对于移动设备)时出现问题,然后捕获错误以回退到前置摄像头。

Mac上的Chrome会正确引发错误并退回前置摄像头。

在被迫使用后置摄像头的情况下,Mac上的Safari不会引发任何错误,导致我的应用程序进一步出现错误的属性。

已经搜索了SO,getUserMedia,但仍然找不到任何解决方案,甚至找不到同样的问题。

也许有更好的方法来确定设备是否具有前置/后置摄像头?

编辑:

getSupportedConstraints()函数正确返回受支持的facingMode。问题是设置时将其忽略。 至于getConstraints()函数不受支持-可能是这种情况,但这不是问题。问题是强制执行受支持的约束(在这种情况下为facingMode)。

如果您尝试设置facingMode: 'environment'并尝试从Chrome和Safari中打开相同的代码,则可以使用提供的代码轻松复制此问题。

3 个答案:

答案 0 :(得分:0)

在github上webrtc issue closed的问题似乎是为您提供了解决方案。

为了使此功能在不同的浏览器上运行,我为webrtc付出了很多努力。

祝你好运!

答案 1 :(得分:0)

   MediaDevices.getSupportedConstraints()

getSupportedConstraints()将是您的最佳选择。

https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getSupportedConstraints#Browser_compatibility

到目前为止,它可以与Safari 11一起使用,可能也可以与Safari 12一起使用。

答案 2 :(得分:0)

我在移动Safari中遇到了类似的问题。 我了解到的是,目前完全忽略了关键字,因此您应该查询功能和您自己的确切逻辑。 同样关于帧速率,这也不起作用,但是对于分辨率确实起作用。