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.

Giao diện RTCDtlsTransport cung cấp quyền truy cập thông tin về giao thức vận chuyển Datagram Transport Layer Security (DTLS) mà qua đó các gói RTPRTCP của RTCPeerConnection được gửi và nhận bởi các đối tượng RTCRtpSenderRTCRtpReceiver của nó.

Một đối tượng RTCDtlsTransport cũng được sử dụng để cung cấp thông tin về các gói SCTP được truyền và nhận bởi các kênh dữ liệu của kết nối.

Các tính năng của DTLS transport bao gồm việc thêm bảo mật vào transport cơ bản; giao diện RTCDtlsTransport có thể được sử dụng để lấy thông tin về transport cơ bản và bảo mật được thêm vào bởi lớp DTLS.

EventTarget RTCDtlsTransport

Thuộc tính phiên bản

Cũng kế thừa thuộc tính từ EventTarget.

iceTransport Read only

Trả về một tham chiếu đến đối tượng RTCIceTransport cơ bản.

state Read only

Trả về một chuỗi mô tả trạng thái transport Datagram Transport Layer Security (DTLS) cơ bản. Nó có thể là một trong các giá trị sau: new, connecting, connected, closed, hoặc failed.

Phương thức phiên bản

Cũng kế thừa phương thức từ EventTarget.

getRemoteCertificates()

Trả về một mảng ArrayBuffer chứa chứng chỉ của peer từ xa của kết nối.

Sự kiện

error

Được gửi khi xảy ra lỗi cấp transport trên RTCPeerConnection.

statechange

Được gửi khi state của DTLS transport thay đổi.

Mô tả

Phân bổ DTLS transports

Các đối tượng RTCDtlsTransport được tạo ra khi ứng dụng gọi setLocalDescription() hoặc setRemoteDescription(). Số lượng DTLS transport được tạo và cách chúng được sử dụng phụ thuộc vào chế độ bundling được sử dụng khi tạo RTCPeerConnection.

Việc sử dụng bundling hay không phụ thuộc vào những gì endpoint kia có thể thỏa thuận. Tất cả các trình duyệt hỗ trợ bundling, vì vậy khi cả hai endpoint là trình duyệt, bạn có thể yên tâm rằng bundling sẽ được sử dụng.

Một số endpoint legacy không phải trình duyệt, tuy nhiên, có thể không hỗ trợ bundle. Để có thể thỏa thuận với các endpoint như vậy (hoặc để loại trừ chúng hoàn toàn), thuộc tính bundlePolicy có thể được cung cấp khi tạo kết nối. Chính sách mặc định là "balanced", cung cấp sự cân bằng giữa hiệu suất và khả năng tương thích.

Ví dụ, để tạo kết nối sử dụng mức bundling cao nhất:

js
const rtcConfig = {
  bundlePolicy: "max-bundle",
};

const pc = new RTCPeerConnection(rtcConfig);

Bundling cho phép bạn sử dụng một RTCDtlsTransport để mang dữ liệu cho nhiều transport cấp cao hơn, chẳng hạn như nhiều RTCRtpTransceiver.

Khi không sử dụng BUNDLE

Khi kết nối được tạo mà không sử dụng BUNDLE, mỗi thành phần RTP hoặc RTCP của mỗi RTCRtpTransceiverRTCDtlsTransport riêng; tức là, mỗi RTCRtpSenderRTCRtpReceiver, có transport riêng của nó, và tất cả các đối tượng RTCDataChannel chia sẻ một transport dành riêng cho SCTP.

Khi sử dụng BUNDLE

Khi kết nối đang sử dụng BUNDLE, mỗi đối tượng RTCDtlsTransport đại diện cho một nhóm các đối tượng RTCRtpTransceiver. Nếu kết nối được tạo bằng chế độ max-compat, mỗi transport chịu trách nhiệm xử lý tất cả thông tin liên lạc cho một loại phương tiện nhất định (âm thanh, video, hoặc kênh dữ liệu). Do đó, một kết nối với bất kỳ số lượng kênh âm thanh và video nào sẽ luôn có đúng một DTLS transport cho âm thanh và một cho liên lạc video.

Các kênh dữ liệu

Các RTCDataChannel sử dụng SCTP để giao tiếp. Tất cả các kênh dữ liệu của kết nối peer chia sẻ một RTCSctpTransport đơn, được tìm thấy trong thuộc tính sctp của kết nối.

Bạn có thể xác định RTCDtlsTransport được sử dụng để bảo mật bọc giao tiếp SCTP của các kênh dữ liệu bằng cách nhìn vào thuộc tính transport của đối tượng RTCSctpTransport.

Ví dụ

Ví dụ này trình bày một hàm, tallySenders(), lặp qua các RTCRtpSender của RTCPeerConnection, đếm xem có bao nhiêu cái đang ở các trạng thái khác nhau. Hàm trả về một đối tượng chứa các thuộc tính có giá trị cho biết bao nhiêu sender đang ở mỗi trạng thái.

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

Lưu ý rằng trong mã này, các trạng thái newconnecting đang được xử lý như một trạng thái connectionPending đơn trong đối tượng được trả về.

Thông số kỹ thuật

Specification
WebRTC: Real-Time Communication in Browsers
# dom-rtcdtlstransport

Tương thích trình duyệt

Xem thêm