Signatur
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
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
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);
}
};
// Wichtig · Fallstricke
- Nicht mit
remoteDescriptionverwechseln: Diese liefert die pending-Beschreibung, falls vorhanden, und sonstcurrentRemoteDescription. - Jeder Zugriff kann ein neues Objekt liefern – Vergleiche mit
===sind deshalb nicht zuverlässig; vergleiche stattdessentypeundsdp. - 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.prototypeprüfen. - Die SDP kann IP-Adressen (ICE-Kandidaten) enthalten – beim Loggen oder Übertragen an Analyse-Dienste auf den Datenschutz achten.