Signatur
Beschreibung
Die Eigenschaft kind eines TextTrack-Objekts sagt aus, wofür der Track gedacht ist. Anhand dieser Art entscheidet der Browser, wie er den Track behandelt. Untertitel und Bildunterschriften (Captions) blendet er über dem Video ein. Kapitel und Metadaten zeigt er dagegen nicht an, sondern stellt sie nur per Skript bereit.
Mögliche Werte sind:
"subtitles": Übersetzung des Dialogs, etwa für Zuschauer, die die Sprache nicht verstehen."captions": Transkription des Dialogs mit Geräuschen und Sprecherhinweisen, gedacht für gehörlose und schwerhörige Menschen."descriptions": Textbeschreibung des Bildinhalts, gedacht für blinde Menschen oder Sprachausgabe."chapters": Kapitelmarken zur Navigation im Medium."metadata": Daten für Skripte, die der Browser nie anzeigt.
Der Wert wird beim Erzeugen des Tracks festgelegt und lässt sich danach nicht mehr ändern. Er stammt entweder aus dem kind-Attribut eines <track>-Elements oder aus dem ersten Argument von HTMLMediaElement.addTextTrack(). Man nutzt kind vor allem, um in video.textTracks gezielt Tracks zu finden, etwa alle Untertitel für ein eigenes Sprachmenü oder den Kapitel-Track für eine Kapitelnavigation.
Rückgabewert
string, der die Art des Tracks angibt. Die Eigenschaft ist schreibgeschützt.Beispiele
Alle Tracks eines Videos mit ihrer Art auflisten
// HTML: <video id="film" src="film.mp4">
// <track kind="subtitles" src="de.vtt" srclang="de" label="Deutsch">
// <track kind="chapters" src="kapitel.vtt" srclang="de" label="Kapitel">
// </video>
const video = document.getElementById('film');
for (const track of video.textTracks) {
console.log(`${track.label}: ${track.kind}`);
}
Sprachmenü nur aus Untertiteln und Captions aufbauen
const video = document.querySelector('video');
const menu = document.querySelector('#untertitel-menue');
const sichtbareArten = new Set(['subtitles', 'captions']);
const tracks = [...video.textTracks].filter((t) => sichtbareArten.has(t.kind));
for (const track of tracks) {
const button = document.createElement('button');
button.textContent = `${track.label} (${track.kind === 'captions' ? 'CC' : 'UT'})`;
button.addEventListener('click', () => {
// Alle anderen ausblenden, den gewählten anzeigen
tracks.forEach((t) => { t.mode = t === track ? 'showing' : 'disabled'; });
});
menu.append(button);
}
Metadaten-Track per Skript anlegen und auswerten
const video = document.querySelector('video');
// kind wird beim Erzeugen festgelegt und ist danach unveränderlich
const metaTrack = video.addTextTrack('metadata', 'Werbemarken');
console.log(metaTrack.kind);
metaTrack.mode = 'hidden'; // Cues feuern Events, werden aber nicht angezeigt
metaTrack.addCue(new VTTCue(10, 12, JSON.stringify({ typ: 'werbung', id: 42 })));
metaTrack.addEventListener('cuechange', () => {
const cue = metaTrack.activeCues[0];
if (cue) console.log('Aktive Daten:', JSON.parse(cue.text));
});
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
track.kind = 'captions'wird stillschweigend ignoriert, im Strict Mode löst sie einenTypeErroraus. Wer die Art ändern will, muss beim<track>-Element das Attribut überHTMLTrackElement.kindsetzen oder einen neuen Track anlegen. - Standardwerte beim
<track>-Element: Fehlt das Attributkind, gilt"subtitles". Ein ungültiger Wert wird als"metadata"behandelt, der Track ist dann also unsichtbar. Das ist ein häufiger Grund, warum Untertitel „einfach nicht erscheinen". addTextTrack(): Ein ungültigerkind-Wert löst hier einenTypeErroraus. Anders als beim Attribut gibt es keinen Rückfall auf"metadata".- Barrierefreiheit:
"captions"und"subtitles"sind nicht dasselbe. Für Menschen mit eingeschränktem Hörvermögen ist"captions"richtig, weil dieser Track auch Geräusche beschreibt. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Wie gut
"descriptions"und"chapters"im nativen Player genutzt werden, unterscheidet sich stark von Browser zu Browser. Meist muss man diese Arten selbst per Skript auswerten.