Start · Sprachen · JavaScript · Referenz · MediaRecorder.audioBitrateMode

MediaRecorder.audioBitrateMode

Eigenschaft

Schreibgeschützte Eigenschaft, die den Bitratenmodus der Audiokodierung eines <code>MediaRecorder</code> liefert: <code>"constant"</code> oder <code>"variable"</code>.

seit JavaScript Nicht Baseline: nur in neueren Browserversionen ve Kategorie: webapi

Signatur

MediaRecorder.audioBitrateMode

Beschreibung

Die schreibgeschützte Eigenschaft audioBitrateMode des MediaRecorder-Interfaces gibt an, mit welchem Bitratenmodus der Recorder Audiospuren kodiert. Möglich sind "constant" (konstante Bitrate, CBR) und "variable" (variable Bitrate, VBR).

Festgelegt wird der Wert nur beim Erzeugen über die Option audioBitrateMode im Konstruktor new MediaRecorder(stream, options). Gibst du die Option nicht an, gilt "variable". Nachträglich ändern lässt sich der Modus nicht, denn die Eigenschaft hat keinen Setter.

Wann welcher Modus?

  • Konstante Bitrate ("constant"): Datenrate und Dateigröße lassen sich gut vorhersagen. Das hilft beim Live-Streaming, bei knapper Bandbreite und wenn Sprachpausen nicht an einer schwankenden Datenmenge erkennbar sein sollen (Datenschutz bei verschlüsselter Sprachübertragung).
  • Variable Bitrate ("variable"): Bei gleicher Durchschnittsbitrate ist die Qualität meist besser, und stille Passagen brauchen weniger Speicher. Das eignet sich gut für Aufnahmen, die man speichert und später abspielt.

Mit der Eigenschaft prüfst du, welchen Modus der Recorder tatsächlich verwendet, etwa zur Protokollierung oder um eine Upload-Strategie zu wählen.

Rückgabewert

Typ
"constant" | "variable"
Beschreibung
Der Bitratenmodus der Audiokodierung als String. Standard ist "variable", wenn im Konstruktor nichts anderes angegeben wurde.

Beispiele

Recorder mit konstanter Bitrate erzeugen und Modus auslesen

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });

const recorder = new MediaRecorder(stream, {
  mimeType: 'audio/webm;codecs=opus',
  audioBitsPerSecond: 64000,
  audioBitrateMode: 'constant'
});

console.log(recorder.audioBitrateMode);
constant

Standardwert ohne Option

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = new MediaRecorder(stream);

console.log(recorder.audioBitrateMode);

// Nur lesbar: Die Zuweisung wird ignoriert (im Strict Mode TypeError)
try {
  recorder.audioBitrateMode = 'constant';
} catch (err) {
  console.warn('Nicht änderbar:', err.message);
}
console.log(recorder.audioBitrateMode);
variable variable

Unterstützung prüfen und Sprachaufnahme in Blöcken hochladen

const supportsBitrateMode = 'audioBitrateMode' in MediaRecorder.prototype;

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const options = { mimeType: 'audio/webm;codecs=opus', audioBitsPerSecond: 32000 };
if (supportsBitrateMode) options.audioBitrateMode = 'constant';

const recorder = new MediaRecorder(stream, options);
console.log('Modus:', recorder.audioBitrateMode ?? 'unbekannt (nicht unterstützt)');

recorder.addEventListener('dataavailable', async ({ data }) => {
  if (data.size === 0) return;
  // Bei CBR haben die Blöcke eine annähernd gleiche Größe
  await fetch('/api/upload-chunk', { method: 'POST', body: data });
});

recorder.start(1000); // alle 1000 ms einen Block
setTimeout(() => recorder.stop(), 5000);
Modus: constant

// Wichtig · Fallstricke

  • Browserunterstützung: Die Eigenschaft ist nicht Baseline und fehlt in älteren Browsern (vor allem Safari). Prüfe sie per Feature Detection mit 'audioBitrateMode' in MediaRecorder.prototype. Ohne Unterstützung liefert der Zugriff undefined, und die Konstruktor-Option wird stillschweigend ignoriert.
  • Nur ein Wunsch: Der Wert gibt den angeforderten Modus wieder. Ob der Encoder wirklich streng konstant kodiert, hängt vom Codec ab (Opus unterstützt CBR gut) und vom Browser. Auch bei "constant" können Container-Overhead und Blockgrenzen die Größe einzelner dataavailable-Blöcke leicht schwanken lassen.
  • Schreibgeschützt: Eine Zuweisung hat keine Wirkung und wirft im Strict Mode (z. B. in ES-Modulen) einen TypeError. Für einen anderen Modus musst du einen neuen MediaRecorder erzeugen.
  • Der Modus betrifft nur Audiospuren. Die Videobitrate steuerst du mit videoBitsPerSecond.
  • Für den Mikrofonzugriff über getUserMedia() braucht es einen sicheren Kontext (HTTPS) und die Zustimmung der Nutzerin oder des Nutzers.