Signatur
Beschreibung
Der Konstruktor RTCSessionDescription() erstellt eine Sitzungsbeschreibung für WebRTC. Sie besteht aus einem Typ ("offer", "answer", "pranswer" oder "rollback") und dem zugehörigen SDP-Text (Session Description Protocol). Das SDP beschreibt Medienformate, Codecs, Transportparameter und ICE-Informationen einer Verbindung.
Früher brauchte man den Konstruktor, um Angebote und Antworten, die über einen Signalisierungskanal (z. B. WebSocket) empfangen wurden, in ein Objekt zu packen und an setRemoteDescription() weiterzugeben. Heute akzeptieren RTCPeerConnection.setLocalDescription() und setRemoteDescription() direkt ein einfaches Objekt der Form { type, sdp }. Der Konstruktor ist dadurch meist überflüssig, funktioniert aber weiterhin und ist aus Kompatibilitätsgründen häufig in älterem Code zu sehen.
Ein erzeugtes Objekt lässt sich mit toJSON() bzw. JSON.stringify() serialisieren und so bequem an die Gegenstelle übertragen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options Pflicht | RTCSessionDescriptionInit | object | Objekt mit den Eigenschaften type (Pflicht: "offer", "answer", "pranswer" oder "rollback") und sdp (optionaler SDP-String, Standard: leerer String). In älteren Spezifikationen war der Parameter optional. |
Rückgabewert
RTCSessionDescription-Objekt mit den schreibgeschützten Eigenschaften type und sdp.Beispiele
Sitzungsbeschreibung manuell erstellen
const desc = new RTCSessionDescription({
type: 'offer',
sdp: 'v=0\r\no=- 0 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n'
});
console.log(desc.type);
console.log(desc.sdp.startsWith('v=0'));
console.log(JSON.stringify(desc).slice(0, 30));
Empfangenes Angebot über WebSocket verarbeiten
const pc = new RTCPeerConnection();
const socket = new WebSocket('wss://signal.example.com');
socket.addEventListener('message', async (event) => {
const msg = JSON.parse(event.data);
if (msg.type !== 'offer') return;
// Klassischer Weg mit Konstruktor
await pc.setRemoteDescription(new RTCSessionDescription(msg));
const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
socket.send(JSON.stringify(pc.localDescription));
});
Moderne Variante ohne Konstruktor
const pc = new RTCPeerConnection();
const handleAnswer = async ({ type, sdp }) => {
// Ein einfaches Objekt reicht aus
await pc.setRemoteDescription({ type, sdp });
console.log('Signalisierungszustand:', pc.signalingState);
};
// Wichtig · Fallstricke
- Meist nicht nötig: Moderne Browser nehmen in
setLocalDescription()/setRemoteDescription()direkt{ type, sdp }an.setLocalDescription()kann seit einiger Zeit sogar ganz ohne Argument aufgerufen werden (implizites Angebot bzw. implizite Antwort). - Ein ungültiger
typelöst einenTypeErroraus. Das SDP wird dagegen im Konstruktor nicht geprüft. Fehler im SDP zeigen sich erst beim Setzen auf der Verbindung. - Die Eigenschaften
typeundsdpsind in aktuellen Browsern schreibgeschützt. Soll SDP verändert werden (sogenanntes „SDP-Munging“), muss man ein neues Objekt erzeugen. - SDP enthält IP-Adressen und ICE-Zugangsdaten. Übertragen Sie es nur über einen abgesicherten Signalisierungskanal (
wss://). WebRTC funktioniert außerdem nur in sicheren Kontexten (HTTPS). - Ältere Browser brauchten Präfixe wie
mozRTCSessionDescription. Diese sind inzwischen veraltet.