Start · Sprachen · JavaScript · Referenz · MediaRecorderErrorEvent

MediaRecorderErrorEvent

Schnittstelle

Beschreibt ein <code>error</code>-Ereignis eines <code>MediaRecorder</code>. Die Eigenschaft <code>error</code> enthält die auslösende <code>DOMException</code>.

seit JavaScript Veraltet, nicht standardisiert – nur Firefox unter deprecated seit ja Kategorie: webapi

Signatur

interface MediaRecorderErrorEvent extends Event

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

Typ
MediaRecorderErrorEvent
Beschreibung
Der Konstruktor gibt ein neues Ereignisobjekt zurück. Im Handler bekommen Sie das Objekt als Argument übergeben.

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();
Aufnahmefehler: SecurityError – ... (nur wenn ein Fehler auftritt)

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');
}
error UnknownError Test-Fehler // Firefox MediaRecorderErrorEvent wird nicht unterstützt // Chrome/Safari

// 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 Event ohne die Eigenschaft error aus. Prüfen Sie deshalb immer mit event.error?.name und nicht mit instanceof MediaRecorderErrorEvent.
  • Viele Fehler löst der Browser nicht als Ereignis aus, sondern als Ausnahme direkt beim Aufruf. Beispiele: start() in falschem Zustand erzeugt einen InvalidStateError, ein nicht unterstützter mimeType im Konstruktor einen NotSupportedError. Umschließen Sie diese Aufrufe mit try/catch und prüfen Sie vorab mit MediaRecorder.isTypeSupported().
  • Nach einem Fehler hält der Browser die Aufnahme in der Regel an. Stoppen Sie die Spuren des MediaStream selbst, damit Kamera oder Mikrofon freigegeben werden.
  • Ein SecurityError tritt zum Beispiel auf, wenn sich während der Aufnahme die Herkunft (Origin) des Streams ändert oder der Stream als nicht aufzeichenbar gilt.