Signatur
Beschreibung
Die Eigenschaft type einer DataCue sagt, wie der Inhalt von value zu verstehen ist. Ein DataCue ist ein Cue für beliebige zeitgesteuerte Metadaten in einem TextTrack vom Typ "metadata". Das können ID3-Tags aus einem HLS-Stream sein, QuickTime-Metadaten oder eigene Daten der Anwendung wie Kapitelmarken, Werbe-Marker oder Positionsdaten.
Da value jeden beliebigen Wert enthalten kann, braucht man type als Unterscheidungsmerkmal. Mehrere Metadaten-Formate können in derselben Spur liegen, und anhand von type wählt die Anwendung die passende Verarbeitung. Bei Cues, die der Browser aus dem Medium erzeugt, ist der Wert ein festgelegter Bezeichner, etwa "org.id3", "com.apple.quicktime.udta", "com.apple.quicktime.mdta" oder "com.apple.itunes". Bei selbst erzeugten Cues übergibt man den Typ als viertes Argument an den Konstruktor new DataCue(startTime, endTime, value, type).
Die Eigenschaft ist schreibgeschützt. Den Typ legt man beim Erzeugen fest, danach lässt er sich nicht mehr ändern. Für eigene Daten empfiehlt sich ein eindeutiger Bezeichner in umgekehrter Domain-Schreibweise wie "com.example.chapter", damit er nicht mit den Typen des Browsers kollidiert.
Rückgabewert
value. Wurde im Konstruktor kein Typ übergeben, ist es ein leerer String "".Beispiele
Eigene Kapitelmarken mit Typ anlegen und auslesen
const video = document.querySelector('video');
const track = video.addTextTrack('metadata', 'Kapitel');
track.mode = 'hidden'; // Cues feuern, aber nichts anzeigen
const cue = new DataCue(0, 30, { title: 'Einleitung' }, 'com.example.chapter');
track.addCue(cue);
console.log(cue.type);
console.log(cue.value.title);
ID3-Metadaten aus einem HLS-Stream nach Typ filtern
const video = document.querySelector('video');
video.src = 'https://example.com/live/stream.m3u8';
video.textTracks.addEventListener('addtrack', ({ track }) => {
if (track.kind !== 'metadata') return;
track.mode = 'hidden';
track.addEventListener('cuechange', () => {
for (const cue of track.activeCues ?? []) {
if (cue.type !== 'org.id3') continue;
// value ist bei ID3 ein Objekt mit key/data (WebKit)
console.log(`ID3 ${cue.value.key}:`, cue.value.data);
}
});
});
Verarbeitung je nach Typ verteilen (mit Feature-Erkennung)
const handlers = {
'com.example.chapter': (v) => console.log('Kapitel:', v.title),
'com.example.ad': (v) => console.log('Werbung startet:', v.id),
};
const handleCue = (cue) => {
const handler = handlers[cue.type];
handler ? handler(cue.value) : console.warn('Unbekannter Typ:', cue.type);
};
if ('DataCue' in window) {
handleCue(new DataCue(10, 15, { id: 'spot-42' }, 'com.example.ad'));
} else {
console.log('DataCue wird nicht unterstützt');
}
// Wichtig · Fallstricke
- Kompatibilität:
DataCueist eine experimentelle WICG-Spezifikation. Zuverlässig verfügbar ist sie nur in Safari/WebKit. Vor der Verwendung mit'DataCue' in windowprüfen und für andere Browser eine Alternative vorsehen, z. B.VTTCuemit JSON intext. - Schreibgeschützt: Eine Zuweisung an
cue.typehat keine Wirkung und wirft im Strict Mode einenTypeError. - Ohne das vierte Konstruktor-Argument ist
typeein leerer String. Bei selbst erzeugten Cues daher immer einen Typ angeben. - Die Typ-Bezeichner und der Aufbau von
valuebei Cues, die der Browser erzeugt (z. B."org.id3"), hängen von der Implementierung ab. Deshalb den Inhalt vonvaluevorsichtig auswerten. - Metadaten aus fremden Streams sind nicht vertrauenswürdig. Inhalte aus
valuenie ungeprüft perinnerHTMLins DOM schreiben, sonst droht XSS. - Die ältere WebKit-Eigenschaft
data(einArrayBuffer) ist veraltet. Stattdessenvaluezusammen mittypeverwenden.