Signatur
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 mitRTCPeerConnection.createOffer()."answer": Die endgültige Antwort auf ein Angebot. Damit ist die Verhandlung abgeschlossen. Erzeugt mitcreateAnswer()."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 istsdpleer.
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
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);
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);
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);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
typewird im nicht-strikten Modus stillschweigend ignoriert. Im strikten Modus (also auch in Modulen) wirft sie einenTypeError. Wer einen anderen Typ braucht, erzeugt ein neues Objekt. - Einfache Objekte genügen:
setLocalDescription()undsetRemoteDescription()nehmen auch einfache Objekte der Form{ type, sdp }an. Der KonstruktorRTCSessionDescriptionist dafür nicht mehr nötig. - Serialisierung:
JSON.stringify()übernimmttypeundsdpübertoJSON(). 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 einemTypeError. Eine Beschreibung mit falschem Typ im aktuellen Signalisierungszustand führt zu einemInvalidStateError. - WebRTC gibt es nur in sicheren Kontexten (HTTPS/localhost), wenn Medienzugriff im Spiel ist. Die Eigenschaft wird von allen aktuellen Browsern unterstützt.