TypeError: 'getUserMedia' вызывается для объекта, который не реализует интерфейс MediaDevices

Я пытаюсь внедрить веб-камеру на веб-сайт, используя тег видео. Он работает в Chrome, но FireFox и IE выдают ошибки в консоли. У кого-нибудь есть идеи, почему? Благодарю вас!

Код:

navigator.getMedia =    navigator.getUserMedia ||
                                navigator.webkitGetUserMedia ||
                                navigator.mediaDevices.getUserMedia ||
                                navigator.msGetUserMedia ||
                                OTPlugin.getUserMedia;

Ошибка Firefox: TypeError: 'getUserMedia' вызывается для объекта, который не реализует интерфейс MediaDevices.

Ошибка IE: невозможно получить свойство getUserMedia неопределенной или нулевой ссылки


person AlesSvetina    schedule 07.06.2016    source источник


Ответы (1)


Вы забыли navigator.mozGetUserMedia для Firefox. В IE его нет (хотя в MS Edge есть).

Кроме того, удалите navigator.mediaDevices.getUserMedia из этого списка, так как он работает по-другому.

Мой совет: не путайтесь в префиксах и попробуйте адаптер. .js, официальный полифил WebRTC. Затем используйте navigator.mediaDevices.getUserMedia< /a> исключительно, так как все остальное устарело.

Пример (используйте https://jsfiddle.net/srn9db4h/ в Chrome):

navigator.mediaDevices.getUserMedia({ video: true, audio: true })
  .then(stream => video.srcObject = stream)
  .catch(e => console.log(e.name + ": "+ e.message));
<video id="video" width="160" height="120" autoplay></video><br>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>

person jib    schedule 07.06.2016
comment
что вы подразумеваете под поскольку это работает по-другому? Я подумал, что webrtc теперь возвращает обещание вместо того, чтобы принимать обратные вызовы в своем аргументе. Что-то еще мне не хватает? - person choz; 26.04.2017
comment
@choz Правильно, на практике не работает замена одного другим, как это делал ОП, поскольку вам нужно называть их по-разному. - person jib; 26.04.2017