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 einMediaStream
gestreamt wird, nichtMediaStream.ended
. - Verwenden Sie
MediaStreamTrack.stop()
, um das Streaming zu beenden, nichtMediaStream.stop()
. - Wenn Sie eine eindeutige Kennung für ein
MediaStream
benötigen, verwenden SieMediaStream.id
anstelle vonMediaStream.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.
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).