2016-05-19 5 views
6

Ich bin auf localhost und versuche, die MediaDevices.getUserMedia-Methode in Chrome zu verwenden. Ich erhalte den Fehler wie betitelt. Ich verstehe, dass es in Chrome nur möglich ist, diese Funktion mit einem sicheren Ursprung zu verwenden, und dass localhost als sicherer Ursprung gilt. Dies funktioniert auch in Firefox. DieseChrome: navigator.mediaDevices.getUserMedia ist keine Funktion

ist, wie ich es wie auf der Google Developers-Website https://developers.google.com/web/updates/2015/10/media-devices?hl=en bin mit:

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


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

Ich denke, Sie brauchen HTTPS, um es zum Laufen zu bringen. – Tom

+0

@Tom Serving über localhost ist ausdrücklich erlaubt: https://www.chromium.org/Home/chromium-security/depreating-powerful-features-on-insecure-origins – Nateowami

+0

@Nateowami nicht zu dem Zeitpunkt, als ich den Kommentar schrieb, obwohl . – Tom

Antwort

1

Verwenden navigator.getUserMedia() statt.

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

Ich hatte gehofft MediaDevices.getUserMedia zu verwenden, da Navigator.getUserMedia in Mozilla als veraltet gelistet ist. Ich bin immer noch verwirrt, warum ersteres nicht für mich funktioniert. – muninn9

+1

Sie können die gewünschte verwenden, aber Sie müssen eine Art Polyfill schreiben. –

5

Versuchen ermöglicht: chrome: // flags/# enable-experimental-Web-Plattform-Funktionen

für mich gearbeitet in Chrom

+0

Arbeitete auch für mich. Ist 'navigator.mediaDevices.getUserMedia' in Chrome definiert, aber nicht in Chrom? MDN [warnt vor der Verwendung] (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia) die veraltete "navigator.getUserMedia", warnt, dass "es jederzeit brechen kann." Ich versuche, es nicht zu verwenden, aber "navigator.mediaDevices.getUserMedia" ist in Chromium nicht verfügbar, ohne diese Markierung zu ändern. EDIT: Im Gegensatz zu dem, was ich gelesen habe, kam es [bis Chrome 53] nicht heraus (https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) (ich verwende Chromium 52). – Nateowami

+1

Ich fand die Antwort in den Fußnoten auf MDN: 'Von Version 47 bis 52, die Versprechen-basierte Schnittstelle war nur über die adapter.js Polyfill, oder mit dem Flag chrome: // flags/# enable-experimental-web- Plattform-Funktionen. Ab Version 53 ist die auf Versprechen basierende Schnittstelle standardmäßig aktiviert, diese Schnittstelle ist jedoch weiterhin nicht über navigator.' verfügbar – Nateowami

0

Ich hatte dieses Problem auch und das Ändern von Flags schien nicht zu funktionieren. Ich stieß auf diese Chrome-Erweiterung - in Googles WebRTC tutorial, die den Trick zu tun schien.

2

Bei einigen aktuellen Browsern funktioniert navigator.getUserMedia nicht gut. Versuchen Sie also, navigator.mediaDevices.getUserMedia zu verwenden. Oder überprüfen Sie besser, ob navigator.mediaDevices.getUserMedia für den Browser verfügbar ist, verwenden Sie navigator.mediaDevices.getUserMedia oder verwenden Sie 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."); }); 
} 

Hoffe, dass dies Ihr Problem lösen wird.