Signatur
Beschreibung
MediaRecorderErrorEvent ist der Ereignistyp, den ein MediaRecorder auslöst, wenn bei einer Aufnahme über die MediaStream Recording API ein Fehler auftritt. Die Schnittstelle erbt von Event. Zusätzlich hat sie die schreibgeschützte Eigenschaft error: Dort steht eine DOMException mit dem konkreten Fehler, zum Beispiel mit dem Namen InvalidStateError, SecurityError, NotSupportedError, EncodingError oder UnknownError.
Sie empfangen das Ereignis auf zwei Wegen: mit recorder.addEventListener("error", handler) oder über die Eigenschaft recorder.onerror. Nach einem Fehler beendet der Browser die Aufnahme meist. Danach folgen in der Regel noch ein dataavailable-Ereignis mit den bis dahin aufgenommenen Daten und ein stop-Ereignis.
Wichtig: Die Schnittstelle wurde aus der W3C-Spezifikation entfernt. Heute sieht der Standard ein einfaches Event ohne die Eigenschaft error vor. Chromium- und WebKit-Browser liefern deshalb ein normales Event. Nur Firefox stellt noch MediaRecorderErrorEvent bereit. Schreiben Sie Fehlerbehandlung deshalb immer defensiv, zum Beispiel mit event.error?.name.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Nur beim Konstruktor new MediaRecorderErrorEvent(type, init): Name des Ereignisses, in der Praxis immer "error". |
|
| $init Pflicht | { error: DOMException, bubbles?: boolean, cancelable?: boolean, composed?: boolean } | Nur beim Konstruktor: Initialisierungsobjekt. error ist Pflicht und enthält die DOMException. Die übrigen Felder stammen aus EventInit. |
|
| $error | DOMException | Schreibgeschützte Instanz-Eigenschaft: der aufgetretene Fehler. Wichtige Felder sind name und message. |
Rückgabewert
Beispiele
Fehler mit addEventListener abfangen (browserübergreifend)
const startRecording = async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = new MediaRecorder(stream);
const chunks = [];
recorder.addEventListener('dataavailable', (e) => chunks.push(e.data));
recorder.addEventListener('error', (event) => {
// Firefox: MediaRecorderErrorEvent mit event.error
// Chromium/Safari: einfaches Event ohne error
const name = event.error?.name ?? 'UnbekannterFehler';
const message = event.error?.message ?? 'Keine Details verfügbar';
console.error(`Aufnahmefehler: ${name} – ${message}`);
stream.getTracks().forEach((t) => t.stop());
});
recorder.start(1000);
return recorder;
};
startRecording();
Handler über die Eigenschaft onerror setzen und wieder entfernen
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const recorder = new MediaRecorder(stream, { mimeType: 'video/webm' });
recorder.onerror = (event) => {
if (event.error instanceof DOMException) {
switch (event.error.name) {
case 'SecurityError':
console.warn('Aufnahme aus Sicherheitsgründen abgebrochen.');
break;
case 'EncodingError':
console.warn('Kodierung fehlgeschlagen.');
break;
default:
console.warn('Fehler:', event.error.name);
}
} else {
console.warn('Allgemeiner MediaRecorder-Fehler');
}
};
recorder.start();
// Später: Handler wieder entfernen
recorder.onerror = null;
Ereignis manuell erzeugen (z. B. für Tests)
if ('MediaRecorderErrorEvent' in window) {
const evt = new MediaRecorderErrorEvent('error', {
error: new DOMException('Test-Fehler', 'UnknownError')
});
console.log(evt.type, evt.error.name, evt.error.message);
} else {
console.log('MediaRecorderErrorEvent wird nicht unterstützt');
}
// Wichtig · Fallstricke
- Veraltet und nicht standardisiert: Die Schnittstelle ist nicht mehr Teil der Spezifikation. Nur Firefox stellt sie bereit. Chromium und Safari lösen ein einfaches
Eventohne die Eigenschafterroraus. Prüfen Sie deshalb immer mitevent.error?.nameund nicht mitinstanceof MediaRecorderErrorEvent. - Viele Fehler löst der Browser nicht als Ereignis aus, sondern als Ausnahme direkt beim Aufruf. Beispiele:
start()in falschem Zustand erzeugt einenInvalidStateError, ein nicht unterstütztermimeTypeim Konstruktor einenNotSupportedError. Umschließen Sie diese Aufrufe mittry/catchund prüfen Sie vorab mitMediaRecorder.isTypeSupported(). - Nach einem Fehler hält der Browser die Aufnahme in der Regel an. Stoppen Sie die Spuren des
MediaStreamselbst, damit Kamera oder Mikrofon freigegeben werden. - Ein
SecurityErrortritt zum Beispiel auf, wenn sich während der Aufnahme die Herkunft (Origin) des Streams ändert oder der Stream als nicht aufzeichenbar gilt.