Signatur
Beschreibung
Die schreibgeschützte Eigenschaft error des Interfaces MediaRecorderErrorEvent enthält ein DOMException-Objekt. Es beschreibt, warum ein MediaRecorder die Aufnahme nicht fortsetzen konnte. Über error.name erkennst du die Fehlerart, error.message liefert eine vom Browser formulierte Beschreibung.
Das Ereignis wird als error-Event direkt auf der MediaRecorder-Instanz ausgelöst. Du kannst es mit recorder.addEventListener("error", handler) oder über die Eigenschaft recorder.onerror abfangen. Nach einem solchen Fehler beendet der Recorder die Aufnahme in der Regel: Er feuert noch ein letztes dataavailable- und danach ein stop-Event.
Diese Werte für error.name sind typisch:
SecurityError: Der Stream darf aus Sicherheitsgründen nicht aufgenommen werden, etwa weil eine Spur aus einer fremden Quelle stammt (Cross-Origin).InvalidModificationError: Während der Aufnahme wurden Spuren zum Stream hinzugefügt oder daraus entfernt.NotSupportedErrorbzw.InvalidStateError: Das Format wird nicht unterstützt, oder der Recorder befindet sich im falschen Zustand.UnknownError: Ein sonstiger interner Fehler, zum Beispiel im Encoder.
Wichtig: MediaRecorderErrorEvent wurde aus der Spezifikation entfernt. Nach der aktuellen Spezifikation ist das Fehler-Event ein einfaches Event ohne die Eigenschaft error. Prüfe deshalb immer, ob event.error überhaupt vorhanden ist.
Rückgabewert
DOMException-Objekt mit den Eigenschaften name (Fehlerart, z. B. "SecurityError") und message (Beschreibung). In Browsern, die nur ein einfaches Event senden, ist der Wert undefined.Beispiele
Fehler per addEventListener abfangen
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = new MediaRecorder(stream);
recorder.addEventListener("error", (event) => {
// event.error gibt es nur in Browsern mit MediaRecorderErrorEvent
const err = event.error;
if (err) {
console.error(`Aufnahmefehler: ${err.name} – ${err.message}`);
} else {
console.error("Aufnahmefehler (keine Details verfügbar)");
}
});
recorder.start(1000);
Nach Fehlerart unterscheiden (über onerror)
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
const recorder = new MediaRecorder(stream);
recorder.onerror = (event) => {
const name = event.error?.name ?? "UnknownError";
switch (name) {
case "SecurityError":
alert("Dieser Inhalt darf aus Sicherheitsgründen nicht aufgenommen werden.");
break;
case "InvalidModificationError":
alert("Die Spuren des Streams haben sich geändert – bitte neu starten.");
break;
case "NotSupportedError":
alert("Das Aufnahmeformat wird nicht unterstützt.");
break;
default:
alert("Unbekannter Aufnahmefehler.");
}
};
recorder.start();
Fehler in ein Promise übersetzen
const recordFor = (stream, ms) => new Promise((resolve, reject) => {
const recorder = new MediaRecorder(stream);
const chunks = [];
recorder.ondataavailable = (e) => chunks.push(e.data);
recorder.onstop = () => resolve(new Blob(chunks, { type: recorder.mimeType }));
recorder.onerror = (e) => {
reject(e.error ?? new DOMException("Aufnahme fehlgeschlagen", "UnknownError"));
};
recorder.start();
setTimeout(() => recorder.state !== "inactive" && recorder.stop(), ms);
});
try {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const blob = await recordFor(stream, 3000);
console.log(`Aufnahme fertig: ${blob.size} Bytes`);
} catch (err) {
console.error(err.name, err.message);
}
// Wichtig · Fallstricke
Veraltet und kaum unterstützt: MediaRecorderErrorEvent wurde aus der Spezifikation „MediaStream Recording“ entfernt und ist praktisch nur in Firefox implementiert. Chrome, Edge und Safari senden ein einfaches Event, bei dem event.error den Wert undefined hat. Verwende daher optionale Verkettung (event.error?.name) und sieh eine Ausweichlösung vor.
- Fehler, die schon beim Aufruf auftreten, zum Beispiel
new MediaRecorder(stream, { mimeType })mit einem nicht unterstützten Format oderstart()im falschen Zustand, werden synchron als Ausnahme geworfen und nicht als Event gemeldet. Fange sie mittry…catchab und prüfe Formate vorher mitMediaRecorder.isTypeSupported(). - Nach einem Fehler-Event ist der Recorder meist im Zustand
"inactive". Rufestop()nur auf, wennrecorder.state !== "inactive"ist, sonst wird eine Ausnahme geworfen. - Die Texte in
error.messageunterscheiden sich je nach Browser. Werte in deiner Programmlogik nurerror.nameaus.