Start · Sprachen · JavaScript · Referenz · RTCSessionDescription.type

RTCSessionDescription.type

Eigenschaft

Schreibgeschützter String, der den Typ einer SDP-Sitzungsbeschreibung angibt: <code>"offer"</code>, <code>"answer"</code>, <code>"pranswer"</code> oder <code>"rollback"</code>.

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

Signatur

RTCSessionDescription.type

Beschreibung

Die Eigenschaft type eines RTCSessionDescription-Objekts sagt, welche Rolle die Beschreibung in der Offer/Answer-Verhandlung von WebRTC hat. Anhand dieses Werts weiß die Gegenstelle, wie sie mit dem mitgelieferten SDP (sdp) umgehen soll: Auf ein Angebot folgt eine Antwort, eine Antwort schließt die Verhandlung ab.

Mögliche Werte (Enum RTCSdpType):

  • "offer": Ein Angebot, das eine neue Verhandlung startet. Erzeugt mit RTCPeerConnection.createOffer().
  • "answer": Die endgültige Antwort auf ein Angebot. Damit ist die Verhandlung abgeschlossen. Erzeugt mit createAnswer().
  • "pranswer": Eine vorläufige Antwort (provisional answer). Sie kann später durch eine endgültige "answer" ersetzt werden, z. B. bei Gateways zu klassischer Telefonie.
  • "rollback": Bricht die laufende Verhandlung ab und stellt den letzten stabilen Zustand wieder her. Hier ist sdp leer.

Gebraucht wird die Eigenschaft vor allem im Signalisierungscode. Kommt eine Beschreibung über WebSocket o. Ä. an, entscheidet man anhand von type, ob man nach setRemoteDescription() noch eine Antwort erzeugen muss. Nur bei "offer" ist das nötig.

Rückgabewert

Typ
"offer" | "answer" | "pranswer" | "rollback"
Beschreibung
Ein String aus dem Enum RTCSdpType, der den Typ der Sitzungsbeschreibung angibt.

Beispiele

Typ eines erzeugten Angebots auslesen

const pc = new RTCPeerConnection();
pc.addTransceiver('audio');

const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

console.log(pc.localDescription.type);
offer

Signalisierung: je nach Typ reagieren

const pc = new RTCPeerConnection();
const socket = new WebSocket('wss://signal.example.com');

socket.addEventListener('message', async (event) => {
  const { description } = JSON.parse(event.data);
  if (!description) return;

  await pc.setRemoteDescription(description);

  // Nur auf ein Angebot muss eine Antwort folgen
  if (description.type === 'offer') {
    await pc.setLocalDescription(await pc.createAnswer());
    socket.send(JSON.stringify({ description: pc.localDescription }));
  }
});

Verhandlung per Rollback abbrechen

const pc = new RTCPeerConnection();
pc.addTransceiver('video');

await pc.setLocalDescription(await pc.createOffer());
console.log(pc.signalingState);

// Angebot zurückziehen
await pc.setLocalDescription({ type: 'rollback' });
console.log(pc.signalingState);
have-local-offer stable

Beschreibung manuell erzeugen und prüfen

const desc = new RTCSessionDescription({
  type: 'answer',
  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);
desc.type = 'offer'; // wird ignoriert (schreibgeschützt)
console.log(desc.type);
answer answer

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an type wird im nicht-strikten Modus stillschweigend ignoriert. Im strikten Modus (also auch in Modulen) wirft sie einen TypeError. Wer einen anderen Typ braucht, erzeugt ein neues Objekt.
  • Einfache Objekte genügen: setLocalDescription() und setRemoteDescription() nehmen auch einfache Objekte der Form { type, sdp } an. Der Konstruktor RTCSessionDescription ist dafür nicht mehr nötig.
  • Serialisierung: JSON.stringify() übernimmt type und sdp über toJSON(). So lässt sich eine Beschreibung einfach über den Signalisierungskanal verschicken.
  • "rollback" gibt es nur in modernen Browsern. Ältere Safari-Versionen unterstützen ihn nicht. "pranswer" kommt in reinen Browser-zu-Browser-Szenarien selten vor.
  • Ein ungültiger Typ im Konstruktor oder in setRemoteDescription() führt zu einem TypeError. Eine Beschreibung mit falschem Typ im aktuellen Signalisierungszustand führt zu einem InvalidStateError.
  • WebRTC gibt es nur in sicheren Kontexten (HTTPS/localhost), wenn Medienzugriff im Spiel ist. Die Eigenschaft wird von allen aktuellen Browsern unterstützt.