Start · Sprachen · JavaScript · Referenz · RTCIceCandidatePairStats.remoteCandidateId

RTCIceCandidatePairStats.remoteCandidateId

Eigenschaft

Enthält die <code>id</code> des <code>RTCIceCandidateStats</code>-Objekts, das den entfernten ICE-Kandidaten dieses Kandidatenpaars beschreibt.

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

Signatur

RTCIceCandidatePairStats.remoteCandidateId

Beschreibung

Die schreibgeschützte Eigenschaft remoteCandidateId eines RTCIceCandidatePairStats-Eintrags (Typ "candidate-pair") ist ein String. Er verweist auf den Statistik-Eintrag vom Typ "remote-candidate" im selben RTCStatsReport. Dieser Eintrag beschreibt den ICE-Kandidaten der Gegenseite, der zu diesem Paar gehört.

Brauchen Sie Details zur entfernten Seite der Verbindung, etwa IP-Adresse, Port, Protokoll oder den Kandidatentyp (host, srflx, prflx, relay), schlagen Sie mit diesem Wert im Report nach: report.get(pair.remoteCandidateId). Zusammen mit localCandidateId lässt sich so feststellen, ob eine Verbindung direkt (Peer-to-Peer) läuft oder über einen TURN-Server weitergeleitet wird.

Häufig wird das gerade aktive Paar gesucht. Dafür nehmen Sie entweder selectedCandidatePairId aus dem "transport"-Eintrag oder filtern nach Paaren mit state === "succeeded" und nominated === true.

Rückgabewert

Typ
string
Beschreibung
Die id des zugehörigen RTCIceCandidateStats-Eintrags (Typ "remote-candidate") im selben RTCStatsReport.

Beispiele

Entfernten Kandidaten des aktiven Paars ermitteln

const getRemoteCandidate = async (pc) => {
  const report = await pc.getStats();
  let transport;
  report.forEach((s) => { if (s.type === 'transport') transport = s; });
  const pair = report.get(transport?.selectedCandidatePairId);
  if (!pair) return null;
  const remote = report.get(pair.remoteCandidateId);
  console.log(`Gegenseite: ${remote.address}:${remote.port} (${remote.candidateType}, ${remote.protocol})`);
  return remote;
};

// pc ist eine verbundene RTCPeerConnection
await getRemoteCandidate(pc);
Gegenseite: 203.0.113.7:54321 (srflx, udp)

Prüfen, ob die Verbindung über TURN läuft

const isRelayed = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'candidate-pair' && stats.nominated && stats.state === 'succeeded') {
      const local = report.get(stats.localCandidateId);
      const remote = report.get(stats.remoteCandidateId);
      return local?.candidateType === 'relay' || remote?.candidateType === 'relay';
    }
  }
  return false;
};

console.log('TURN aktiv:', await isRelayed(pc));
TURN aktiv: false

Alle Kandidatenpaare tabellarisch ausgeben

const report = await pc.getStats();
const rows = [...report.values()]
  .filter((s) => s.type === 'candidate-pair')
  .map((p) => ({
    state: p.state,
    local: p.localCandidateId,
    remote: p.remoteCandidateId,
    remoteAddr: report.get(p.remoteCandidateId)?.address ?? '–',
    rttMs: p.currentRoundTripTime ? Math.round(p.currentRoundTripTime * 1000) : null
  }));
console.table(rows);
Tabelle mit Zustand, IDs, entfernter Adresse und RTT je Paar

// Wichtig · Fallstricke

  • Die ID gilt nur innerhalb desselben RTCStatsReport. Speichern Sie keine IDs, um sie mit späteren Reports abzugleichen. Die Werte sind vom Browser festgelegt und nicht garantiert stabil.
  • report.get() kann undefined liefern, etwa wenn der Kandidat inzwischen entfernt wurde. Prüfen Sie das Ergebnis deshalb immer, z. B. mit optionaler Verkettung ?..
  • Die Felder address und ip des entfernten Kandidaten können aus Datenschutzgründen fehlen oder durch mDNS-Namen (*.local) ersetzt sein.
  • Firefox hat das Feld selectedCandidatePairId im Transport-Eintrag lange nicht unterstützt. Als browserübergreifende Alternative filtern Sie nach nominated und state === "succeeded". Ältere Chrome-Versionen hatten eine Sonderform (selected).
  • Die Statistik-API funktioniert nur in sicheren Kontexten (HTTPS) mit einer aktiven RTCPeerConnection.