Start · Sprachen · JavaScript · Referenz · MediaStreamEvent.stream

MediaStreamEvent.stream

Eigenschaft

Schreibgeschützte Eigenschaft, die den <code>MediaStream</code> zurückgibt, der zu einem <code>addstream</code>- oder <code>removestream</code>-Ereignis gehört.

seit JavaScript Veraltet: nur alte WebRTC-Implementierungen, nicht deprecated seit ja Kategorie: webapi

Signatur

MediaStreamEvent.stream

Beschreibung

Die schreibgeschützte Eigenschaft stream eines MediaStreamEvent enthält den MediaStream, um den es bei dem Ereignis geht. Solche Ereignisse hat eine RTCPeerConnection in der alten, streambasierten WebRTC-API ausgelöst: addstream, sobald die Gegenstelle einen Stream hinzugefügt hat, und removestream, sobald sie ihn wieder entfernt hat.

In der Praxis hat man event.stream vor allem genutzt, um einen empfangenen Remote-Stream direkt einem <video>- oder <audio>-Element über srcObject zuzuweisen oder um beim Entfernen eines Streams die passende Oberfläche wieder abzubauen.

Wichtig: MediaStreamEvent ist zusammen mit den Ereignissen addstream/removestream und der Methode addStream() veraltet. Die heutige WebRTC-Spezifikation arbeitet mit einzelnen Spuren: Mit RTCPeerConnection.addTrack() fügt man Spuren hinzu, empfangen werden sie über das track-Ereignis. Dessen RTCTrackEvent stellt die zugehörigen Streams als Array unter event.streams bereit. Neuer Code sollte ausschließlich diesen Weg nutzen.

Rückgabewert

Typ
MediaStream
Beschreibung
Der MediaStream, der zu dem Ereignis gehört. Die Eigenschaft ist schreibgeschützt.

Beispiele

Remote-Stream im alten addstream-Ereignis anzeigen

// Nur für alte WebRTC-Implementierungen
const pc = new RTCPeerConnection();
const remoteVideo = document.querySelector('#remote');

pc.onaddstream = (event) => {
  // event ist ein MediaStreamEvent
  console.log('Stream empfangen:', event.stream.id);
  remoteVideo.srcObject = event.stream;
};
Stream empfangen: 3f2a9c1e-…

Aufräumen beim removestream-Ereignis

const pc = new RTCPeerConnection();

pc.addEventListener('removestream', (event) => {
  const video = document.querySelector(`video[data-stream-id="${event.stream.id}"]`);
  if (video) {
    video.srcObject = null;
    video.remove();
  }
  console.log('Stream entfernt:', event.stream.id);
});
Stream entfernt: 3f2a9c1e-…

Moderner Ersatz mit Rückfall auf die alte API

const pc = new RTCPeerConnection();
const remoteVideo = document.querySelector('#remote');

if ('ontrack' in pc) {
  // Standardweg: RTCTrackEvent.streams
  pc.addEventListener('track', ({ streams: [stream] }) => {
    if (stream && remoteVideo.srcObject !== stream) {
      remoteVideo.srcObject = stream;
    }
  });
} else {
  // Rückfall für sehr alte Browser: MediaStreamEvent.stream
  pc.onaddstream = ({ stream }) => {
    remoteVideo.srcObject = stream;
  };
}

// Wichtig · Fallstricke

  • Veraltet: MediaStreamEvent, addstream und removestream kommen in der aktuellen WebRTC-Spezifikation nicht mehr vor. Aktuelle Browser unterstützen sie nicht mehr oder nur noch als Altlast. Nutze stattdessen track bzw. RTCTrackEvent.streams.
  • Das track-Ereignis wird für jede Spur einzeln ausgelöst, also bei Audio und Video oft zweimal für denselben Stream. Prüfe deshalb vor dem Zuweisen, ob srcObject schon gesetzt ist. addstream kam dagegen nur einmal pro Stream.
  • Die alte Zuweisung über URL.createObjectURL(event.stream) funktioniert in modernen Browsern nicht mehr. Verwende element.srcObject = stream.
  • Die Eigenschaft ist schreibgeschützt. Wenn du ihr einen Wert zuweist, wird das ignoriert, im Strict Mode gibt es einen TypeError.
  • Als Übergangslösung für alte Browser eignet sich die Bibliothek webrtc-adapter (adapter.js).