Signatur
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
"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);
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());
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 liefernnull. Speichere oder übertrage diese Werte nur, wenn es wirklich nötig ist, und beachte dabei die DSGVO. addressist die lokale Adresse, nicht die des STUN- oder TURN-Servers. Den Server findest du inurl.- 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 übericeConnectionState.- 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.