По какой-то причине 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 правильно вызывает ошибку и возвращается к передней камере.
Safari на Mac не выдает никаких ошибок, когда его заставляют использовать заднюю камеру, что приводит к неправильным свойствам в моем приложении.
Поиск SO, getUserMedia и до сих пор не может найти какие-либорешения или даже кто-то, имеющий ту же проблему.
Может быть, есть лучший способ определить, есть ли у устройства доступные передние / задние камеры?
РЕДАКТИРОВАТЬ:
getSupportedConstraints()
Функция правильно возвращает, что facingMode
поддерживается,Проблема в том, что он игнорируется при установке.Что касается функции getConstraints()
, которая не поддерживается - это может иметь место, но это не проблема.Проблема заключается в применении поддерживаемых ограничений (facingMode
в данном случае).
Эта проблема может быть легко воспроизведена с помощью предоставленного кода, если вы попытаетесь установить facingMode: 'environment'
и попытаться открыть один и тот же код из Chrome и Safari.