Start · Sprachen · JavaScript · Referenz · new MediaStreamTrackEvent()

new MediaStreamTrackEvent()

Methode

Erzeugt ein <code>MediaStreamTrackEvent</code>, das meldet, dass ein <code>MediaStreamTrack</code> zu einem <code>MediaStream</code> hinzugefügt oder daraus entfernt wurde.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

new MediaStreamTrackEvent(type, eventInitDict)

Beschreibung

Der Konstruktor MediaStreamTrackEvent() legt ein neues Ereignisobjekt vom Typ MediaStreamTrackEvent an. Browser lösen solche Ereignisse selbst aus, als addtrack bzw. removetrack auf einem MediaStream, zum Beispiel wenn bei einer WebRTC-Verbindung die Gegenseite eine Spur hinzufügt oder entfernt.

Selbst ruft man den Konstruktor vor allem in Tests, Mocks und bei eigenen Abstraktionen auf. Damit lässt sich Code, der auf addtrack/removetrack hört, prüfen, ohne dass eine echte Peer-Verbindung nötig ist. Das erzeugte Ereignis schickt man mit dispatchEvent() an einen MediaStream oder an ein anderes EventTarget.

Anders als bei vielen anderen Ereignis-Konstruktoren ist das Init-Objekt hier Pflicht: Es muss die Eigenschaft track mit einem gültigen MediaStreamTrack enthalten. Danach steht die Spur über die schreibgeschützte Eigenschaft event.track zur Verfügung.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, groß/klein-sensitiv. Der Browser verwendet "addtrack" und "removetrack".
$eventInitDict Pflicht object Init-Objekt (MediaStreamTrackEventInit). Pflichtfeld track: der betroffene MediaStreamTrack. Dazu kommen optional die EventInit-Felder bubbles, cancelable und composed (Standard jeweils false).
$eventInitDict.track Pflicht MediaStreamTrack Die Spur, die hinzugefügt oder entfernt wurde. Sie ist danach über event.track erreichbar.

Rückgabewert

Typ
MediaStreamTrackEvent
Beschreibung
Ein neues MediaStreamTrackEvent-Objekt, dessen Eigenschaft track auf die übergebene Spur zeigt.

Beispiele

Ereignis mit einer Canvas-Spur erzeugen

// Canvas liefert ohne Kamerazugriff einen echten MediaStreamTrack
const canvas = document.createElement('canvas');
const [videoTrack] = canvas.captureStream(30).getVideoTracks();

const event = new MediaStreamTrackEvent('addtrack', { track: videoTrack });

console.log(event.type);
console.log(event.track.kind);
console.log(event.track === videoTrack);
addtrack video true

addtrack-Handler ohne WebRTC testen

const stream = new MediaStream();

stream.addEventListener('addtrack', (e) => {
  console.log(`Neue ${e.track.kind}-Spur: ${e.track.label || e.track.id}`);
});

// Tonspur synthetisch erzeugen
const audioCtx = new AudioContext();
const dest = audioCtx.createMediaStreamDestination();
const [audioTrack] = dest.stream.getAudioTracks();

// Achtung: addTrack() löst KEIN addtrack aus, deshalb manuell dispatchen
stream.addTrack(audioTrack);
stream.dispatchEvent(new MediaStreamTrackEvent('addtrack', { track: audioTrack }));
Neue audio-Spur: <Track-ID>

removetrack über die on-Property simulieren

const canvas = document.createElement('canvas');
const stream = canvas.captureStream();
const [track] = stream.getVideoTracks();

stream.onremovetrack = (e) => {
  console.log('Entfernt:', e.track.kind);
  e.track.stop(); // Ressourcen freigeben
};

stream.removeTrack(track);
stream.dispatchEvent(new MediaStreamTrackEvent('removetrack', { track }));
Entfernt: video

// Wichtig · Fallstricke

  • Init-Objekt ist Pflicht: new MediaStreamTrackEvent('addtrack') oder ein Objekt ohne track wirft einen TypeError. Auch track muss ein echter MediaStreamTrack sein; ein einfaches Objekt als Attrappe wird abgelehnt.
  • Keine automatischen Ereignisse bei eigenen Aufrufen: MediaStream.addTrack() und removeTrack() lösen kein addtrack/removetrack aus. Das tut der Browser nur bei Änderungen, die er selbst verursacht (z. B. über WebRTC). Wer eigene Änderungen melden möchte, muss das Ereignis selbst erzeugen und dispatchen.
  • Selbst dispatchte Ereignisse haben isTrusted === false.
  • Für WebRTC-Spuren sollte man auf RTCPeerConnection meist besser das Ereignis track (RTCTrackEvent) verwenden.
  • Kompatibilität: Der Konstruktor wird von Chrome, Edge, Firefox und Safari unterstützt, in Node.js gibt es ihn nicht. Echte Spuren von getUserMedia() gibt es nur in einem sicheren Kontext (HTTPS) und nach Zustimmung des Nutzers. Für Tests eignen sich canvas.captureStream() oder AudioContext.createMediaStreamDestination().