Signatur
Beschreibung
Das Ereignis removetrack wird auf einer VideoTrackList ausgelöst, sobald eine VideoTrack aus der Liste entfernt wurde. Die Liste erhältst du über HTMLMediaElement.videoTracks eines <video>-Elements. Das Ereignis ist vom Typ TrackEvent. Seine Eigenschaft track verweist auf die entfernte VideoTrack.
Einen Listener registrierst du entweder mit addEventListener("removetrack", handler) oder über die Eigenschaft onremovetrack. Das Ereignis steigt nicht auf (bubbling) und lässt sich nicht abbrechen.
Typische Einsatzfälle sind Player-Oberflächen, die eine Auswahl der Videospuren anbieten (z. B. verschiedene Kamerawinkel). Wird eine Spur entfernt, etwa weil sich die src ändert oder eine Media-Source-Extensions-Quelle umgebaut wird, muss die Auswahlliste angepasst werden. Das Gegenstück ist addtrack. Ändert sich nur, welche Spur ausgewählt ist, wird stattdessen change ausgelöst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname, hier immer "removetrack". |
|
| $handler Pflicht | (event: TrackEvent) => void | Callback-Funktion. Sie erhält ein TrackEvent, dessen Eigenschaft event.track die entfernte VideoTrack enthält. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Einstellungen wie once, signal oder capture. |
Rückgabewert
addEventListener gibt nichts zurück. Die Informationen stecken im übergebenen TrackEvent.Beispiele
Entfernte Spur mit addEventListener protokollieren
const video = document.querySelector('video');
if ('videoTracks' in video) {
video.videoTracks.addEventListener('removetrack', (event) => {
const { id, label, kind } = event.track;
console.log(`Spur entfernt: ${label || id} (${kind})`);
console.log(`Verbleibende Spuren: ${video.videoTracks.length}`);
});
} else {
console.warn('VideoTrackList wird von diesem Browser nicht unterstützt.');
}
Spurauswahl im Player aktualisieren (on-Property)
const video = document.querySelector('#player');
const select = document.querySelector('#track-select');
const renderOptions = () => {
select.replaceChildren(
...Array.from(video.videoTracks, (track, i) =>
new Option(track.label || `Spur ${i + 1}`, track.id, false, track.selected)
)
);
};
video.videoTracks.onaddtrack = renderOptions;
video.videoTracks.onremovetrack = (event) => {
console.log('Entfernt:', event.track.id);
renderOptions();
};
Listener wieder entfernen (removeEventListener / AbortSignal)
const video = document.querySelector('video');
const controller = new AbortController();
const onRemove = (event) => {
console.log('Videospur weg:', event.track.label);
};
video.videoTracks.addEventListener('removetrack', onRemove, {
signal: controller.signal
});
// Später, z. B. beim Abbauen der Player-Komponente:
const destroyPlayer = () => {
video.videoTracks.removeEventListener('removetrack', onRemove);
// oder alternativ: controller.abort();
};
destroyPlayer();
// Wichtig · Fallstricke
- Browser-Kompatibilität:
HTMLMediaElement.videoTracksund damitVideoTrackListgibt es standardmäßig praktisch nur in Safari. In Chrome, Edge und Firefox ist die API nur hinter experimentellen Flags verfügbar. Prüfe sie daher immer vorher mit'videoTracks' in video. - Das Ereignis wird nach dem Entfernen ausgelöst.
videoTracks.lengthundgetTrackById()geben also schon den neuen Zustand wieder.event.trackkannst du trotzdem noch lesen. - Verwechslungsgefahr:
removetrackgibt es auch aufAudioTrackList,TextTrackListundMediaStream. BeiMediaStreamist das Ereignis einMediaStreamTrackEvent, keinTrackEvent. - Wechselst du nur die ausgewählte Spur (
track.selected), wird keinremovetrackausgelöst, sondernchange. - Ein Wert in
onremovetrackersetzt einen zuvor gesetzten Handler. MitaddEventListenerkannst du dagegen mehrere Listener registrieren.