Start · Sprachen · JavaScript · Referenz · new RTCIceCandidate()

new RTCIceCandidate()

Methode

Erstellt ein neues <code>RTCIceCandidate</code>-Objekt, das einen einzelnen ICE-Kandidaten (möglicher Netzwerkpfad) für eine WebRTC-Verbindung beschreibt.

seit JavaScript Baseline: alle modernen Browser (WebRTC 1.0) Kategorie: webapi

Signatur

new RTCIceCandidate(candidateInfo)

Beschreibung

Der Konstruktor RTCIceCandidate() erzeugt ein Objekt, das einen einzelnen ICE-Kandidaten beschreibt. Ein solcher Kandidat ist eine mögliche Kombination aus IP-Adresse, Port und Transportprotokoll, über die zwei Teilnehmer einer RTCPeerConnection Daten austauschen können. Mögliche Typen sind lokale Adressen (host), per STUN ermittelte öffentliche Adressen (srflx/prflx) und TURN-Relay-Adressen (relay).

In der Praxis braucht man den Konstruktor vor allem auf der Empfängerseite des Signalisierungskanals: Der entfernte Teilnehmer sendet seinen Kandidaten (meist als JSON aus candidate.toJSON()) z. B. per WebSocket. Man baut daraus mit new RTCIceCandidate(daten) wieder ein Objekt und übergibt es an RTCPeerConnection.addIceCandidate().

Die schreibgeschützten Eigenschaften wie address, port, protocol, type oder foundation werden aus dem SDP-String im Feld candidate geparst. Mindestens sdpMid oder sdpMLineIndex muss angegeben werden, damit der Kandidat einer Medienzeile zugeordnet werden kann.

Parameter

Name Typ Default Beschreibung
$candidateInfo RTCIceCandidateInit {} Initialisierungsobjekt mit den Feldern candidate (SDP-Attributzeile, z. B. "candidate:842163049 1 udp 1677729535 203.0.113.5 52301 typ srflx ..."; leerer String = Ende der Kandidaten), sdpMid (string|null, ID der Medienbeschreibung), sdpMLineIndex (number|null, Index der m-Zeile im SDP) und usernameFragment (string|null, ICE-ufrag).

Rückgabewert

Typ
RTCIceCandidate
Beschreibung
Ein neues RTCIceCandidate-Objekt, dessen Eigenschaften (address, port, type, protocol usw.) aus dem übergebenen candidate-String abgeleitet sind.

Beispiele

Kandidat aus Signalisierungsnachricht hinzufügen

const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] });
const socket = new WebSocket('wss://signal.example.com');

socket.addEventListener('message', async (event) => {
  const msg = JSON.parse(event.data);
  if (msg.type === 'ice-candidate') {
    try {
      const candidate = new RTCIceCandidate(msg.candidate);
      await pc.addIceCandidate(candidate);
      console.log('Kandidat hinzugefügt:', candidate.type, candidate.address);
    } catch (err) {
      console.error('Kandidat ungültig:', err);
    }
  }
});
Kandidat hinzugefügt: srflx 203.0.113.5

Lokale Kandidaten serialisieren und senden

const pc = new RTCPeerConnection();
const socket = new WebSocket('wss://signal.example.com');

pc.addEventListener('icecandidate', ({ candidate }) => {
  // candidate === null signalisiert das Ende der Sammlung
  socket.send(JSON.stringify({
    type: 'ice-candidate',
    candidate: candidate ? candidate.toJSON() : null
  }));
});

Kandidat manuell erzeugen und untersuchen

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

console.log(cand.protocol, cand.port, cand.type, cand.component);
console.log(JSON.stringify(cand.toJSON()));
udp 52301 srflx rtp {"candidate":"candidate:842163049 1 udp ...","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"abcd"}

// Wichtig · Fallstricke

  • Sind sowohl sdpMid als auch sdpMLineIndex null bzw. nicht angegeben, wirft der Konstruktor einen TypeError.
  • Seit WebRTC 1.0 akzeptiert addIceCandidate() auch direkt ein einfaches RTCIceCandidateInit-Objekt – der explizite Konstruktoraufruf ist daher oft optional, macht den Code aber lesbarer.
  • Kandidaten, die vor setRemoteDescription() ankommen, führen zu einem Fehler bei addIceCandidate(); puffern Sie diese bis zum Setzen der Remote-Beschreibung.
  • Ein leerer candidate-String steht für „End of Candidates“. Ältere Implementierungen verhalten sich dabei unterschiedlich.
  • Datenschutz: host-Kandidaten können lokale IP-Adressen verraten. Moderne Browser verschleiern sie daher mit mDNS-Namen (*.local). Ältere Browser (alter Edge, Safari < 11) haben den Konstruktor nur teilweise oder mit Präfix unterstützt.
  • Signalisierungsdaten sollten Sie vor dem Parsen prüfen und nur über verschlüsselte Kanäle (wss://) übertragen.