Ограничения getUserMedia игнорируются в Safari 12 - PullRequest
0 голосов
/ 31 января 2019

По какой-то причине 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.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019
   MediaDevices.getSupportedConstraints()

getSupportedConstraints () будет лучшим вариантом для вас.

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

Пока он работает с Safari 11, он может работать и с Safari 12.

0 голосов
/ 05 февраля 2019

Эта проблема на github для проблема webrtc закрыта похоже, что есть решение для вас.

Я много боролся с webrtc, чтобы это работало в разных браузерах.

Удачи!

...