出于某些原因,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中打开相同的代码,则可以使用提供的代码轻松复制此问题。
答案 0 :(得分:0)
答案 1 :(得分:0)
MediaDevices.getSupportedConstraints()
getSupportedConstraints()将是您的最佳选择。
到目前为止,它可以与Safari 11一起使用,可能也可以与Safari 12一起使用。
答案 2 :(得分:0)
我在移动Safari中遇到了类似的问题。 我了解到的是,目前完全忽略了关键字,因此您应该查询功能和您自己的确切逻辑。 同样关于帧速率,这也不起作用,但是对于分辨率确实起作用。