Start · Sprachen · JavaScript · Referenz · RTCPeerConnection: removestream

RTCPeerConnection: removestream

Ereignis

Veraltetes Ereignis, das an eine <code>RTCPeerConnection</code> gesendet wurde, sobald ein entfernter <code>MediaStream</code> aus der Verbindung entfernt wurde.

seit JavaScript Veraltet – aus der WebRTC-Spezifikation entfernt; deprecated seit ja Kategorie: webapi

Signatur

peerConnection.addEventListener("removestream", handler)

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

Typ
void
Beschreibung
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`);
});
Stream 3f2a… entfernt (nur in alten Browsern)

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'));
});
Track entfernt: video

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 stattdessen RTCPeerConnection.removeTrack() und auf der Empfängerseite das Ereignis removetrack am MediaStream.
  • Auch removetrack wird 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.js haben das Ereignis teilweise nachgebildet. Prüfen Sie das bei der Migration.