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