Start · Sprachen · JavaScript · Referenz · EncodedAudioChunk.type

EncodedAudioChunk.type

Eigenschaft

Schreibgeschützte Eigenschaft, die angibt, ob ein <code>EncodedAudioChunk</code> ein eigenständig dekodierbarer Schlüssel-Chunk (<code>"key"</code>) oder ein abhängiger Chunk (<code>"delta"</code>) ist.

seit JavaScript WebCodecs API – Chrome/Edge 94+, Safari 26+, Firef Kategorie: webapi

Signatur

EncodedAudioChunk.type

Beschreibung

Die Eigenschaft type eines EncodedAudioChunk gibt einen von zwei Zeichenketten-Werten zurück: "key" für einen Schlüssel-Chunk, der ohne vorherige Chunks dekodiert werden kann, und "delta" für einen Chunk, der auf zuvor dekodierte Daten angewiesen ist. Der Wert stammt aus dem Feld type des Initialisierungsobjekts, das dem Konstruktor new EncodedAudioChunk(init) übergeben wurde, bzw. wird vom AudioEncoder gesetzt.

Wichtig ist die Eigenschaft vor allem beim Dekodieren: Ein AudioDecoder verlangt nach configure() oder flush(), dass der erste übergebene Chunk vom Typ "key" ist. Beim Muxen (z. B. in MP4 oder WebM) oder beim Streamen über WebTransport/WebRTC dient type dazu, Einstiegspunkte für das Springen (Seeking) oder für neu hinzukommende Empfänger zu markieren.

Bei den meisten Audio-Codecs (Opus, AAC, MP3, FLAC, PCM) ist in der Praxis jeder Chunk ein Schlüssel-Chunk, da Audio-Frames typischerweise unabhängig dekodierbar sind. Der Wert "delta" kommt bei Audio also deutlich seltener vor als bei Video (EncodedVideoChunk).

Rückgabewert

Typ
"key" | "delta"
Beschreibung
Eine Zeichenkette: "key", wenn der Chunk unabhängig dekodierbar ist, sonst "delta".

Beispiele

Chunk manuell erzeugen und Typ auslesen

// Rohdaten eines Opus-Pakets (hier nur Platzhalter-Bytes)
const data = new Uint8Array([0xfc, 0xff, 0xfe]);

const chunk = new EncodedAudioChunk({
  type: 'key',
  timestamp: 0,      // Mikrosekunden
  duration: 20000,   // 20 ms
  data
});

console.log(chunk.type);      // "key"
console.log(chunk.byteLength); // 3
key 3

Ausgabe eines AudioEncoders nach Typ auswerten

const stats = { key: 0, delta: 0 };

const encoder = new AudioEncoder({
  output: (chunk, metadata) => {
    stats[chunk.type]++;
    if (metadata?.decoderConfig) {
      console.log('Decoder-Konfiguration:', metadata.decoderConfig.codec);
    }
  },
  error: (e) => console.error('Encoder-Fehler:', e)
});

encoder.configure({
  codec: 'opus',
  sampleRate: 48000,
  numberOfChannels: 1,
  bitrate: 64000
});

// 1 Sekunde Stille als AudioData erzeugen
const samples = new Float32Array(48000);
const audio = new AudioData({
  format: 'f32',
  sampleRate: 48000,
  numberOfFrames: samples.length,
  numberOfChannels: 1,
  timestamp: 0,
  data: samples
});

encoder.encode(audio);
audio.close();
await encoder.flush();
console.log(stats);
Decoder-Konfiguration: opus { key: 50, delta: 0 }

Dekodierung erst ab einem Schlüssel-Chunk starten

const decoder = new AudioDecoder({
  output: (audioData) => {
    // ... abspielen oder weiterverarbeiten
    audioData.close();
  },
  error: (e) => console.error(e)
});

decoder.configure({ codec: 'opus', sampleRate: 48000, numberOfChannels: 1 });

let waitingForKey = true;

// Wird z. B. für jedes über das Netzwerk empfangene Paket aufgerufen
const handleChunk = (chunk) => {
  if (waitingForKey && chunk.type !== 'key') {
    return; // Delta-Chunks vor dem ersten Key verwerfen
  }
  waitingForKey = false;
  decoder.decode(chunk);
};

// Wichtig · Fallstricke

  • Schreibgeschützt: type lässt sich nach dem Erzeugen nicht mehr ändern; eine Zuweisung wird ignoriert (im Strict Mode TypeError). Für einen anderen Typ muss ein neuer Chunk erzeugt werden.
  • Erster Chunk muss „key“ sein: Übergibt man einem frisch konfigurierten oder geflushten AudioDecoder zuerst einen "delta"-Chunk, wirft decode() einen DataError.
  • Der Browser prüft nicht, ob die Angabe zum Bitstrom passt. Ein fälschlich als "key" markierter Chunk kann zu Dekodierfehlern oder hörbaren Artefakten führen.
  • Ungültige Werte im Konstruktor (z. B. type: 'keyframe') lösen einen TypeError aus.
  • Kompatibilität: WebCodecs gibt es nur in sicheren Kontexten (HTTPS) und in Fenstern sowie dedizierten Workern. Chromium-Browser unterstützen die API seit Version 94, Firefox seit 130 und Safari erst seit neueren Versionen. Vorher mit 'EncodedAudioChunk' in globalThis prüfen.