Start · Sprachen · JavaScript · Referenz · VideoTrackList.selectedIndex

VideoTrackList.selectedIndex

Eigenschaft

Liefert den Index des aktuell ausgewählten Videotracks in einer <code>VideoTrackList</code> oder <code>-1</code>, wenn kein Track ausgewählt ist.

seit JavaScript Nur Safari (seit 7); in Chrome/Firefox nur hinter Kategorie: webapi

Signatur

get VideoTrackList.selectedIndex

Beschreibung

Die schreibgeschützte Eigenschaft selectedIndex einer VideoTrackList gibt an, welcher Videotrack eines Medienelements gerade abgespielt wird. Eine VideoTrackList erhältst du über HTMLMediaElement.videoTracks, meist von einem <video>-Element.

Im Gegensatz zu Audiotracks, von denen mehrere gleichzeitig aktiv sein können, ist immer höchstens ein Videotrack ausgewählt. Deshalb gibt es bei der VideoTrackList ein selectedIndex, bei der AudioTrackList dagegen nicht. Ist kein Track ausgewählt, zum Beispiel weil die Metadaten noch nicht geladen sind oder die Datei keine Videospur enthält, ist der Wert -1.

Einen anderen Track wählst du nicht über selectedIndex aus, sondern indem du VideoTrack.selected des gewünschten Tracks auf true setzt. Der zuvor gewählte Track wird dabei automatisch abgewählt, und die Liste löst das Ereignis change aus.

Rückgabewert

Typ
number
Beschreibung
Ganzzahliger, nullbasierter Index des ausgewählten VideoTrack in der Liste oder -1, wenn kein Track ausgewählt ist.

Beispiele

Aktuell ausgewählten Videotrack auslesen

const video = document.querySelector('video');

video.addEventListener('loadedmetadata', () => {
  const tracks = video.videoTracks;
  if (!tracks) {
    console.log('VideoTrackList wird nicht unterstützt');
    return;
  }
  const index = tracks.selectedIndex;
  if (index === -1) {
    console.log('Kein Videotrack ausgewählt');
  } else {
    const track = tracks[index];
    console.log(`Aktiver Track: ${index} – ${track.label || track.id} (${track.kind})`);
  }
});
Aktiver Track: 0 – Hauptvideo (main)

Auf Trackwechsel reagieren

const video = document.querySelector('video');
const tracks = video.videoTracks;

tracks?.addEventListener('change', () => {
  console.log('Neuer selectedIndex:', tracks.selectedIndex);
});

// Zweiten Track (z. B. Gebärdensprache) auswählen
if (tracks && tracks.length > 1) {
  tracks[1].selected = true;
}
Neuer selectedIndex: 1

Nächsten Blickwinkel per Button durchschalten

const video = document.querySelector('#multicam');
const button = document.querySelector('#next-angle');

button.addEventListener('click', () => {
  const tracks = video.videoTracks;
  if (!tracks || tracks.length === 0) return;
  const current = tracks.selectedIndex;
  const next = (current + 1) % tracks.length; // -1 wird zu 0
  tracks[next].selected = true;
  button.textContent = `Kamera ${next + 1} von ${tracks.length}`;
});

// Wichtig · Fallstricke

  • Browserunterstützung: HTMLMediaElement.videoTracks und damit selectedIndex gibt es von Haus aus nur in Safari. In Chrome sind sie nur mit dem Flag „Experimental Web Platform features“ verfügbar, in Firefox nur mit media.track.enabled. Prüfe deshalb immer, ob die Eigenschaft existiert, etwa mit if (video.videoTracks) oder video.videoTracks?.selectedIndex.
  • Schreibgeschützt: Eine Zuweisung wie tracks.selectedIndex = 1 bleibt wirkungslos und wirft im Strict Mode einen TypeError. Einen Track wählst du stattdessen mit tracks[i].selected = true aus.
  • Zeitpunkt: Bevor die Metadaten geladen sind, ist die Liste oft leer und der Wert -1. Lies ihn daher erst nach loadedmetadata aus oder reagiere auf addtrack bzw. change.
  • Viele Dateien und Streams enthalten nur eine Videospur. Mehrere Videotracks kommen vor allem in HLS-Streams mit mehreren Kamerawinkeln oder in Containern mit mehreren Spuren vor. Bei MSE-basierten Playern (z. B. hls.js, dash.js) werden die Tracks oft von der Bibliothek selbst verwaltet.