Start · Sprachen · JavaScript · Referenz · RTCPeerConnectionIceErrorEvent.address

RTCPeerConnectionIceErrorEvent.address

Eigenschaft

Nur lesbare Zeichenkette mit der lokalen IP-Adresse, über die beim Auftreten eines ICE-Fehlers mit dem STUN- oder TURN-Server kommuniziert wurde.

seit JavaScript Chrome 77+, Edge 79+, Firefox 139+ (teilweise), Sa Kategorie: webapi

Signatur

RTCPeerConnectionIceErrorEvent.address

Beschreibung

Die schreibgeschützte Eigenschaft address des RTCPeerConnectionIceErrorEvent gibt die lokale IP-Adresse (IPv4 oder IPv6) an, über die die RTCPeerConnection versucht hat, einen STUN- oder TURN-Server zu erreichen, als der Fehler auftrat. Zusammen mit port beschreibt sie den lokalen Endpunkt der fehlgeschlagenen Anfrage.

Das Event wird als icecandidateerror an der RTCPeerConnection ausgelöst, z. B. wenn ein TURN-Server nicht erreichbar ist, die Authentifizierung fehlschlägt (errorCode 401) oder ein Timeout eintritt (errorCode 701). address hilft bei der Diagnose, welche Netzwerkschnittstelle betroffen ist, etwa wenn ein Gerät gleichzeitig WLAN, VPN und Mobilfunk nutzt.

Ist die lokale Adresse nicht offengelegt, zum Beispiel weil der Browser aus Datenschutzgründen mDNS-Hostnamen verwendet oder die Adresse verschleiert, ist der Wert null bzw. ein anonymisierter Hostname wie xxxx.local. Deshalb sollte dein Code diesen Fall immer mit einplanen.

Rückgabewert

Typ
string | null
Beschreibung
Die lokale IP-Adresse (z. B. "192.168.1.23" oder eine IPv6-Adresse) bzw. ein mDNS-Hostname, oder null, wenn die Adresse nicht offengelegt wird.

Beispiele

ICE-Fehler mit addEventListener protokollieren

const pc = new RTCPeerConnection({
  iceServers: [
    { urls: 'turn:turn.example.com:3478', username: 'user', credential: 'falsch' }
  ]
});

pc.addEventListener('icecandidateerror', (event) => {
  const lokal = event.address ? `${event.address}:${event.port}` : 'unbekannt';
  console.warn(`ICE-Fehler ${event.errorCode} (${event.errorText}) – lokal: ${lokal}, Server: ${event.url}`);
});

pc.createDataChannel('test');
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
ICE-Fehler 401 (Unauthorized) – lokal: 192.168.1.23:54321, Server: turn:turn.example.com:3478?transport=udp

Fehler pro lokaler Schnittstelle gruppieren (on-Property)

const pc = new RTCPeerConnection({
  iceServers: [{ urls: 'stun:stun.example.org:19302' }]
});

const fehlerProAdresse = new Map();

pc.onicecandidateerror = ({ address, errorCode }) => {
  const key = address ?? '(verborgen)';
  const liste = fehlerProAdresse.get(key) ?? [];
  liste.push(errorCode);
  fehlerProAdresse.set(key, liste);
};

pc.onicegatheringstatechange = () => {
  if (pc.iceGatheringState === 'complete') {
    console.table(Object.fromEntries(fehlerProAdresse));
  }
};

pc.createDataChannel('diag');
await pc.setLocalDescription(await pc.createOffer());
Tabelle, z. B. { '10.8.0.2': [701], '192.168.1.23': [] }

Diagnose an ein Backend senden

const pc = new RTCPeerConnection({ iceServers: [{ urls: 'turn:turn.example.com', username: 'u', credential: 'p' }] });

pc.addEventListener('icecandidateerror', (e) => {
  const bericht = {
    lokaleAdresse: e.address, // kann null sein
    lokalerPort: e.port,
    server: e.url,
    code: e.errorCode,
    text: e.errorText,
    zeit: new Date().toISOString()
  };
  navigator.sendBeacon('/api/webrtc-diagnose', JSON.stringify(bericht));
});

// Wichtig · Fallstricke

  • Datenschutz: Lokale IP-Adressen können Nutzer identifizieren. Browser verschleiern sie oft per mDNS (*.local) oder liefern null. Speichere oder übertrage diese Werte nur, wenn es wirklich nötig ist, und beachte dabei die DSGVO.
  • address ist die lokale Adresse, nicht die des STUN- oder TURN-Servers. Den Server findest du in url.
  • Früher hieß die Eigenschaft in der Spezifikation hostCandidate (Adresse und Port zusammen). Ältere Chrome-Versionen kannten nur diese Form.
  • icecandidateerror-Events sind oft kein fataler Fehler: Andere Kandidaten können trotzdem eine Verbindung aufbauen. Bewerte den Verbindungszustand über iceConnectionState.
  • Browser-Unterstützung: Chromium und Safari unterstützen die Eigenschaft, bei Firefox ist die Unterstützung eingeschränkt. Prüfe das vorher, z. B. mit 'address' in RTCPeerConnectionIceErrorEvent.prototype.