Start · Sprachen · JavaScript · Referenz · RTCPeerConnection.getConfiguration()

RTCPeerConnection.getConfiguration()

Methode

Gibt ein <code>RTCConfiguration</code>-Objekt mit der aktuellen Konfiguration der <code>RTCPeerConnection</code> zurück (ICE-Server, Transport-Richtlinie, Bundle-Policy usw.).

seit JavaScript Baseline: alle modernen Browser (Chrome 56+, Firef Kategorie: webapi

Signatur

RTCPeerConnection.prototype.getConfiguration()

Beschreibung

Die Methode getConfiguration() liefert eine Momentaufnahme der Einstellungen, mit denen eine RTCPeerConnection aktuell arbeitet. Dazu gehören das Array iceServers (STUN-/TURN-Server), iceTransportPolicy, bundlePolicy, rtcpMuxPolicy, iceCandidatePoolSize und certificates.

Praktisch ist die Methode vor allem, um die Konfiguration vor einer Änderung auszulesen. Ein typisches Muster sieht so aus: aktuelle Konfiguration holen, einzelne Felder anpassen (z. B. neue TURN-Zugangsdaten eintragen) und das Ergebnis mit setConfiguration() zurückschreiben. Danach folgt oft ein ICE-Neustart mit restartIce(). Auch für Debugging und Logging lässt sich so prüfen, welche Werte der Browser wirklich übernommen hat.

Das zurückgegebene Objekt ist eine Kopie. Wer es verändert, ändert die Verbindung dadurch nicht. Außerdem enthält es auch Standardwerte, die der Browser für Optionen gesetzt hat, die beim Konstruktor nicht angegeben wurden.

Rückgabewert

Typ
RTCConfiguration
Beschreibung
Ein Objekt mit den aktuellen Einstellungen der Verbindung, z. B. iceServers, iceTransportPolicy ("all" | "relay"), bundlePolicy, rtcpMuxPolicy, iceCandidatePoolSize und certificates.

Beispiele

Aktuelle Konfiguration auslesen

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

const config = pc.getConfiguration();
console.log(config.iceServers[0].urls);
console.log(config.iceTransportPolicy);
console.log(config.bundlePolicy);
stun:stun.l.google.com:19302 all balanced

TURN-Zugangsdaten erneuern und ICE neu starten

const refreshTurnCredentials = async (pc) => {
  // Neue, zeitlich begrenzte Zugangsdaten vom eigenen Server holen
  const res = await fetch('/api/turn-credentials');
  const { username, credential } = await res.json();

  const config = pc.getConfiguration();
  config.iceServers = [
    { urls: 'stun:stun.example.com:3478' },
    { urls: 'turn:turn.example.com:3478', username, credential }
  ];

  pc.setConfiguration(config);
  pc.restartIce(); // Neue Kandidaten mit den neuen Servern sammeln
};

Nur Relay erzwingen (Privatsphäre-Modus)

const pc = new RTCPeerConnection({
  iceServers: [{ urls: 'turn:turn.example.com', username: 'u', credential: 'p' }]
});

const enableRelayOnly = () => {
  const config = pc.getConfiguration();
  if (config.iceTransportPolicy !== 'relay') {
    config.iceTransportPolicy = 'relay';
    pc.setConfiguration(config);
    pc.restartIce();
  }
  console.log('Policy:', pc.getConfiguration().iceTransportPolicy);
};

enableRelayOnly();
Policy: relay

// Wichtig · Fallstricke

  • Das Ergebnis ist eine Kopie. Änderungen daran wirken erst, wenn du sie mit setConfiguration() zurückschreibst.
  • Einige Felder lassen sich nach dem Erzeugen der Verbindung nicht mehr ändern, z. B. certificates, bundlePolicy, rtcpMuxPolicy und peerIdentity. Wer bei setConfiguration() abweichende Werte übergibt, bekommt einen InvalidModificationError. Mit getConfiguration() als Basis bleiben diese Werte automatisch gleich.
  • Nach close() liefert die Methode weiterhin die zuletzt gültige Konfiguration. setConfiguration() wirft dann jedoch einen InvalidStateError.
  • Sicherheit: iceServers kann TURN-Zugangsdaten (username, credential) enthalten. Schreib das Objekt nicht ungefiltert in Logs oder Fehlerberichte.
  • Kompatibilität: In allen modernen Browsern verfügbar. Ältere Versionen zeigen Standardwerte nicht immer vollständig an (z. B. iceCandidatePoolSize). Prüf deshalb nicht blind auf jedes Feld.