2016-06-20 5 views
1

ich einen Webcam-Stream mitwie man Mediastream läuft

navigator.getUserMedia({ "video": true }, function(stream){ 
    videoTag.src = window.URL.createObjectURL(stream); 
    videoTag.play(); 
} 

erstellt haben Kann ich das Mediastream-Objekt in stream in globalem Bereich zugreifen? *

(so etwas wie navigator.getAllMediaStreams[0])

* edit: ... ohne Logik zur Funktion getUserMedia hinzuzufügen. Mein Problemfall ist eine qr-decoder-Bibliothek, die den Stream für mich bekommt und ich möchte den Drittanbietercode nicht ändern

Antwort

4

Es gibt keine Liste der aktiven Medienströme, die vom Browser gespeichert werden.

Sie können den Stream beispielsweise in window.stream speichern.

+0

"Es gibt keine Liste durch den Browser gehalten" könnte meine Hintergrundfrage beantworten (siehe Bearbeiten), so werde ich dies als die Antwort akzeptieren. – Breaker222

3

Sure:

navigator.allMediaStreams = []; 

navigator.mediaDevices.getUserMedia({ "video": true }).then(stream => { 
    navigator.allMediaStreams.push(stream); 
    console.log(navigator.allMediaStreams.length); // 1 
}) 
.catch(e => console.error(e)); 

console.log(navigator.allMediaStreams.length); // 0 

einfach verstehen, dass das Array, bis der Erfolg Rückruf Brände leer.

Es ist wie jedes andere JavaScript-Objekt. Solange Sie einen Verweis auf einen Stream behalten (damit kein Müll gesammelt wird) und nicht stop() auf seinen Spuren aufrufen, steht Ihnen ein Live-Videostream zur Verfügung, und das Aktiv-Kamera-Licht, Wenn es einen gibt, wird während dieser Zeit eingeschaltet sein.

Auch wie jede andere JavaScript-Variable, ist es immer noch an die Seite gebunden, auch wenn es navigator hängt, so wird es die Seitennavigation nicht überleben.

Verwandte Themen