RTCDtlsTransport
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 Datenkanälen einer Verbindung übertragen und empfangen werden.
Eigenschaften des DTLS-Transports beinhalten die Hinzufügung von Sicherheit zum zugrunde liegenden Transport; die RTCDtlsTransport
-Schnittstelle kann verwendet werden, um Informationen über den zugrunde liegenden Transport und die vom DTLS-Layer 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-
Liefert einen String, der den Zustand des zugrunde liegenden Datagram Transport Layer Security (DTLS)-Transports beschreibt. Es kann einen der folgenden Werte einnehmen:
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-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 BUNDLE-Modus ab, der bei der Erstellung der RTCPeerConnection
verwendet wird.
Ob BUNDLE verwendet wird, hängt davon ab, was das andere Ende verhandeln kann. Alle Browser unterstützen BUNDLE, sodass, wenn beide Endpunkte Browser sind, Sie sicher sein können, dass BUNDLE verwendet wird.
Einige nicht-browserbasierte Legacy-Endpunkte unterstützen jedoch möglicherweise kein BUNDLE. Um mit solchen Endpunkten verhandeln zu können (oder sie vollständig auszuschließen), kann die Eigenschaft bundlePolicy
beim Erstellen der Verbindung angegeben werden. Die bundlePolicy
ermöglicht die Kontrolle darüber, wie mit diesen Legacy-Endpunkten verhandelt wird. Die Standardrichtlinie ist "balanced"
, die ein Gleichgewicht zwischen Leistung und Kompatibilität bietet.
Um beispielsweise die Verbindung mit dem höchsten BUNDLE-Niveau 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öhere Transporte wie mehrere RTCRtpTransceiver
s zu tragen.
Wenn kein BUNDLE verwendet wird
Wenn die Verbindung ohne 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 bestimmten Medientyp (Audio, Video oder Datenkanal) zu handhaben. Somit hat eine Verbindung mit beliebig vielen Audio- und Videokanälen immer genau einen DTLS-Transport für Audio und einen für Videokommunikationen.
Da Transporte früh im Verhandlungsprozess etabliert werden, ist es wahrscheinlich, dass erst nach ihrer Erstellung bekannt ist, ob der Remote-Peer BUNDLE unterstützt oder nicht. Aus diesem Grund werden anfangs manchmal separate Transporte erstellt, eines für jede Spur, die dann zusammengeführt werden, sobald klar ist, dass BUNDLE möglich ist. Wenn Ihr Code direkt auf RTCRtpSender
und/oder RTCRtpReceiver
zugreift, können Sie Situationen begegnen, in denen sie zunächst getrennt sind, dann wird die Hälfte oder mehr von ihnen geschlossen und die Sender und Empfänger werden aktualisiert, um auf die entsprechenden verbleibenden RTCDtlsTransport
-Objekte zu verweisen.
Datenkanäle
RTCDataChannel
s verwenden SCTP zur 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-Kommunikationen 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
s einer RTCPeerConnection
iteriert und ermittelt, 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 neuen und verbindenden Zustände als ein einziger connectionPending
-Status im zurückgegebenen Objekt behandelt werden.
Spezifikationen
Specification |
---|
WebRTC: Real-Time Communication in Browsers # dom-rtcdtlstransport |
Browser-Kompatibilität
BCD tables only load in the browser