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.

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.

EventTarget RTCDtlsTransport

Instanz-Eigenschaften

Erbt auch Eigenschaften von EventTarget.

iceTransport Nur lesbar

Gibt eine Referenz auf das zugrunde liegende RTCIceTransport-Objekt zurück.

state Nur lesbar

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

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öhere Transporte wie mehrere RTCRtpTransceivers 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

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

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

Siehe auch