Signatur
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
"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);
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);
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);
// 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 Zugriffundefined, 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 einzelnerdataavailable-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 neuenMediaRecordererzeugen. - 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.