Einstellung von MediaStream

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

Die MediaStream API stellt synchronisierte Medienstreams dar. Ein Stream, der beispielsweise von der Kamera und dem Mikrofon aufgenommen wird, hat synchronisierte Video- und Audiotracks. Jeder Track wird durch einen MediaStreamTrack dargestellt. Nicht zu verwechseln mit dem <track>-Element.

In Chrome 45 werden drei MediaStream eingestellt:

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

Parallel dazu gibt es zwei Ergänzungen:

  • MediaStream.active
  • MediaStreamTrack.stop()

Dazu sind die folgenden Änderungen erforderlich:

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

Sie können sich das in Aktion ansehen: Öffnen Sie simpl.info/gum in Chrome (auf einem Gerät mit Kamera) und öffnen Sie die Konsole der Chrome-Entwicklertools. Das MediaStream-Objekt stream, das in dieser Demo an den getUserMedia()-Callback übergeben wird, hat einen globalen Bereich und kann daher in der Konsole geprüft werden. Rufe stream.getTracks()[0] auf, um die MediaStreamTrack für diesen Stream aufzurufen.

Screenshot von MediaStream und MediaStreamTrack in der Chrome DevTools-Konsole

Stop(), ended und active

Die W3C-Arbeitsgruppe Media Capture and Streams hat sich mit dem Problem befasst, was passiert, wenn einer MediaStream neue Tracks hinzugefügt werden, und ob eine leere MediaStream beendet wird. Dabei wurde festgestellt, dass es keine sinnvolle Möglichkeit gibt, ended in einer MediaStream zu implementieren (d. h., dass sie nie wieder gestartet wird). In anderen Teilen von HTML5 bedeutet „ended“ (beendet), dass die Wiedergabe beendet wurde und nicht fortgesetzt wird. „Aktiv“ hat keine solche Bedeutung: Ein inaktiver Stream kann wieder aktiv werden, z. B. wenn ihm ein neuer Titel hinzugefügt wird. Anstatt ein verwirrendes Attribut und eine verwirrende Funktion beizubehalten, entschied sich die Arbeitsgruppe, sie zu entfernen.

Hier ist ein Beispiel dafür, wie du mit „MediaStream.active“ den Status eines Streams prüfen kannst:

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 Funktionen entfernt: Prozesse zum Trennen von Quellgeräten usw. müssen auf MediaStreamTrack ausgeführt werden. Verwenden Sie stattdessen stop() anstelle von 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

Es stellte sich heraus, dass niemand eine Verwendung für diese Property finden konnte.

MediaStream.label wurde der ersten Version der Spezifikation hinzugefügt, aber niemand wusste wirklich, wozu label dient. Außerdem war unklar, was mit label passiert, wenn ein Stream über RTCPeerConnection gesendet wurde.

Die W3C-Arbeitsgruppe hatte sich umgehört und da niemand sie haben wollte, wurde sie entfernt.

Noch einmal zur Erinnerung: MediaStream.id ist eine eindeutige Kennung für eine MediaStream und MediaStreamTrack.label ist der Name der Quelle eines Streams, z. B. der Kamera- oder Mikrofontyp.

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

Wie immer freuen wir uns über Ihr Feedback zu den Änderungen an Chrome. Informationen zu den Fehlern für diese Einstellung finden Sie in diesem Artikel und in diesem Artikel. Weitere Informationen finden Sie im Artikel Intent to Implement (Beabsichtigte Implementierung).