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 stellt synchronisierte Streams von Media dar. Ein Stream, der von Kamera- und Mikrofoneingaben stammt, hat beispielsweise synchronisierte Video- und Audio-Tracks. Jeder Track wird durch einen MediaStreamTrack dargestellt. Nicht zu verwechseln mit dem <track>-Element.
In Chrome 45 gibt es drei MediaStream:
MediaStream.endedMediaStream.labelMediaStream.stop()
Parallel dazu gibt es zwei Neuerungen:
MediaStream.activeMediaStreamTrack.stop()
Dafür sind folgende Änderungen erforderlich:
- Mit
MediaStream.activekannst du prüfen, ob einMediaStreamund nicht einMediaStream.endedgestreamt wird. - Verwende
MediaStreamTrack.stop(), um das Streaming zu beenden, nichtMediaStream.stop(). - Wenn Sie eine eindeutige Kennung für ein
MediaStreambenötigen, verwenden SieMediaStream.idanstelle vonMediaStream.label.MediaStreamTrack.labelenthält einen für Menschen lesbaren Namen für das Quellgerät eines Streams, z.B. FaceTime HD Camera (Built-in) (05ac:8510).
Sie können sich diese in Aktion ansehen: Öffnen Sie simpl.info/gum in Chrome (auf einem Gerät mit einer Kamera) und sehen Sie sich die Konsole der Chrome-Entwicklertools an. Das MediaStream-Objekt stream, das in dieser Demo an den getUserMedia()-Callback übergeben wird, hat einen globalen Bereich. Sie können es also über die Konsole prüfen. Rufen Sie stream.getTracks()[0] auf, um die MediaStreamTrack für diesen Stream aufzurufen.
Stop(), ended und active
Als die W3C Working Group Media Capture and Streams sich mit dem Problem befasste, was passiert, wenn man einem MediaStream neue Tracks hinzufügt, und ob ein leeres MediaStream beendet wird, stellten sie fest, dass es keine sinnvolle Möglichkeit gab, ended auf einem MediaStream zu implementieren (wie in „wird nie wieder gestartet“). In anderen Teilen von HTML5 bedeutet „ended“ (beendet) „dies ist beendet und wird nie fortgesetzt“. „Aktiv“ hat keine solche Implikation: Ein inaktiver Stream kann wieder aktiv werden, z. B. wenn ein neuer Track hinzugefügt wird. Anstatt ein verwirrendes Attribut und eine verwirrende Funktion beizubehalten, hat die Arbeitsgruppe beschlossen, sie zu entfernen.
Hier ist ein Beispiel für die Verwendung von „MediaStream.active“ zum Prüfen des Status eines Streams:
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 wurde keine tatsächliche Funktion entfernt: Prozesse zum Trennen von Quellgeräten usw. müssen ohnehin auf MediaStreamTrack ausgeführt werden. Verwenden Sie stattdessen stop() auf 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 hat sich herausgestellt, dass niemand wirklich wusste, wofür diese Property verwendet werden kann.
MediaStream.label wurde der ersten Version der Spezifikation hinzugefügt, aber niemand wusste wirklich, wofür label gedacht war. Außerdem war unklar, was mit label passiert, wenn ein Stream über RTCPeerConnection gesendet wird.
Die W3C-Arbeitsgruppe hat sich umgehört und niemand wollte es, also wurde es entfernt.
Zur Erinnerung: MediaStream.id stellt eine eindeutige Kennung für ein MediaStream bereit und MediaStreamTrack.label gibt den Namen der Quelle eines Streams an, z. B. den Typ der Kamera oder des Mikrofons.
Weitere Informationen zu MediaStream und MediaStreamTrack finden Sie im Mozilla Developer Network. Eine hervorragende Einführung in getUserMedia() bietet HTML5 Rocks im Artikel Capturing Audio & Video.
Wir freuen uns wie immer über Ihr Feedback zu Änderungen an Chrome. Sie können die Fehler für diese Einstellungen (hier und hier) verfolgen und weitere Informationen in der Implementierungsabsicht finden.