Signatur
Beschreibung
Die schreibgeschützte Eigenschaft sdpLineNumber der Schnittstelle RTCError gibt an, in welcher Zeile einer SDP-Nachricht (Session Description Protocol) der WebRTC-Parser einen Syntaxfehler gefunden hat. Die Zählung beginnt bei 1.
Einen Wert hat die Eigenschaft nur, wenn errorDetail den Wert "sdp-syntax-error" hat. Bei allen anderen Fehlerarten (z. B. "dtls-failure", "data-channel-failure") ist sie null.
Gebraucht wird sie vor allem beim Debuggen von Signalisierung, wenn eine Anwendung SDP selbst verändert („SDP munging“, etwa um Codecs umzusortieren oder die Bitrate zu begrenzen) und die Beschreibung danach mit setLocalDescription() oder setRemoteDescription() abgelehnt wird. Über die Zeilennummer lässt sich die fehlerhafte Zeile gezielt aus dem SDP-Text heraussuchen und protokollieren.
Rückgabewert
long) mit der Zeilennummer des Syntaxfehlers, beginnend bei 1. null, wenn errorDetail nicht "sdp-syntax-error" ist.Beispiele
RTCError erzeugen und sdpLineNumber lesen
// Ein RTCError lässt sich z. B. für Tests direkt konstruieren
const err = new RTCError(
{ errorDetail: 'sdp-syntax-error', sdpLineNumber: 7 },
'Ungültige a=rtpmap-Zeile'
);
console.log(err.name); // Name des Fehlers
console.log(err.errorDetail);
console.log(err.sdpLineNumber);
// Andere Fehlerart: sdpLineNumber bleibt null
const dtlsErr = new RTCError({ errorDetail: 'dtls-failure' });
console.log(dtlsErr.sdpLineNumber);
Fehlerhafte Zeile nach SDP-Munging anzeigen
const pc = new RTCPeerConnection();
const applyRemoteSdp = async (sdpText) => {
try {
await pc.setRemoteDescription({ type: 'offer', sdp: sdpText });
} catch (err) {
if (err instanceof RTCError && err.errorDetail === 'sdp-syntax-error') {
const lines = sdpText.split(/\r?\n/);
const nr = err.sdpLineNumber; // 1-basiert
console.error(`SDP-Syntaxfehler in Zeile ${nr}: ${lines[nr - 1]}`);
} else {
// Viele Browser werfen hier stattdessen eine DOMException
console.error('Beschreibung abgelehnt:', err.name, err.message);
}
}
};
applyRemoteSdp('v=0\r\no=- 0 0 IN IP4 127.0.0.1\r\nkaputt\r\n');
Hilfsfunktion für Fehler-Logging
const describeRtcError = (err) => {
if (!(err instanceof RTCError)) return `${err.name}: ${err.message}`;
const parts = [`${err.errorDetail}: ${err.message}`];
if (err.sdpLineNumber !== null) parts.push(`SDP-Zeile ${err.sdpLineNumber}`);
return parts.join(' | ');
};
console.log(describeRtcError(
new RTCError({ errorDetail: 'sdp-syntax-error', sdpLineNumber: 12 }, 'Unbekanntes Attribut')
));
// Wichtig · Fallstricke
- Nur bei SDP-Syntaxfehlern belegt: Vor dem Zugriff immer
errorDetail === "sdp-syntax-error"prüfen, sonst bekommt mannull. - 1-basiert: Für den Zugriff auf ein per
split()erzeugtes Array muss mansdpLineNumber - 1verwenden. SDP-Zeilen enden mit\r\n, deshalb beim Aufteilen/\r?\n/nutzen. - Browser-Verhalten: Laut Spezifikation sollen SDP-Parserfehler als
RTCErrorgemeldet werden. In der Praxis lehnen viele BrowsersetRemoteDescription()/setLocalDescription()aber mit einer einfachenDOMException(OperationError/InvalidAccessError) ohne Zeilennummer ab. Deshalb eine Ausweichlösung einbauen und mitinstanceof RTCErrorprüfen. - Kompatibilität:
RTCErrorgibt es in Chromium-Browsern und in Safari. Die Unterstützung in Firefox ist lückenhaft, also vorher per Feature-Erkennung prüfen (typeof RTCError !== "undefined"). - Die Eigenschaft ist schreibgeschützt. Werte lassen sich nur über das Init-Objekt des Konstruktors setzen.