Start · Sprachen · JavaScript · Referenz · AudioDecoder.isConfigSupported()

AudioDecoder.isConfigSupported()

Methode

Prüft asynchron, ob der Browser einen <code>AudioDecoder</code> mit der angegebenen Konfiguration erstellen und konfigurieren kann.

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

Signatur

AudioDecoder.isConfigSupported(config)

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

Typ
Promise<{ supported: boolean, config: AudioDecoderConfig }>
Beschreibung
Ein Promise, das mit einem Objekt aufgelöst wird. 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');
Opus wird 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');
Gewählter Codec: opus

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);
configured

// 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 einem TypeError abgelehnt. Ist sie gültig, aber nicht unterstützt, wird es mit supported: false aufgelöst. Deshalb sollte man immer try/catch verwenden.
  • Keine Garantie: supported: true bedeutet nicht, dass das Dekodieren später sicher gelingt. Hardware-Ressourcen können knapp werden, und fehlerhafte Datenströme führen trotzdem zu Fehlern im error-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ätzlich description.
  • 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 self prü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.