RTCDtlsTransport
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2022.
* Some parts of this feature may have varying levels of support.
Das RTCDtlsTransport
Interface bietet Zugriff auf Informationen über den Datagram Transport Layer Security (DTLS) Transport, über den die RTP- und RTCP-Pakete einer RTCPeerConnection
von deren RTCRtpSender
und RTCRtpReceiver
Objekten gesendet und empfangen werden.
Ein RTCDtlsTransport
Objekt wird auch verwendet, um Informationen über die SCTP-Pakete zu liefern, die von den Datenkanälen einer Verbindung übertragen und empfangen werden.
Merkmale des DTLS-Transports beinhalten die Hinzufügung von Sicherheit zum zugrunde liegenden Transport; das RTCDtlsTransport
Interface kann verwendet werden, um Informationen über den zugrunde liegenden Transport und die durch die DTLS-Schicht hinzugefügte Sicherheit zu erhalten.
Instanz-Eigenschaften
Erbt auch Eigenschaften von EventTarget
.
iceTransport
Schreibgeschützt-
Gibt eine Referenz auf das zugrunde liegende
RTCIceTransport
Objekt zurück. state
Schreibgeschützt-
Gibt einen String zurück, der den Zustand des zugrunde liegenden Datagram Transport Layer Security (DTLS) Transports beschreibt. Es kann einer der folgenden Werte sein:
new
,connecting
,connected
,closed
oderfailed
.
Instanz-Methoden
Erbt auch Methoden von EventTarget
.
getRemoteCertificates()
-
Gibt ein Array von
ArrayBuffer
zurück, das die Zertifikate des Remote-Peers der Verbindung enthält.
Ereignisse
error
-
Wird gesendet, wenn ein Transport-Level-Fehler auf der
RTCPeerConnection
auftritt. statechange
-
Wird gesendet, wenn sich der
state
des DTLS-Transports ändert.
Beschreibung
Zuweisung von DTLS-Transporten
RTCDtlsTransport
Objekte werden erstellt, wenn eine App entweder setLocalDescription()
oder setRemoteDescription()
aufruft. Die Anzahl der erstellten DTLS-Transporte und deren Verwendung hängt vom Bündelungsmodus ab, der beim Erstellen der RTCPeerConnection
verwendet wird.
Ob Bündelung verwendet wird, hängt davon ab, was der andere Endpunkt verhandeln kann. Alle Browser unterstützen Bündelung, sodass, wenn beide Endpunkte Browser sind, Sie sicher sein können, dass Bündelung verwendet wird.
Einige nicht-browserbasierte Legacy-Endpunkte unterstützen jedoch möglicherweise keine Bündelung. Um mit solchen Endpunkten verhandeln zu können (oder um sie ganz auszuschließen), kann die Eigenschaft bundlePolicy
beim Erstellen der Verbindung angegeben werden. Die bundlePolicy
ermöglicht es Ihnen, zu steuern, wie mit diesen Legacy-Endpunkten verhandelt wird. Die Standardrichtlinie ist "balanced"
, die eine Balance zwischen Leistung und Kompatibilität bietet.
Zum Beispiel, um die Verbindung mit dem höchsten Bündelungsgrad zu erstellen:
const rtcConfig = {
bundlePolicy: "max-bundle",
};
const pc = new RTCPeerConnection(rtcConfig);
Bundling ermöglicht es Ihnen, einen RTCDtlsTransport
zu verwenden, um die Daten für mehrere höherstufige Transporte, wie z.B. mehrere RTCRtpTransceiver
, zu tragen.
Wenn BUNDLE nicht verwendet wird
Wenn die Verbindung ohne Verwendung von BUNDLE erstellt wird, hat jede RTP- oder RTCP-Komponente jedes RTCRtpTransceiver
ihren eigenen RTCDtlsTransport
; das heißt, jeder RTCRtpSender
und RTCRtpReceiver
hat seinen eigenen Transport und alle RTCDataChannel
Objekte teilen sich einen dem SCTP gewidmeten Transport.
Wenn BUNDLE verwendet wird
Wenn die Verbindung BUNDLE verwendet, repräsentiert jedes RTCDtlsTransport
Objekt eine Gruppe von RTCRtpTransceiver
Objekten. Wenn die Verbindung im max-compat
Modus erstellt wurde, ist jeder Transport dafür verantwortlich, alle Kommunikationen für einen gegebenen Medientyp zu handhaben (Audio, Video oder Datenkanal). Somit wird eine Verbindung mit beliebig vielen Audio- und Video-Kanälen immer genau einen DTLS-Transport für Audio- und einen für Video-Kommunikation haben.
Da Transporte früh im Verhandlungsprozess etabliert werden, ist es wahrscheinlich, dass erst nach ihrer Erstellung bekannt ist, ob das Remote-Peer die Bündelung unterstützt. Aus diesem Grund werden Sie manchmal zu Beginn separate Transporte sehen, einen für jeden Track, und dann sehen, wie sie gebündelt werden, sobald bekannt ist, dass Bündelung möglich ist. Wenn Ihr Code direkt auf RTCRtpSender
und/oder RTCRtpReceiver
zugreift, können Sie Situationen begegnen, in denen sie zunächst separat sind, dann die Hälfte oder mehr davon geschlossen wird und die Sender und Empfänger aktualisiert werden, um auf die passende verbleibende RTCDtlsTransport
Objekte zu verweisen.
Datenkanäle
RTCDataChannel
verwenden SCTP zur Kommunikation. Alle Datenkanäle einer Peer-Verbindung teilen sich einen einzigen RTCSctpTransport
, der sich in der sctp
Eigenschaft der Verbindung befindet.
Sie können wiederum den RTCDtlsTransport
identifizieren, der verwendet wird, um die SCTP-Kommunikation der Datenkanäle sicher zu kapseln, indem Sie die transport
-Eigenschaft des RTCSctpTransport
Objekts betrachten.
Beispiele
Dieses Beispiel zeigt eine Funktion, tallySenders()
, die über die RTCRtpSender
einer RTCPeerConnection
iteriert und zählt, wie viele von ihnen sich in verschiedenen Zuständen befinden. Die Funktion gibt ein Objekt zurück, das Eigenschaften enthält, deren Werte angeben, wie viele Sender sich in jedem Zustand befinden.
let pc = new RTCPeerConnection({ bundlePolicy: "max-bundle" });
// …
function tallySenders(pc) {
let results = {
transportMissing: 0,
connectionPending: 0,
connected: 0,
closed: 0,
failed: 0,
unknown: 0,
};
let senderList = pc.getSenders();
senderList.forEach((sender) => {
let transport = sender.transport;
if (!transport) {
results.transportMissing++;
} else {
switch (transport.state) {
case "new":
case "connecting":
results.connectionPending++;
break;
case "connected":
results.connected++;
break;
case "closed":
results.closed++;
break;
case "failed":
results.failed++;
break;
default:
results.unknown++;
break;
}
}
});
return results;
}
Beachten Sie, dass in diesem Code die Zustände new
und connecting
als ein einziger connectionPending
Status im zurückgegebenen Objekt behandelt werden.
Spezifikationen
Specification |
---|
WebRTC: Real-Time Communication in Browsers # dom-rtcdtlstransport |