Start · Sprachen · JavaScript · Referenz · RTCPeerConnection.currentRemoteDescription

RTCPeerConnection.currentRemoteDescription

Eigenschaft

Nur-Lese-Eigenschaft, die die zuletzt erfolgreich ausgehandelte Remote-Sitzungsbeschreibung als <code>RTCSessionDescription</code> liefert – oder <code>null</code>.

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

Signatur

RTCPeerConnection.currentRemoteDescription

Beschreibung

Die Nur-Lese-Eigenschaft currentRemoteDescription einer RTCPeerConnection gibt ein RTCSessionDescription-Objekt zurück. Es beschreibt die Gegenseite der Verbindung so, wie sie beim letzten vollständigen Offer/Answer-Austausch ausgehandelt wurde, also nachdem die Verbindung wieder in den Signalisierungszustand "stable" gewechselt ist. Außerdem enthält sie alle ICE-Kandidaten, die die Gegenseite seitdem über addIceCandidate() geliefert hat.

Der Unterschied zu pendingRemoteDescription und remoteDescription ist wichtig: Während einer Neuverhandlung (Renegotiation) steht in pendingRemoteDescription das neue, noch nicht bestätigte Angebot der Gegenseite. currentRemoteDescription beschreibt dagegen weiterhin die Konfiguration, die gerade tatsächlich gilt. remoteDescription gibt die ausstehende Beschreibung zurück, wenn es eine gibt, und sonst die aktuelle.

Die Eigenschaft eignet sich für Diagnose, Logging und Statusanzeigen, zum Beispiel um die tatsächlich ausgehandelten Codecs aus dem SDP auszulesen. Sie ist auch nützlich, um während einer Neuverhandlung zu prüfen, welche Parameter noch gelten. Solange noch keine Verhandlung abgeschlossen ist, ist der Wert null.

Rückgabewert

Typ
RTCSessionDescription | null
Beschreibung
Die zuletzt erfolgreich ausgehandelte Remote-Beschreibung mit den Eigenschaften type ("offer" oder "answer") und sdp. Wenn noch keine Verhandlung abgeschlossen wurde, ist der Wert null.

Beispiele

Aktuelle Remote-Beschreibung nach der Verhandlung auslesen

const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
pc1.createDataChannel('chat');

const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
await pc2.setRemoteDescription(offer);

// Noch nicht "stable" – es gibt keine aktuelle Beschreibung
console.log(pc2.currentRemoteDescription);

const answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);

console.log(pc2.currentRemoteDescription.type);
console.log(pc1.currentRemoteDescription.type);
null offer answer

Aktuelle und ausstehende Beschreibung während einer Neuverhandlung vergleichen

const logDescriptions = (pc) => {
  const current = pc.currentRemoteDescription;
  const pending = pc.pendingRemoteDescription;
  console.log('Signalisierung:', pc.signalingState);
  console.log('Aktuell gültig:', current ? current.type : 'keine');
  console.log('Ausstehend:', pending ? pending.type : 'keine');
};

// z. B. nachdem die Gegenseite ein neues Angebot geschickt hat:
// await pc.setRemoteDescription(newOffer);
// logDescriptions(pc);
Signalisierung: have-remote-offer Aktuell gültig: offer Ausstehend: offer

Ausgehandelte Audio-Codecs aus dem SDP ermitteln

const getRemoteAudioCodecs = (pc) => {
  const desc = pc.currentRemoteDescription;
  if (!desc) return [];
  return desc.sdp
    .split('\r\n')
    .filter((line) => line.startsWith('a=rtpmap:'))
    .map((line) => line.split(' ')[1])
    .filter((codec) => /opus|PCMU|PCMA|G722/i.test(codec));
};

console.log(getRemoteAudioCodecs(pc));
["opus/48000/2", "G722/8000", "PCMU/8000", "PCMA/8000"]

// Wichtig · Fallstricke

  • Der Wert ist null, bis die Verbindung nach einem vollständigen Offer/Answer-Austausch den Zustand "stable" erreicht hat. Frage die Eigenschaft deshalb nicht direkt nach setRemoteDescription(offer) ab und erwarte dort noch keinen Wert.
  • Für die Signalisierungslogik ist in der Regel remoteDescription die richtige Wahl. currentRemoteDescription ist vor allem dann sinnvoll, wenn du ausdrücklich den zuletzt bestätigten Zustand brauchst.
  • Das zurückgegebene Objekt ist eine Momentaufnahme. Nach einem späteren addIceCandidate() kann sich das SDP ändern. Lies die Eigenschaft deshalb bei Bedarf neu aus, statt sie zwischenzuspeichern.
  • Das SDP-Format ist komplex. Einfaches Parsen per Zeichenkette (wie im Beispiel oben) ist nur für Diagnosezwecke geeignet. Für die Codec-Auswahl sind RTCRtpTransceiver.setCodecPreferences() oder getStats() zuverlässiger.
  • Kompatibilität: Die Eigenschaft wird in Chrome/Edge (ab 70), Firefox (ab 57) und Safari (ab 11) unterstützt. Ältere Browser kennen nur remoteDescription.