Einstellung von MediaStream

Wenn Sie mit getUserMedia() oder WebRTC arbeiten, müssen Sie möglicherweise Ihren Code für Chrome 45 und höher anpassen.

Die MediaStream API steht für synchronisierte Medienstreams. Ein Stream, der von der Kamera- und Mikrofoneingabe entnommen wird, hat beispielsweise synchronisierte Video- und Audiotracks. Jeder Track wird durch einen MediaStreamTrack dargestellt. (Nicht zu verwechseln mit dem <track>-Element!)

Es gibt drei Einstellungen von MediaStream in Chrome 45:

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

Parallel dazu werden zwei Ergänzungen hinzugefügt:

  • MediaStream.active
  • MediaStreamTrack.stop()

Hierfür sind folgende Änderungen erforderlich:

  • Verwende MediaStream.active und nicht MediaStream.ended, um zu prüfen, ob ein MediaStream gestreamt wird.
  • Verwende MediaStreamTrack.stop(), nicht MediaStream.stop(), um das Streaming zu beenden.
  • Wenn Sie eine eindeutige Kennung für ein MediaStream benötigen, verwenden Sie MediaStream.id anstelle von MediaStream.label. MediaStreamTrack.label liefert einen visuell lesbaren Namen für das Quellgerät eines Streams, z.B. FaceTime HD Camera (integriert) (05ac:8510).

Sie können sie in Aktion sehen: Öffnen Sie simpl.info/gum in Chrome (auf einem Gerät mit einer Kamera) und rufen Sie die Chrome-Entwicklertools-Konsole auf. Das MediaStream-Objekt stream, das in dieser Demo an den getUserMedia()-Callback übergeben wird, ist global, sodass Sie es über die Console prüfen können. Rufen Sie stream.getTracks()[0] auf, um MediaStreamTrack für diesen Stream anzusehen.

Screenshot von MediaStream und MediaStreamTrack in der Chrome-Entwicklertools-Konsole

Stop(), beendet und aktiv

Als die W3C-Arbeitsgruppe Media Capture und Streams untersuchte, was passiert, wenn neue Tracks zu einem MediaStream hinzugefügt werden und ob eine leere MediaStream beendet wird, erkannte sie, dass es keine vernünftige Methode zur Implementierung von ended auf einer MediaStream gab (z. B. in "Startet nie wieder"). In anderen Teilen von HTML5 bedeutet "beendet", dass die Übertragung beendet wurde und niemals fortgesetzt wird. "Aktiv" hat keine Auswirkungen: Ein inaktiver Stream kann wieder aktiv werden, wenn ihm ein neuer Track hinzugefügt wird. Anstatt ein verwirrendes Attribut und eine verwirrende Funktion beizubehalten, hat die Arbeitsgruppe beschlossen, sie zu entfernen.

Hier ein Beispiel dafür, wie MediaStream.active verwendet wird, um den Status eines Streams zu prüfen:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

Durch das Entfernen von stop() aus MediaStream wurden keine echten Funktionen entfernt: Prozesse zum Trennen von Quellgeräten usw. müssen trotzdem auf MediaStreamTrack ausgeführt werden. Verwende stattdessen stop() bei MediaStreamTrack:

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

Label

Wie sich herausstellte, konnte niemand diese Property nutzen.

MediaStream.label wurde der ersten Version der Spezifikation hinzugefügt, aber niemand wusste wirklich, wofür label dient. Es war auch nicht klar, was mit label passiert ist, als ein Stream über RTCPeerConnection gesendet wurde.

Die Arbeitsgruppe des W3C hat nachgefragt, aber niemand wollte es, also haben sie es entfernt.

Noch einmal: MediaStream.id stellt eine eindeutige Kennzeichnung für MediaStream und MediaStreamTrack.label den Namen der Quelle eines Streams bereit, z. B. den Typ der Kamera oder des Mikrofons.

Weitere Informationen zu MediaStream und MediaStreamTrack finden Sie im Mozilla Developer Network. HTML5 Rocks bietet eine hervorragende Einführung in getUserMedia() unter Audio- und Videoaufnahmen.

Wie immer freuen wir uns über Ihr Feedback zu den Änderungen an Chrome. Informationen zu den Fehlern im Zusammenhang mit der Einstellung finden Sie hier und hier. Weitere Informationen und weitere Informationen finden Sie unter Intent to Implement.