Signatur
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
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);
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);
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));
// 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 nachsetRemoteDescription(offer)ab und erwarte dort noch keinen Wert. - Für die Signalisierungslogik ist in der Regel
remoteDescriptiondie richtige Wahl.currentRemoteDescriptionist 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()odergetStats()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.