Start · Sprachen · JavaScript · Referenz · new RTCSessionDescription()

new RTCSessionDescription()

Methode

Erzeugt ein <code>RTCSessionDescription</code>-Objekt aus Typ und SDP-Text, etwa um ein empfangenes Angebot oder eine Antwort an eine <code>RTCPeerConnection</code> zu übergeben.

seit JavaScript Baseline: alle modernen Browser (Chrome, Firefox, deprecated seit ja Kategorie: webapi

Signatur

new RTCSessionDescription(options)

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

Typ
RTCSessionDescription
Beschreibung
Ein neues 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));
offer true {"type":"offer","sdp":"v=0\r\n

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 type löst einen TypeError aus. Das SDP wird dagegen im Konstruktor nicht geprüft. Fehler im SDP zeigen sich erst beim Setzen auf der Verbindung.
  • Die Eigenschaften type und sdp sind 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.