RTCDtlsTransport
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
* Some parts of this feature may have varying levels of support.
Die RTCDtlsTransport
-Schnittstelle bietet Zugriff auf Informationen über den Datagram Transport Layer Security (DTLS)-Transport, über den die RTP- und RTCP-Pakete einer RTCPeerConnection
von ihren RTCRtpSender
- und RTCRtpReceiver
-Objekten gesendet und empfangen werden.
Ein RTCDtlsTransport
-Objekt wird auch verwendet, um Informationen über SCTP-Pakete bereitzustellen, die von den Datakanälen einer Verbindung übertragen und empfangen werden.
Merkmale des DTLS-Transports umfassen die Hinzufügung von Sicherheit zum zugrunde liegenden Transport; über die RTCDtlsTransport
-Schnittstelle können Informationen über den zugrunde liegenden Transport und die Sicherheitsschicht des DTLS bereitgestellt werden.
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 Fehler auf Transport-Ebene bei der
RTCPeerConnection
auftritt. statechange
-
Wird gesendet, wenn sich der
state
des DTLS-Transports ändert.
Beschreibung
Zuweisung von DTLS-Transports
RTCDtlsTransport
-Objekte werden erstellt, wenn eine Anwendung entweder setLocalDescription()
oder setRemoteDescription()
aufruft. Die Anzahl der erstellten DTLS-Transports und deren Verwendung hängt vom Bunde-Modus ab, der bei der Erstellung der RTCPeerConnection
verwendet wird.
Ob Bundling verwendet wird, hängt davon ab, was das andere Endpunkt verhandeln kann. Alle Browser unterstützen Bundling, sodass Sie sicher sein können, dass es verwendet wird, wenn beide Endpunkte Browser sind.
Einige nicht-Browser-basierte alte Endpunkte unterstützen jedoch möglicherweise kein Bundling. Um mit solchen Endpunkten verhandeln zu können (oder sie vollständig auszuschließen), kann die bundlePolicy
-Eigenschaft bei der Erstellung der Verbindung angegeben werden. Die bundlePolicy
erlaubt es Ihnen, zu steuern, wie mit diesen alten Endpunkten verhandelt wird. Die Standardrichtlinie ist "balanced"
, die eine Balance zwischen Leistung und Kompatibilität bietet.
Um beispielsweise die Verbindung mit dem höchsten Bundling-Level zu erstellen:
const rtcConfig = {
bundlePolicy: "max-bundle",
};
const pc = new RTCPeerConnection(rtcConfig);
Bundling ermöglicht es, einen RTCDtlsTransport
zu verwenden, um die Daten für mehrere höherstufige Transports wie mehrere RTCRtpTransceiver
s zu übertragen.
Ohne BUNDLE
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 Transport, der SCTP gewidmet ist.
Mit BUNDLE
Wenn die Verbindung BUNDLE verwendet, repräsentiert jedes RTCDtlsTransport
-Objekt eine Gruppe von RTCRtpTransceiver
-Objekten. Wird die Verbindung im max-compat
-Modus erstellt, ist jeder Transport dafür verantwortlich, die gesamte Kommunikation für eine gegebene Medienart (Audio, Video oder Datenkanal) zu handhaben. Somit wird eine Verbindung mit einer beliebigen Anzahl von Audio- und Videokanälen immer genau einen DTLS-Transport für Audio- und einen für Videokommunikation haben.
Da Transports früh im Verhandlungsprozess etabliert werden, ist es wahrscheinlich, dass erst nach ihrer Erstellung bekannt ist, ob der Remote-Peer Bundling unterstützt. Aus diesem Grund sehen Sie manchmal, dass zunächst separate Transports erstellt werden, einer für jede Spur, und dann gebündelt werden, sobald bekannt ist, dass Bundling möglich ist. Wenn Ihr Code direkt auf RTCRtpSender
und/oder RTCRtpReceiver
zugreift, könnten Sie auf Situationen stoßen, in denen sie anfangs getrennt sind, dann wird die Hälfte oder mehr geschlossen und die Sender und Empfänger werden aktualisiert, um auf die entsprechenden verbleibenden RTCDtlsTransport
-Objekte zu verweisen.
Datenkanäle
RTCDataChannel
s verwenden SCTP für die Kommunikation. Alle Datenkanäle einer Peer-Verbindung teilen sich einen einzigen RTCSctpTransport
, der in der sctp
-Eigenschaft der Verbindung zu finden ist.
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 untersuchen.
Beispiele
Dieses Beispiel zeigt eine Funktion, tallySenders()
, die über die RTCRtpSender
s einer RTCPeerConnection
iteriert und aufzeichnet, wie viele von ihnen sich in verschiedenen Zuständen befinden. Die Funktion gibt ein Objekt zurück, dessen Eigenschaften 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 |