Start · Sprachen · JavaScript · Referenz · RTCDtlsTransport.iceTransport

RTCDtlsTransport.iceTransport

Eigenschaft

Schreibgeschützte Referenz auf den <code>RTCIceTransport</code>, über den ein <code>RTCDtlsTransport</code> seine verschlüsselten Pakete sendet und empfängt.

seit JavaScript Baseline: alle modernen Browser (seit 2023) Kategorie: webapi

Signatur

RTCDtlsTransport.iceTransport

Beschreibung

Die Eigenschaft iceTransport eines RTCDtlsTransport gibt das RTCIceTransport-Objekt zurück, das unter der DTLS-Schicht liegt. DTLS sorgt für die Verschlüsselung (Schlüsselaustausch für SRTP und SCTP). ICE übernimmt den Verbindungsaufbau über Kandidatenpaare, also Host-, STUN- oder TURN-Verbindungen.

So kommst du an Laufzeitinformationen zur Netzwerkverbindung einer RTCPeerConnection: den ICE-Zustand (state), den Stand der Kandidatensammlung (gatheringState), die Rolle (role) und das aktuell gewählte Kandidatenpaar (getSelectedCandidatePair()). Das ist nützlich für Diagnosen, Verbindungsanzeigen oder Logik zum Umschalten zwischen Netzen.

An den RTCDtlsTransport selbst kommst du meist über RTCRtpSender.transport, RTCRtpReceiver.transport oder RTCSctpTransport.transport (bei Datenkanälen über pc.sctp). Mit Bundling (Standard: bundlePolicy: "max-bundle") teilen sich meist alle Sender und Empfänger denselben DTLS- und ICE-Transport.

Rückgabewert

Typ
RTCIceTransport
Beschreibung
Das RTCIceTransport-Objekt, das dieser DTLS-Transport nutzt. Die Eigenschaft ist schreibgeschützt, und die Referenz ändert sich während der Lebensdauer des Transports nicht.

Beispiele

ICE-Zustand über den Sender abfragen

const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] });
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const sender = pc.addTrack(stream.getAudioTracks()[0], stream);

// transport ist erst nach setLocalDescription/setRemoteDescription gesetzt
await pc.setLocalDescription(await pc.createOffer());

const ice = sender.transport?.iceTransport;
console.log('ICE-Rolle:', ice?.role);
console.log('Sammelstatus:', ice?.gatheringState);
ICE-Rolle: controlling Sammelstatus: gathering

Wechsel des Kandidatenpaars überwachen

const watchIce = (dtlsTransport) => {
  const ice = dtlsTransport.iceTransport;

  ice.addEventListener('statechange', () => {
    console.log('ICE-Zustand:', ice.state);
  });

  ice.onselectedcandidatepairchange = () => {
    const pair = ice.getSelectedCandidatePair();
    if (pair) {
      console.log(`Lokal: ${pair.local.type} ${pair.local.address}`);
      console.log(`Entfernt: ${pair.remote.type} ${pair.remote.address}`);
    }
  };
};

// z. B. nach erfolgreicher Verhandlung
const [sender] = pc.getSenders();
if (sender?.transport) watchIce(sender.transport);
ICE-Zustand: checking ICE-Zustand: connected Lokal: host 192.168.0.12 Entfernt: srflx 203.0.113.7

ICE-Transport eines Datenkanals ermitteln

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

// Datenkanäle laufen über SCTP -> DTLS -> ICE
const ice = pc.sctp?.transport.iceTransport;
console.log(ice instanceof RTCIceTransport);
true

// Wichtig · Fallstricke

  • Erst nach der Verhandlung verfügbar: RTCRtpSender.transport und pc.sctp sind null, bis eine lokale oder entfernte Beschreibung gesetzt wurde. Arbeite deshalb mit optionaler Verkettung (?.).
  • Bundling: Mit max-bundle teilen sich alle Medien einen Transport. Wenn du Event-Listener auf jedem Sender registrierst, reagierst du also mehrfach auf dasselbe Objekt.
  • Nicht mit pc.iceConnectionState verwechseln: Dieser Wert fasst alle ICE-Transporte zusammen, während iceTransport.state nur einen einzelnen Transport betrifft.
  • Kompatibilität: RTCDtlsTransport und RTCIceTransport werden von Chrome, Edge und Safari schon länger unterstützt, von Firefox erst seit Version 122 vollständig. Ältere Browser liefern bei sender.transport eventuell undefined. Für robuste Diagnosen eignet sich zusätzlich pc.getStats().
  • Datenschutz: getSelectedCandidatePair() kann lokale und öffentliche IP-Adressen verraten. Gib sie nicht ungefiltert an Dritte weiter oder in Protokolle aus.