2016-05-19 2 views
6

Я нахожусь на локальном хосте и пытаюсь использовать метод MediaDevices.getUserMedia в Chrome. Я получаю сообщение об ошибке. Я понимаю, что в Chrome можно использовать эту функцию только с безопасным происхождением, а localhost считается безопасным. Кроме того, это работает в Firefox.Chrome: navigator.mediaDevices.getUserMedia не является функцией

Это, как я использую его, как показано на веб-сайте Google Developers https://developers.google.com/web/updates/2015/10/media-devices?hl=en:

var constraints = window.constraints = { 
      audio: false, 
      video: true 
}; 


navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { 
      callFactory.broadcastAssembly(stream); 
      ... 
}); 
+0

Я думаю, вам нужно иметь HTTPS, чтобы заставить его работать. – Tom

+0

@Tom Обслуживание через localhost разрешено: https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins – Nateowami

+0

@Nateowami не в то время, когда я написал комментарий, хотя , – Tom

ответ

1

Используйте navigator.getUserMedia() вместо этого.

navigator.getUserMedia(constraints, successCallback, errorCallback); 
+1

Я надеялся использовать MediaDevices.getUserMedia, потому что Navigator.getUserMedia указан как устаревший в Mozilla. Я все еще смущен, почему первое не работает для меня. – muninn9

+1

Вы можете использовать тот, который хотите, но вам придется написать какой-то полиполк. –

5

Попробуйте включить: хром: // флаги/# включить-экспериментальные-веб-платформенные функции

работал для меня в хроме

+0

Работал и для меня. Является ли 'navigator.mediaDevices.getUserMedia' определенным в Chrome, но не Chromium? MDN [предупреждает против использования] (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia) устаревший 'navigator.getUserMedia', предупреждая, что« он может сломаться в любое время ». Я пытаюсь не использовать его, но 'navigator.mediaDevices.getUserMedia' недоступен в Chromium без изменения этого флага. EDIT: вопреки тому, что я читал, он [вышел не до Chrome 53] (https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) (я использую Chromium 52). – Nateowami

+1

Я нашел ответ в сносках MDN: «Начиная с версии 47 до 52 интерфейс на основе обещаний был доступен только через polyfill adapter.js или с использованием флага chrome: // flags/# enable-experimental-web- платформа-функция. Начиная с версии 53, по умолчанию интерфейс на основе обещаний включен, хотя этот интерфейс по-прежнему недоступен через навигатор. ' – Nateowami

0

У меня тоже была эта проблема, и смена флагов, похоже, не работала. Я наткнулся на это расширение chrome - Web Server for Chrome в, что, казалось, сделало трюк.

2

В некоторых последних браузерах navigator.getUserMedia работает не очень хорошо. Итак, попробуйте использовать navigator.mediaDevices.getUserMedia. Или, лучше проверить, navigator.mediaDevices.getUserMedia доступен для браузера, используйте navigator.mediaDevices.getUserMedia или используйте navigator.getUserMedia.

navigator.getWebcam = (navigator.getUserMedia || navigator.webKitGetUserMedia || navigator.moxGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); 
if (navigator.mediaDevices.getUserMedia) { 
    navigator.mediaDevices.getUserMedia({ audio: true, video: true }) 
    .then(function (stream) { 
        //Display the video stream in the video object 
    }) 
    .catch(function (e) { logError(e.name + ": " + e.message); }); 
} 
else { 
navigator.getWebcam({ audio: true, video: true }, 
    function (stream) { 
      //Display the video stream in the video object 
    }, 
    function() { logError("Web cam is not accessible."); }); 
} 

Надеюсь, это решит вашу проблему.

Смежные вопросы