Signatur
Beschreibung
Das Ereignis removestream gehörte zur alten, streambasierten WebRTC-API. Es wurde an eine RTCPeerConnection gesendet, wenn die Gegenseite einen zuvor hinzugefügten MediaStream entfernt hatte, meist nach einer Neuverhandlung über removeStream(). Das Ereignisobjekt war ein MediaStreamEvent. Seine Eigenschaft stream verwies auf den entfernten Stream.
Registrieren ließ sich der Handler über addEventListener("removestream", handler) oder über die Eigenschaft onremovestream. Typischerweise hat man damit das zugehörige <video>- oder <audio>-Element aus der Oberfläche entfernt oder seine srcObject-Eigenschaft geleert.
In der aktuellen Spezifikation arbeitet WebRTC mit einzelnen Tracks statt mit ganzen Streams. Statt addStream()/removeStream() verwendet man addTrack() und removeTrack(). Wird ein entfernter Track entfernt, löst das zugehörige MediaStream-Objekt das Ereignis removetrack aus. Der Track selbst meldet sich über mute bzw. ended. Neuer Code sollte removestream deshalb nicht mehr verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname "removestream". |
|
| $handler Pflicht | (event: MediaStreamEvent) => void | Callback-Funktion. Sie erhält ein MediaStreamEvent, dessen Eigenschaft event.stream den entfernten MediaStream enthält. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Listener-Optionen wie once oder signal. |
Rückgabewert
addEventListener gibt nichts zurück. Der Handler erhält ein MediaStreamEvent.Beispiele
Veralteter Ansatz mit addEventListener
const pc = new RTCPeerConnection();
pc.addEventListener('removestream', (event) => {
// event.stream ist der entfernte MediaStream
const video = document.getElementById(`remote-${event.stream.id}`);
video?.remove();
console.log(`Stream ${event.stream.id} entfernt`);
});
Veralteter Ansatz über die on-Property und Aufräumen
const pc = new RTCPeerConnection();
const onRemoved = (event) => {
console.log('Entfernter Stream:', event.stream.id);
};
pc.onremovestream = onRemoved;
// Handler später wieder abmelden
pc.onremovestream = null;
Moderner Ersatz: removetrack am MediaStream
const pc = new RTCPeerConnection();
const remoteVideo = document.querySelector('#remote');
pc.addEventListener('track', ({ track, streams }) => {
const [stream] = streams;
remoteVideo.srcObject = stream;
// Wird ausgelöst, wenn die Gegenseite removeTrack() aufruft und neu verhandelt wird
stream.addEventListener('removetrack', (e) => {
console.log(`Track entfernt: ${e.track.kind}`);
if (stream.getTracks().length === 0) {
remoteVideo.srcObject = null;
}
});
track.addEventListener('ended', () => console.log('Track beendet'));
});
Funktionserkennung mit Rückfalllösung
const pc = new RTCPeerConnection();
if ('onremovestream' in pc) {
pc.onremovestream = (e) => console.log('Legacy: Stream entfernt', e.stream.id);
} else {
pc.ontrack = ({ streams: [stream] }) => {
stream.onremovetrack = (e) => console.log('Modern: Track entfernt', e.track.id);
};
}
// Wichtig · Fallstricke
- Veraltet: Das Ereignis wurde aus der WebRTC-Spezifikation entfernt. Chrome, Firefox und Safari lösen es in aktuellen Versionen nicht mehr aus oder unterstützen es nur noch eingeschränkt. Verlassen Sie sich nicht darauf.
- Das zugehörige
removeStream()ist ebenfalls entfernt. Verwenden Sie stattdessenRTCPeerConnection.removeTrack()und auf der Empfängerseite das EreignisremovetrackamMediaStream. - Auch
removetrackwird erst nach einer abgeschlossenen Neuverhandlung (negotiationneeded→ Angebot/Antwort) ausgelöst, nicht sofort beim Aufruf auf der Gegenseite. - Ein abgebrochener Verbindungsaufbau löst keine Stream- oder Track-Entfernung aus. Beobachten Sie dafür
connectionstatechange. - Legacy-Bibliotheken wie ältere Versionen von
adapter.jshaben das Ereignis teilweise nachgebildet. Prüfen Sie das bei der Migration.