Signatur
Beschreibung
Die Eigenschaft error eines RTCErrorEvent liefert ein RTCError-Objekt. Ein RTCErrorEvent wird als error-Ereignis ausgelöst, z. B. an einem RTCDataChannel (etwa bei SCTP-Abbruch oder Übertragungsfehlern) oder an einem RTCDtlsTransport (bei DTLS-Handshake- oder Fingerprint-Fehlern).
RTCError erbt von DOMException. Du bekommst also die üblichen Felder name und message und dazu WebRTC-spezifische Angaben:
errorDetail: Fehlerkategorie, z. B."data-channel-failure","dtls-failure","fingerprint-failure","sctp-failure","sdp-syntax-error","hardware-encoder-error"oder"hardware-encoder-not-available"sctpCauseCode: SCTP-Fehlercode bei"sctp-failure", sonstnullreceivedAlert/sentAlert: DTLS-Alert-Code bei"dtls-failure", sonstnullsdpLineNumber: Zeilennummer bei"sdp-syntax-error", sonstnull
Du nutzt die Eigenschaft in Fehlerbehandlern, um Verbindungsprobleme genau zu erkennen, sie zu protokollieren und gezielt zu reagieren, etwa mit einem neuen Kanal, einer ICE-Neuverhandlung (ICE-Restart) oder einer Meldung an den Nutzer.
Rückgabewert
RTCError-Objekt (Unterklasse von DOMException) mit name, message, errorDetail und den je nach Fehlerart gefüllten Feldern sctpCauseCode, receivedAlert, sentAlert und sdpLineNumber.Beispiele
Fehler eines Datenkanals mit addEventListener auswerten
const pc = new RTCPeerConnection();
const channel = pc.createDataChannel('chat');
const onChannelError = (event) => {
const err = event.error; // RTCError
console.error(`Datenkanal-Fehler: ${err.errorDetail} – ${err.message}`);
if (err.errorDetail === 'sctp-failure') {
console.error('SCTP-Cause-Code:', err.sctpCauseCode);
}
};
channel.addEventListener('error', onChannelError);
// Später, z. B. beim Aufräumen:
// channel.removeEventListener('error', onChannelError);
DTLS-Fehler über die onerror-Eigenschaft behandeln
const pc = new RTCPeerConnection();
pc.createDataChannel('init');
pc.addEventListener('connectionstatechange', () => {
const sender = pc.getSenders()[0];
const dtls = pc.sctp?.transport ?? sender?.transport;
if (!dtls || dtls.onerror) return;
dtls.onerror = (event) => {
const { errorDetail, receivedAlert, sentAlert } = event.error;
console.warn('DTLS-Problem:', errorDetail, { receivedAlert, sentAlert });
};
});
RTCErrorEvent für Tests künstlich erzeugen
const channel = new RTCPeerConnection().createDataChannel('test');
channel.onerror = (event) => {
console.log(event.error instanceof DOMException);
console.log(event.error.errorDetail, event.error.message);
};
const error = new RTCError(
{ errorDetail: 'data-channel-failure' },
'Simulierter Kanalabbruch'
);
channel.dispatchEvent(new RTCErrorEvent('error', { error }));
// Wichtig · Fallstricke
- Schreibgeschützt:
errorwird nur über den Konstruktornew RTCErrorEvent(type, { error })gesetzt. Beim Konstruktor isterrorPflicht. - Browser-Unterstützung: Chromium-Browser und Safari unterstützen
RTCErrorEventundRTCError. Firefox löst anRTCDataChannelteils nur ein generischesEventohneerror-Eigenschaft aus. Prüfe deshalb defensiv, etwa mitevent.error?.errorDetail, und verlasse dich nicht auf ein bestimmtes Verhalten. - Die Felder
sctpCauseCode,receivedAlert,sentAlertundsdpLineNumbersind nur bei passendemerrorDetailgefüllt, sonstnull. - Der Text in
messageist je nach Browser unterschiedlich und nicht standardisiert. Für Programmlogik nimmerrorDetail, nichtmessage. - Fehler aus Promise-basierten Aufrufen wie
setRemoteDescription()kommen nicht als Ereignis. Sie werden als abgelehnte Promise gemeldet, wobei einRTCErrorübergeben werden kann. Fange sie mittry/catchab.