Safari 12上忽略了getUserMedia约束

Kku*_*kis 10 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
Run Code Online (Sandbox Code Playgroud)

在Chrome上,当我这样做时,stream.getVideoTracks()[0].getConstraints()我得到了预期的结果 - 上面列出的限制.

当我在Safari中做同样的事情时,我得到一个空对象.

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

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

Mac上的Safari不会引起任何错误,当被迫使用后置摄像头时,导致我的应用程序中的错误属性.

搜索过SO,getUserMedia但仍找不到任何解决方案,甚至找不到有同样问题的人.

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

编辑:

getSupportedConstraints()函数正确返回facingMode支持的.问题是设置时会被忽略.至于getConstraints()不受支持的功能 - 可能是这种情况,但这不是问题.问题是执行受支持的约束(facingMode在本例中).

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

Iva*_*hez 0

github 上针对webrtc 问题已关闭的问题似乎为您提供了解决方案。

为了让 webrtc 在不同的浏览器上工作,我花了很多功夫。

祝你好运!