Signatur
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
"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
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);
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:
typelässt sich nach dem Erzeugen nicht mehr ändern; eine Zuweisung wird ignoriert (im Strict ModeTypeError). Für einen anderen Typ muss ein neuer Chunk erzeugt werden. - Erster Chunk muss „key“ sein: Übergibt man einem frisch konfigurierten oder geflushten
AudioDecoderzuerst einen"delta"-Chunk, wirftdecode()einenDataError. - 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 einenTypeErroraus. - 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 globalThisprüfen.