Start · Sprachen · JavaScript · Referenz · RTCIceCandidate.foundation

RTCIceCandidate.foundation

Eigenschaft

Schreibgeschützte Zeichenkette, die Kandidaten mit gleichem Ursprung (Typ, Basisadresse, Protokoll, STUN/TURN-Server) über mehrere <code>RTCIceTransport</code>-Objekte hinweg kennzeichnet.

seit JavaScript Baseline: Chrome 74+, Edge 79+, Safari 11+, Firefo Kategorie: webapi

Signatur

RTCIceCandidate.foundation

Beschreibung

Die Eigenschaft foundation eines RTCIceCandidate liefert eine Kennung, die für alle Kandidaten gleich ist, die denselben Typ haben, von derselben Basis-IP-Adresse (Host-Interface) stammen, dasselbe Transportprotokoll verwenden und über denselben STUN- bzw. TURN-Server ermittelt wurden. Sie entspricht dem ersten Feld des a=candidate:-Attributs im SDP (z. B. candidate:842163049 1 udp …, dort ist 842163049 die Foundation).

Der ICE-Agent nutzt die Foundation intern für den Frozen-Algorithmus: Kandidatenpaare mit gleicher Foundation werden bei Verbindungsprüfungen gemeinsam behandelt, damit ein erfolgreicher Pfad nicht für jede Komponente oder jeden Media-Stream erneut getestet werden muss. Für Anwendungscode ist der Wert vor allem zur Diagnose und Gruppierung nützlich – etwa um zu erkennen, welche RTP- und RTCP-Kandidaten (Komponente 1 und 2) oder welche Kandidaten verschiedener Transporte auf demselben Netzwerkpfad beruhen.

Der Wert ist eine undurchsichtige Zeichenkette (maximal 32 Zeichen laut ICE-Spezifikation); man sollte nur auf Gleichheit vergleichen und keine Bedeutung aus dem Inhalt ableiten. Wurde der Kandidat aus einer Zeichenkette erzeugt, die sich nicht parsen lässt, ist der Wert null.

Rückgabewert

Typ
string | null
Beschreibung
Die Foundation-Kennung des Kandidaten als Zeichenkette, oder null, wenn sie nicht aus der Kandidaten-Beschreibung ermittelt werden konnte.

Beispiele

Foundation eines manuell erzeugten Kandidaten auslesen

const candidate = new RTCIceCandidate({
  candidate: 'candidate:842163049 1 udp 1677729535 203.0.113.5 46154 typ srflx raddr 192.168.1.10 rport 46154',
  sdpMid: '0',
  sdpMLineIndex: 0
});

console.log(candidate.foundation);
console.log(candidate.type, candidate.protocol);
842163049 srflx udp

Lokale Kandidaten nach Foundation gruppieren

const pc = new RTCPeerConnection({
  iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});
const gruppen = new Map();

pc.addEventListener('icecandidate', ({ candidate }) => {
  if (!candidate) {
    // Sammeln abgeschlossen
    for (const [foundation, liste] of gruppen) {
      console.log(foundation, liste.map(c => `${c.type}/${c.component}`));
    }
    return;
  }
  const key = candidate.foundation ?? 'unbekannt';
  if (!gruppen.has(key)) gruppen.set(key, []);
  gruppen.get(key).push(candidate);
});

pc.createDataChannel('test');
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
z. B. 2395300328 ["host/rtp"] 842163049 ["srflx/rtp"]

Prüfen, ob zwei Kandidaten denselben Netzwerkpfad nutzen

const gleicherPfad = (a, b) =>
  a.foundation !== null && a.foundation === b.foundation;

const rtp = new RTCIceCandidate({
  candidate: 'candidate:1 1 udp 2122260223 192.168.1.10 50000 typ host',
  sdpMid: '0'
});
const rtcp = new RTCIceCandidate({
  candidate: 'candidate:1 2 udp 2122260222 192.168.1.10 50001 typ host',
  sdpMid: '0'
});

console.log(gleicherPfad(rtp, rtcp));
true

// Wichtig · Fallstricke

  • Nur Gleichheitsvergleich: Die Foundation ist eine undurchsichtige Kennung. Keine Annahmen über Format, Länge oder numerischen Inhalt treffen – verschiedene Browser erzeugen unterschiedliche Werte.
  • Kein globaler Bezeichner: Gleiche Foundations bei lokalem und entferntem Kandidaten haben keine Bedeutung; sinnvoll ist der Vergleich nur innerhalb derselben Seite (lokal bzw. remote).
  • null möglich: Bei leeren Kandidaten (Ende-des-Sammelns-Signal mit candidate: '') oder unparsbaren Strings ist der Wert null.
  • Schreibgeschützt: Eine Zuweisung wird ignoriert (im Strict Mode TypeError). Ändern lässt sich die Foundation nur, indem ein neuer Kandidat mit anderem candidate-String erzeugt wird.
  • Kompatibilität: Chromium-Browser und Safari unterstützen die Eigenschaft vollständig; ältere Firefox-Versionen lieferten die geparsten Einzelfelder (foundation, type usw.) nicht, dort musste der candidate-String manuell geparst werden.
  • Datenschutz: Kandidaten können lokale IP-Adressen offenlegen; moderne Browser verschleiern Host-Adressen per mDNS (.local). Kandidatendaten nicht unnötig protokollieren oder an Dritte senden.