出于某种原因,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我得到一个空对象。
当我尝试使用后置摄像头(用于移动设备)发力,再搭上错误退却到前置摄像头出现问题。
Chrome的Mac上的正确引发错误,并回落到前置摄像头。
Mac上的Safari不引发任何错误,当被迫使用后置摄像头,从而导致错误的性质在我的应用程序进一步。
已搜寻SO,getUserMedia仍无法找到任何解决方案,甚至有同样的问题的人。
也许有更好的方式来确定设备是否有可用的前/后置摄像头?
编辑:
getSupportedConstraints()
功能正常返回facingMode
支持。问题是,设置时被忽略。至于getConstraints()
功能不被支持的 - 这可能是这样,但这不是问题。问题是支持的限制(在这种情况下facingMode
)执行。
这个问题可以通过提供的代码很容易被复制,如果您尝试设置facingMode: 'environment'
,并尝试从Chrome和Safari浏览器从打开相同的代码。
MediaDevices.getSupportedConstraints()
getSupportedConstraints()将是你最好的选择。
到目前为止,它正在与Safari浏览器11,它可能与Safari的12也可以工作。