2016-05-19 22 views
6

Sono su localhost e sto provando a utilizzare il metodo MediaDevices.getUserMedia in Chrome. Ricevo l'errore come titolato. Capisco che in Chrome è possibile utilizzare questa funzione solo con un'origine sicura e che localhost è considerato un'origine sicura. Inoltre, questo funziona in Firefox.Chrome: navigator.mediaDevices.getUserMedia non è una funzione

Questo è come io sto usando come indicato sul sito 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

Penso che sia necessario disporre di HTTPS per farlo funzionare. – Tom

+0

@Tom Servire su localhost è espressamente consentito: https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins – Nateowami

+0

@Nateowami non nel momento in cui ho scritto il commento, sebbene . – Tom

risposta

1

Usa navigator.getUserMedia() invece.

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

Speravo di utilizzare MediaDevices.getUserMedia perché Navigator.getUserMedia è elencato come deprecato su Mozilla. Sono ancora confuso perché il primo non funziona per me. – muninn9

+1

Puoi usare quello che vuoi, ma dovrai scrivere una sorta di polyfill. –

5

provare ad abilitare: chrome: // flags/# enable-sperimentali-piattaforma web-caratteristiche

ha lavorato per me in cromo

+0

ha funzionato anche per me. È 'navigator.mediaDevices.getUserMedia' definito in Chrome ma non Chromium? MDN [avvisa di non usare] (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia) deprecato 'navigator.getUserMedia', avvertendo che" si può interrompere in qualsiasi momento. " Sto cercando di non usarlo, ma 'navigator.mediaDevices.getUserMedia' non è disponibile in Chromium senza modificare quel flag. EDIT: Contrariamente a quanto ho letto, non è uscito fino a Chrome 53] (https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) (sto usando Chromium 52). – Nateowami

+1

Ho trovato la risposta nelle note a piè di pagina su MDN: 'Dalla versione 47 alla 52, l'interfaccia basata su promessa era disponibile solo tramite il polyfill adapter.js, o usando il flag chrome: // flags/# enable-experimental-web- piattaforma-caratteristiche. A partire dalla versione 53, l'interfaccia basata sulle promesse è attiva per impostazione predefinita, sebbene tale interfaccia non sia ancora disponibile attraverso il navigatore – Nateowami

2

Su alcuni browser più recenti navigator.getUserMedia non funziona correttamente. Quindi, prova a utilizzare navigator.mediaDevices.getUserMedia. Oppure, meglio controllare se navigator.mediaDevices.getUserMedia è disponibile per il browser utilizzare navigator.mediaDevices.getUserMedia oppure utilizzare 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."); }); 
} 

Spero che questo risolva il tuo problema.

Problemi correlati