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.

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 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:

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

RTCDataChannels 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 RTCRtpSenders 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.

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