Signatur
Beschreibung
Die statische Methode AudioDecoder.isConfigSupported() gehört zur WebCodecs API. Sie prüft, ob ein AudioDecoder mit einer bestimmten Konfiguration (Codec, Abtastrate, Kanalanzahl, optionale Codec-Daten) erfolgreich konfiguriert werden könnte, ohne dass dafür eine Decoder-Instanz angelegt werden muss.
Das ist vor allem dann nützlich, wenn eine Anwendung mehrere Audioformate anbieten kann (z. B. Opus, AAC, FLAC) und zur Laufzeit das beste unterstützte Format auswählen soll. So lassen sich Fehler vermeiden, die sonst erst asynchron im error-Callback des Decoders auftauchen würden.
Die Methode gibt ein Promise zurück, das mit einem Objekt aufgelöst wird. Es enthält supported (boolean) und config. Dabei ist config eine bereinigte Kopie der übergebenen Konfiguration, die nur die vom Browser erkannten Felder enthält. Unbekannte Eigenschaften fallen dabei weg. An dieser Kopie sieht man also, welche Optionen tatsächlich ausgewertet wurden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $config Pflicht | AudioDecoderConfig | Konfigurationsobjekt, wie es auch an AudioDecoder.prototype.configure() übergeben wird. |
|
| $config.codec Pflicht | string | Codec-String gemäß WebCodecs-Codec-Registry, z. B. "opus", "mp4a.40.2" (AAC-LC), "flac", "mp3", "vorbis", "pcm-s16". |
|
| $config.sampleRate Pflicht | number | Abtastrate in Hz (Frames pro Sekunde), z. B. 48000. |
|
| $config.numberOfChannels Pflicht | number | Anzahl der Audiokanäle, z. B. 2 für Stereo. |
|
| $config.description | ArrayBuffer|TypedArray|DataView | Codec-spezifische Initialisierungsdaten, etwa die AudioSpecificConfig bei AAC oder der Opus-Header (OpusHead). Bei manchen Codecs ist die Angabe Pflicht, z. B. bei FLAC und Vorbis. |
Rückgabewert
supported gibt an, ob die Konfiguration unterstützt wird. config ist eine bereinigte Kopie der geprüften Konfiguration. Das Promise wird mit einem TypeError abgelehnt, wenn die Konfiguration ungültig ist, etwa bei fehlendem oder leerem codec.Beispiele
Einfache Prüfung auf Opus-Unterstützung
const config = {
codec: 'opus',
sampleRate: 48000,
numberOfChannels: 2
};
const { supported } = await AudioDecoder.isConfigSupported(config);
console.log(supported ? 'Opus wird unterstützt' : 'Opus wird nicht unterstützt');
Besten unterstützten Codec aus einer Liste wählen
const kandidaten = [
{ codec: 'opus', sampleRate: 48000, numberOfChannels: 2 },
{ codec: 'mp4a.40.2', sampleRate: 44100, numberOfChannels: 2 },
{ codec: 'mp3', sampleRate: 44100, numberOfChannels: 2 }
];
const findeUnterstuetztenCodec = async (liste) => {
for (const cfg of liste) {
try {
const { supported, config } = await AudioDecoder.isConfigSupported(cfg);
if (supported) return config;
} catch (err) {
console.warn('Ungültige Konfiguration:', cfg.codec, err.message);
}
}
return null;
};
const gewaehlt = await findeUnterstuetztenCodec(kandidaten);
console.log('Gewählter Codec:', gewaehlt?.codec ?? 'keiner');
Prüfen und anschließend Decoder konfigurieren (mit Feature-Erkennung)
const starteDecoder = async (config) => {
if (!('AudioDecoder' in window)) {
throw new Error('WebCodecs wird in diesem Browser nicht unterstützt');
}
const { supported } = await AudioDecoder.isConfigSupported(config);
if (!supported) {
throw new Error(`Codec ${config.codec} nicht unterstützt`);
}
const decoder = new AudioDecoder({
output: (audioData) => {
console.log('Frames dekodiert:', audioData.numberOfFrames);
audioData.close(); // Speicher freigeben
},
error: (e) => console.error('Decoder-Fehler:', e)
});
decoder.configure(config);
return decoder;
};
const decoder = await starteDecoder({ codec: 'opus', sampleRate: 48000, numberOfChannels: 2 });
console.log(decoder.state);
// Wichtig · Fallstricke
- Ungültig ist nicht dasselbe wie nicht unterstützt: Ist die Konfiguration formal ungültig (z. B.
codec: ''oder fehlende Pflichtfelder), wird das Promise mit einemTypeErrorabgelehnt. Ist sie gültig, aber nicht unterstützt, wird es mitsupported: falseaufgelöst. Deshalb sollte man immertry/catchverwenden. - Keine Garantie:
supported: truebedeutet nicht, dass das Dekodieren später sicher gelingt. Hardware-Ressourcen können knapp werden, und fehlerhafte Datenströme führen trotzdem zu Fehlern imerror-Callback. - Codec-Strings müssen exakt passen: Für AAC muss z. B.
\"mp4a.40.2\"angegeben werden,\"aac\"wird nicht erkannt. Codecs wie FLAC oder Vorbis brauchen zusätzlichdescription. - Kompatibilität: Die Methode ist nur in sicheren Kontexten (HTTPS) sowie in Window- und Dedicated-Worker-Kontexten verfügbar. Unterstützt wird sie in Chromium-Browsern ab Version 94, in Firefox ab Version 130 und in Safari ab Version 26. In älteren Safari-Versionen fehlt
AudioDecoder, deshalb sollte man vorher mit'AudioDecoder' in selfprüfen, ob die API vorhanden ist. - Datenschutz: Die Ergebnisse können zum Fingerprinting genutzt werden. Browser dürfen die Antworten deshalb vereinheitlichen oder einschränken.