Start · Sprachen · JavaScript · Referenz · TextTrack.inBandMetadataTrackDispatchType

TextTrack.inBandMetadataTrackDispatchType

Eigenschaft

Liefert als schreibgeschützten String den Dispatch-Typ eines In-Band-Metadatentracks. Anhand dieses Werts erkennt ein Skript, welches Format die eingebetteten Metadaten haben.

seit JavaScript Nur in WebKit/Safari umgesetzt; Chrome und Firefox Kategorie: webapi

Signatur

TextTrack.inBandMetadataTrackDispatchType

Beschreibung

Die schreibgeschützte Eigenschaft inBandMetadataTrackDispatchType des Interfaces TextTrack gibt einen String zurück, der das Format eines In-Band-Metadatentracks beschreibt. In-Band-Tracks sind Spuren, die direkt im Mediencontainer stecken, etwa in einem MPEG-2-Transportstream, in WebM oder in einem HLS-Stream. Sie werden also nicht per <track>-Element eingebunden.

Die Eigenschaft ist dafür gedacht, dass ein Skript mehrere eingebettete Metadatentracks unterscheiden kann. So bindet es nur an die Spuren Handler, die es auch auswerten kann, zum Beispiel ID3-Tags für Werbemarker, Kapitel oder „Jetzt läuft“-Informationen. Wie der Wert entsteht, hängt vom Container ab:

  • MPEG-2 TS: Der Wert ist der stream_type zusammen mit den ES-Info-Bytes aus der Program Map Table, als hexadezimaler String kodiert.
  • WebM: Der Wert ist die CodecID der Spur.
  • HLS in Safari: Zeitgesteuerte ID3-Metadaten erscheinen typischerweise mit dem Dispatch-Typ "com.apple.streaming".

Ist der Track kein In-Band-Track, hat er nicht die Art kind === "metadata" oder kennt der Browser keinen Dispatch-Typ, liefert die Eigenschaft einen leeren String. Sie hat keine Parameter. Da sie schreibgeschützt ist, kann man sie nur lesen.

Rückgabewert

Typ
string
Beschreibung
Der Dispatch-Typ des In-Band-Metadatentracks. Bei Tracks, die keine In-Band-Metadaten sind, oder wenn der Typ unbekannt ist, ein leerer String "". In Browsern ohne Unterstützung ist der Wert undefined.

Beispiele

Dispatch-Typen aller Tracks eines Videos auflisten

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

video.addEventListener('loadedmetadata', () => {
  for (const track of video.textTracks) {
    console.log(
      `${track.kind} | ${track.label || '(ohne Label)'} | ` +
      `Dispatch-Typ: "${track.inBandMetadataTrackDispatchType ?? 'nicht unterstützt'}"`
    );
  }
});
metadata | (ohne Label) | Dispatch-Typ: "com.apple.streaming" subtitles | Deutsch | Dispatch-Typ: ""

ID3-Metadaten aus einem HLS-Stream in Safari auswerten

const video = document.querySelector('video');
video.src = 'https://example.com/live/stream.m3u8';

video.textTracks.addEventListener('addtrack', ({ track }) => {
  // Nur eingebettete Metadatentracks mit bekanntem Format verwenden
  if (track.kind !== 'metadata') return;
  if (track.inBandMetadataTrackDispatchType !== 'com.apple.streaming') return;

  // 'hidden' sorgt dafür, dass Cues ausgewertet, aber nicht angezeigt werden
  track.mode = 'hidden';

  track.addEventListener('cuechange', () => {
    for (const cue of track.activeCues) {
      // In Safari enthalten DataCues ein value-Objekt mit dem ID3-Frame
      const { key, data } = cue.value ?? {};
      console.log('ID3-Frame:', key, data);
    }
  });
});
ID3-Frame: TIT2 Aktueller Songtitel

Funktionsprüfung mit Rückfall auf eine andere Erkennung

const supportsDispatchType = () =>
  'TextTrack' in window &&
  'inBandMetadataTrackDispatchType' in TextTrack.prototype;

const isKnownMetadataTrack = (track) => {
  if (track.kind !== 'metadata') return false;
  if (supportsDispatchType()) {
    return track.inBandMetadataTrackDispatchType !== '';
  }
  // Rückfall: Browser kennt die Eigenschaft nicht, also Label/ID prüfen
  return /id3|timed/i.test(track.label + track.id);
};

console.log('Unterstützt:', supportsDispatchType());
Unterstützt: false (z. B. in Chrome/Firefox)

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Nur WebKit (Safari auf macOS und iOS) setzt die Eigenschaft tatsächlich um. In Chrome, Edge und Firefox ist sie nicht vorhanden und liefert undefined. Prüfe deshalb vorher, ob sie existiert, z. B. mit 'inBandMetadataTrackDispatchType' in TextTrack.prototype. Für HLS in anderen Browsern liefern Bibliotheken wie hls.js die ID3-Daten über eigene Events.
  • Bei Tracks, die per <track>-Element oder addTextTrack() entstehen, ist der Wert immer ein leerer String. Ein nicht leerer Wert ist also ein Hinweis darauf, dass der Track aus dem Mediencontainer stammt.
  • In-Band-Tracks tauchen oft erst nach dem Laden der Metadaten oder sogar während der Wiedergabe auf. Höre deshalb auf das addtrack-Event von video.textTracks, statt die Liste nur einmal gleich am Anfang auszulesen.
  • Metadatentracks stehen standardmäßig auf mode = \"disabled\". Setze mode auf \"hidden\", sonst werden keine cuechange-Events ausgelöst.
  • Das Format des Werts hängt vom Container ab (Hex-String, CodecID oder herstellerspezifischer Bezeichner). Vergleiche ihn deshalb nur mit Werten, die für den jeweiligen Container bekannt sind.