Start · Sprachen · JavaScript · Referenz · RTCPeerConnection.pendingRemoteDescription

RTCPeerConnection.pendingRemoteDescription

Eigenschaft

Schreibgeschützte Eigenschaft, die die noch nicht abgeschlossene entfernte Sitzungsbeschreibung (<code>RTCSessionDescription</code>) einer laufenden Aushandlung liefert – oder <code>null</code>.

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

Signatur

RTCPeerConnection.pendingRemoteDescription

Beschreibung

pendingRemoteDescription gibt die entfernte Sitzungsbeschreibung zurück, die per setRemoteDescription() gesetzt wurde, deren Offer/Answer-Aushandlung aber noch nicht abgeschlossen ist. Typischer Fall: Die Gegenstelle hat ein Angebot (offer) geschickt, das lokal übernommen wurde, aber die eigene Antwort (answer) wurde noch nicht mit setLocalDescription() gesetzt. Die Verbindung befindet sich dann im signalingState "have-remote-offer".

Gibt es keine laufende Aushandlung, ist der Wert null. Sobald die Aushandlung abgeschlossen ist, wandert die Beschreibung nach currentRemoteDescription, und pendingRemoteDescription wird wieder null. Das zurückgegebene Objekt enthält unter anderem type und sdp; ICE-Kandidaten, die seit der Erstellung eingetroffen sind, können darin enthalten sein.

Die Eigenschaft ist vor allem für Renegotiation, Fehlersuche und die Umsetzung von Mustern wie „Perfect Negotiation“ nützlich, wenn man unterscheiden muss, ob eine Konfiguration bereits aktiv ist oder nur vorgeschlagen wurde. Die Sammel-Eigenschaft remoteDescription liefert dagegen immer die pending-Beschreibung, falls vorhanden, sonst die aktuelle.

Rückgabewert

Typ
RTCSessionDescription | null
Beschreibung
Die anstehende entfernte Beschreibung mit type ("offer", "answer", "pranswer" oder "rollback") und sdp, oder null, wenn keine Aushandlung läuft.

Beispiele

Zustand vor und nach der Antwort prüfen

const pc = new RTCPeerConnection();

// Angebot der Gegenstelle simulieren
const remote = new RTCPeerConnection();
remote.addTransceiver('audio');
const offer = await remote.createOffer();

await pc.setRemoteDescription(offer);
console.log(pc.signalingState);                  // have-remote-offer
console.log(pc.pendingRemoteDescription?.type);  // offer
console.log(pc.currentRemoteDescription);        // null

const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
console.log(pc.pendingRemoteDescription);        // null
console.log(pc.currentRemoteDescription.type);   // offer
have-remote-offer offer null null offer

Debug-Hilfe: aktive vs. anstehende Konfiguration

const logDescriptions = (pc) => {
  const pending = pc.pendingRemoteDescription;
  const current = pc.currentRemoteDescription;
  console.table({
    signalingState: pc.signalingState,
    pending: pending ? `${pending.type} (${pending.sdp.length} Zeichen)` : '—',
    current: current ? `${current.type} (${current.sdp.length} Zeichen)` : '—'
  });
};

const pc = new RTCPeerConnection();
pc.addEventListener('signalingstatechange', () => logDescriptions(pc));

Laufende Aushandlung per Rollback verwerfen

const pc = new RTCPeerConnection();

const discardPendingOffer = async () => {
  if (pc.pendingRemoteDescription && pc.signalingState === 'have-remote-offer') {
    await pc.setRemoteDescription({ type: 'rollback' });
    console.log('Anstehendes Angebot verworfen:', pc.pendingRemoteDescription);
  }
};
Anstehendes Angebot verworfen: null

// Wichtig · Fallstricke

  • Nicht mit remoteDescription verwechseln: Diese liefert die pending-Beschreibung, falls vorhanden, und sonst currentRemoteDescription.
  • Jeder Zugriff kann ein neues Objekt liefern – Vergleiche mit === sind deshalb nicht zuverlässig; vergleiche stattdessen type und sdp.
  • Nach close() bleibt der zuletzt gesetzte Wert unter Umständen lesbar, ist aber bedeutungslos.
  • Browser-Kompatibilität: Chrome 70+, Firefox 57+, Safari 11+, Edge 79+. Ältere Implementierungen kannten nur remoteDescription; bei Bedarf mit 'pendingRemoteDescription' in RTCPeerConnection.prototype prüfen.
  • Die SDP kann IP-Adressen (ICE-Kandidaten) enthalten – beim Loggen oder Übertragen an Analyse-Dienste auf den Datenschutz achten.