Start · Sprachen · JavaScript · Referenz · MediaRecorderErrorEvent.error

MediaRecorderErrorEvent.error

Eigenschaft

Nur lesbare Eigenschaft mit einer <code>DOMException</code>, die den Fehler beschreibt, den ein <code>MediaRecorder</code> während der Aufnahme gemeldet hat.

seit JavaScript Veraltet/nicht standardisiert: nur Firefox (ab Ver deprecated seit ja Kategorie: webapi

Signatur

MediaRecorderErrorEvent.error

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.
  • NotSupportedError bzw. 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

Typ
DOMException
Beschreibung
Ein 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);
Aufnahmefehler: InvalidModificationError – The set of MediaStreamTracks changed ...

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);
}
Aufnahme fertig: 48213 Bytes

// 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 oder start() im falschen Zustand, werden synchron als Ausnahme geworfen und nicht als Event gemeldet. Fange sie mit try…catch ab und prüfe Formate vorher mit MediaRecorder.isTypeSupported().
  • Nach einem Fehler-Event ist der Recorder meist im Zustand "inactive". Rufe stop() nur auf, wenn recorder.state !== "inactive" ist, sonst wird eine Ausnahme geworfen.
  • Die Texte in error.message unterscheiden sich je nach Browser. Werte in deiner Programmlogik nur error.name aus.