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.

EventTarget RTCDtlsTransport

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 oder failed.

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:

js
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.

js
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

Browser-Kompatibilität

Siehe auch