Start · Sprachen · JavaScript · Referenz · RTCIceCandidateStats.id

RTCIceCandidateStats.id

Eigenschaft

String, der das ICE-Kandidaten-Objekt, zu dem diese Statistik gehört, innerhalb eines <code>RTCStatsReport</code> eindeutig identifiziert.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC-St Kategorie: webapi

Signatur

RTCIceCandidateStats.id

Beschreibung

Die schreibgeschützte Eigenschaft id eines RTCIceCandidateStats-Objekts enthält einen String, der den überwachten ICE-Kandidaten eindeutig identifiziert. Dieses Objekt ist entweder ein lokaler Kandidat (type: "local-candidate") oder ein entfernter Kandidat (type: "remote-candidate"). Die Kennung ist gleichzeitig der Schlüssel, unter dem der Eintrag in der Map-ähnlichen Struktur RTCStatsReport abgelegt ist.

Wichtig ist die id vor allem, um Statistik-Einträge miteinander zu verknüpfen. Ein RTCIceCandidatePairStats-Eintrag verweist über localCandidateId und remoteCandidateId auf genau diese IDs. So findest du heraus, über welche Kandidaten, also über welche IP-Adressen, Ports und Protokolle, eine Verbindung tatsächlich läuft.

Die ID bleibt über mehrere Aufrufe von getStats() hinweg gleich, solange es dasselbe zugrunde liegende Objekt gibt. Deshalb kannst du mit ihr Messwerte über die Zeit vergleichen, zum Beispiel um Veränderungen zu erkennen. Wie die ID aufgebaut ist, legt der Browser selbst fest. Sie ist ein undurchsichtiger Wert (opaque) und sollte nicht ausgewertet werden.

Rückgabewert

Typ
string
Beschreibung
Eindeutige, vom Browser vergebene Kennung des ICE-Kandidaten innerhalb des Statistikberichts. Sie entspricht dem Schlüssel im RTCStatsReport.

Beispiele

IDs aller lokalen und entfernten Kandidaten auflisten

const pc = new RTCPeerConnection();
pc.createDataChannel('probe');
await pc.setLocalDescription(await pc.createOffer());

// Kurz warten, damit ICE-Kandidaten gesammelt werden
await new Promise((r) => setTimeout(r, 1000));

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'local-candidate' || stats.type === 'remote-candidate') {
    console.log(stats.type, stats.id, stats.candidateType, stats.protocol);
  }
});
local-candidate I1a2b3c4d host udp local-candidate I5e6f7a8b srflx udp

Aktiv genutztes Kandidatenpaar über die IDs auflösen

const getActiveCandidates = async (pc) => {
  const report = await pc.getStats();
  let pair;
  report.forEach((s) => {
    if (s.type === 'candidate-pair' && s.nominated && s.state === 'succeeded') {
      pair = s;
    }
  });
  if (!pair) return null;

  // id dient als Schlüssel im RTCStatsReport
  const local = report.get(pair.localCandidateId);
  const remote = report.get(pair.remoteCandidateId);
  return {
    local: `${local.id}: ${local.address}:${local.port} (${local.candidateType})`,
    remote: `${remote.id}: ${remote.address}:${remote.port} (${remote.candidateType})`
  };
};

console.log(await getActiveCandidates(pc));
{ local: 'I5e6f7a8b: 203.0.113.5:54321 (srflx)', remote: 'Ic9d0e1f2: 198.51.100.7:3478 (relay)' }

Neu hinzugekommene Kandidaten über die ID erkennen

const seen = new Set();

const pollCandidates = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type.endsWith('-candidate') && !seen.has(stats.id)) {
      seen.add(stats.id);
      console.log('Neuer Kandidat:', stats.id, stats.candidateType);
    }
  }
};

const timer = setInterval(() => pollCandidates(pc), 2000);
// später: clearInterval(timer);
Neuer Kandidat: I1a2b3c4d host

// Wichtig · Fallstricke

  • Das Format der ID ist browserspezifisch. Chrome liefert zum Beispiel Werte wie I+Zufallszeichen, Firefox eigene Kurzkennungen. Werte die ID nie aus. Nutze sie nur zum Vergleichen und Nachschlagen per report.get(id).
  • Die ID ist nur innerhalb derselben RTCPeerConnection eindeutig. Zwischen verschiedenen Verbindungen oder nach einem ICE-Neustart können sich IDs ändern oder neu vergeben werden.
  • Die Eigenschaft id stammt aus dem Basis-Wörterbuch RTCStats und ist in jedem Statistik-Eintrag vorhanden, nicht nur bei ICE-Kandidaten.
  • Datenschutz: Die zugehörigen Kandidaten-Einträge können IP-Adressen enthalten. Browser verschleiern lokale Adressen teilweise über mDNS (*.local). Gib Statistikberichte nicht ungefiltert an Dritte weiter.
  • Kompatibilität: Alle modernen Browser unterstützen die Eigenschaft. Ältere Implementierungen mit Callback-basiertem getStats() (altes Chrome) lieferten ein abweichendes Format.