Signatur
Beschreibung
Die Eigenschaft AudioDecoder.state gibt an, in welchem Lebenszyklus-Zustand sich der zugrunde liegende Audio-Codec gerade befindet. Sie ist schreibgeschützt und wird ausschließlich durch Methodenaufrufe wie configure(), reset() und close() oder durch Fehler verändert.
Mögliche Werte:
"unconfigured"– Der Decoder wurde erzeugt (oder perreset()zurückgesetzt), aber noch nicht konfiguriert. Aufrufe vondecode()oderflush()werfen einen Fehler."configured"– Nach erfolgreichemconfigure()ist der Decoder bereit,EncodedAudioChunk-Objekte zu dekodieren."closed"– Der Decoder wurde mitclose()geschlossen oder ist wegen eines schwerwiegenden Fehlers dauerhaft unbrauchbar. Aus diesem Zustand gibt es keinen Weg zurück; es muss eine neue Instanz erzeugt werden.
In der Praxis prüft man state vor dem Aufruf von decode(), flush() oder configure(), um InvalidStateError-Ausnahmen zu vermeiden – etwa in Streaming-Pipelines, in denen Datenpakete auch dann noch eintreffen, wenn der Decoder bereits geschlossen wurde.
Rückgabewert
CodecState), der den aktuellen Zustand des Decoders beschreibt.Beispiele
Zustandswechsel im Lebenszyklus beobachten
const decoder = new AudioDecoder({
output: (audioData) => {
// Dekodierte Samples weiterverarbeiten
audioData.close();
},
error: (e) => console.error('Decoder-Fehler:', e.message)
});
console.log(decoder.state);
decoder.configure({
codec: 'opus',
sampleRate: 48000,
numberOfChannels: 2
});
console.log(decoder.state);
decoder.reset();
console.log(decoder.state);
decoder.close();
console.log(decoder.state);
Sicheres Dekodieren in einer Streaming-Pipeline
const safeDecode = (decoder, chunk) => {
if (decoder.state !== 'configured') {
console.warn(`Chunk verworfen – Decoder ist "${decoder.state}"`);
return false;
}
decoder.decode(chunk);
return true;
};
// Beispiel: eintreffende Pakete aus einem WebSocket
// socket.onmessage = ({ data }) => {
// const chunk = new EncodedAudioChunk({
// type: 'key', timestamp: performance.now() * 1000, data
// });
// safeDecode(decoder, chunk);
// };
Decoder nach Fehler automatisch neu erstellen
const config = { codec: 'mp4a.40.2', sampleRate: 44100, numberOfChannels: 2 };
const createDecoder = () => {
const d = new AudioDecoder({
output: (data) => data.close(),
error: (e) => console.error('Fehler:', e.name)
});
d.configure(config);
return d;
};
let decoder = createDecoder();
const ensureDecoder = () => {
// Nach einem fatalen Fehler ist der Zustand "closed"
if (decoder.state === 'closed') {
console.log('Decoder geschlossen – erzeuge neue Instanz');
decoder = createDecoder();
}
return decoder;
};
console.log(ensureDecoder().state);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
decoder.state = 'configured'hat keine Wirkung (im Strict Mode wirft sie einenTypeError). - Zustand
"closed"ist endgültig: Wederconfigure()nochreset()reaktivieren den Decoder – beide werfen dann einenInvalidStateError. Eine neue Instanz ist nötig. - Fehler schließen den Decoder: Tritt während der Dekodierung ein Fehler auf (z. B.
NotSupportedErrorbei nicht unterstütztem Codec oderEncodingErrorbei defekten Daten), wird dererror-Callback aufgerufen undstatewechselt auf"closed". "configured"garantiert keine Unterstützung:configure()arbeitet asynchron; der Zustand ist sofort"configured", auch wenn der Codec später abgelehnt wird. Vorab mitAudioDecoder.isConfigSupported()prüfen.- Kompatibilität: Die WebCodecs API ist nur in sicheren Kontexten (HTTPS) sowie in Window und Dedicated Workern verfügbar. Unterstützung per
'AudioDecoder' in globalThisprüfen; Safari unterstütztAudioDecodererst seit neueren Versionen.