Signatur
Beschreibung
Das Interface MediaStreamEvent beschreibt Ereignisse, die sich auf einen ganzen MediaStream beziehen. Es erbt von Event und hat eine zusätzliche Eigenschaft: stream. Sie verweist auf den MediaStream, um den es beim Ereignis geht.
Verwendet wurde es in frühen WebRTC-Versionen für die Ereignisse addstream und removestream an einer RTCPeerConnection. Diese Ereignisse wurden ausgelöst, wenn die Gegenstelle einen Stream hinzufügte oder entfernte. Die Handler registrierte man über pc.onaddstream bzw. pc.addEventListener("addstream", …).
Die aktuelle WebRTC-Spezifikation arbeitet nicht mehr mit ganzen Streams, sondern mit einzelnen Spuren (Tracks). An die Stelle von addstream ist das Ereignis track vom Typ RTCTrackEvent getreten. Das Array event.streams dieses Ereignisses enthält die zugehörigen Streams. Verwende MediaStreamEvent in neuem Code nicht mehr. Nützlich ist es nur noch, um alten Code zu verstehen oder schrittweise zu migrieren.
Eigenschaften:
MediaStreamEvent.stream(nur lesbar): der betroffeneMediaStream.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Konstruktor-Parameter: Name des Ereignisses, z. B. "addstream" oder "removestream". |
|
| $eventInitDict Pflicht | { stream: MediaStream, bubbles?: boolean, cancelable?: boolean, composed?: boolean } | Konstruktor-Parameter: Optionen-Objekt. stream ist der zugehörige MediaStream. Die übrigen Felder entsprechen denen von EventInit. |
Rückgabewert
new MediaStreamEvent(type, eventInitDict) gibt ein neues Ereignisobjekt zurück. Dessen Eigenschaft stream vom Typ MediaStream ist nur lesbar.Beispiele
Instanz erzeugen und selbst auslösen (nur wo unterstützt)
// Prüfen, ob der Browser das veraltete Interface noch kennt
if (typeof MediaStreamEvent === 'function') {
const stream = new MediaStream();
const target = new EventTarget();
target.addEventListener('addstream', (event) => {
console.log('Stream-ID:', event.stream.id);
});
const evt = new MediaStreamEvent('addstream', { stream });
target.dispatchEvent(evt);
} else {
console.log('MediaStreamEvent wird nicht unterstützt');
}
Alter Code: Remote-Stream über onaddstream anzeigen
const pc = new RTCPeerConnection();
const video = document.querySelector('#remote');
// VERALTET: nur zur Veranschaulichung von Legacy-Code
pc.onaddstream = (event) => {
// event ist ein MediaStreamEvent
video.srcObject = event.stream;
};
pc.addEventListener('removestream', (event) => {
console.log('Stream entfernt:', event.stream.id);
video.srcObject = null;
});
Migration: modernes track-Ereignis statt addstream
const pc = new RTCPeerConnection();
const video = document.querySelector('#remote');
pc.addEventListener('track', (event) => {
// event ist ein RTCTrackEvent
const [remoteStream] = event.streams;
if (remoteStream && video.srcObject !== remoteStream) {
video.srcObject = remoteStream;
}
// Entfernte Spuren über den Stream beobachten
remoteStream?.addEventListener('removetrack', (e) => {
console.log('Spur entfernt:', e.track.kind);
});
});
// Wichtig · Fallstricke
- Veraltet:
MediaStreamEventsowie die Ereignisseaddstreamundremovestreamstehen nicht mehr in der WebRTC-Spezifikation. Auch die MethodenaddStream()undremoveStream()wurden entfernt. Die Browser unterstützen das nur uneinheitlich, und die Unterstützung kann ganz wegfallen. Deshalb vor der Nutzung immer mittypeof MediaStreamEvent === 'function'bzw.'onaddstream' in RTCPeerConnection.prototypeprüfen. - Ersatz: Verwende
pc.addTrack()und das Ereignistrack(RTCTrackEvent). Um entfernte Spuren zu erkennen, beobachteremovetrackamMediaStreamoder das EreignisendedamMediaStreamTrack. - Das Ereignis
trackwird pro Spur ausgelöst. Bei Audio und Video also meist zweimal für denselben Stream. Daher vor dem Setzen vonsrcObjectprüfen, ob der Stream schon zugewiesen ist, sonst wird die Wiedergabe neu gestartet. - Nicht verwechseln mit
MediaStreamTrackEvent: Das ist das noch gültige Ereignis-Interface füraddtrack/removetrackan einemMediaStream.