RTCDtlsTransport

RTCDtlsTransport interface provides access to information about the Datagram Transport Layer Security ( DTLS ) transport over which a RTCPeerConnection 's RTP and RTCP packets are sent and received by its RTCRtpSender and RTCRtpReceiver 对象。

A DTLS transport is also used to provide information about SCTP packets transmitted and received by an connection's data channels .

Features of the DTLS transport include the addition of security to the underlying transport; the RTCDtlsTransport interface can be used to obtain information about the underlying transport and the security added to it by the DTLS layer.

特性

iceTransport 只读
The read-only RTCDtlsTransport property iceTransport contains a reference to the underlying RTCIceTransport .
state 只读
state read-only property of the RTCDtlsTransport interface provides information which describes a Datagram Transport Layer Security ( DTLS ) transport state.

方法

This interface has no methods.

描述

Allocation of DTLS transports

RTCDtlsTransport objects are created when an app calls either setLocalDescription() or setRemoteDescription() . The number of DTLS transports created and how they're used depends on the bundling mode used when creating the RTCPeerConnection .

Whether bundling is used depends on what the other endpoint is able to negotiate. All browsers support bundling, so when both endpoints are browsers, you can rest assured that bundling will be used.

Some non-browser legacy endpoints, however, may not support bundle. To be able to negotiate with such endpoints (or to exclude them entirely), the RTCConfiguration property bundlePolicy may be provided when creating the connection. The bundlePolicy lets you control how to negotiate with these legacy endpoints. The default policy is "balanced" , which provides a balance between performance and compatibility.

For example, to create the connection using the highest level of bundling:

const rtcConfig = {
  bundlePolicy: "max-bundle"
};
const pc = new RTCPeerConnection(rtcConfig);
					

Bundling lets you use one RTCDtlsTransport to carry the data for multiple higher-level transports, such as multiple RTCRtpTransceiver s.

When not using BUNDLE

When the connection is created without using BUNDLE, each RTP or RTCP component of each RTCRtpTransceiver has its own RTCDtlsTransport ; that is, every RTCRtpSender and RTCRtpReceiver , has its own transport, and all RTCDataChannel objects share a transport dedicated to SCTP.

When using BUNDLE

When the connection is using BUNDLE, each RTCDtlsTransport object represents a group of RTCRtpTransceiver objects. If the connection was created using max-compat mode, each transport is responsible for handling all of the communications for a given type of media (audio, video, or data channel). Thus, a connection that has any number of audio and video channels will always have exactly one DTLS transport for audio and one for video communications.

Because transports are established early in the negotiation process, it's likely that it won't be known until after they're created whether or not the remote peer supports bundling or not. For this reason, you'll sometimes see separate transports created at first, one for each track, then see them get bundled up once it's known that bundling is possible. If your code accesses RTCRtpSender s and/or RTCRtpReceiver s directly, you may encounter situations where they're initially separate, then half or more of them get closed and the senders and receivers updated to refer to the appropriate remaining RTCDtlsTransport 对象。

Data channels

RTCDataChannel s use SCTP to communicate. All of a peer connection's data channels share a single RTCSctpTransport , found in the connection's sctp 特性。

You can, in turn, identify the RTCDtlsTransport used to securely encapsulate the data channels' SCTP communications by looking at the RTCSctpTransport object's transport 特性。

范例

This example presents a function, tallySenders() , which iterates over an RTCPeerConnection 's RTCRtpSender s, tallying up how many of them are in various states. The function returns an object containing properties whose values indicate how many of the senders are in each state.

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

Note that in this code, the new and connecting states are being treated as a single connectionPending status in the returned object.

规范

规范 状态 Comment
WebRTC 1.0: Real-time Communication Between Browsers
The definition of 'RTCDtlsTransport' in that specification.
候选推荐 初始定义。

浏览器兼容性

更新 GitHub 上的兼容性数据
Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
RTCDtlsTransport Chrome 72 Edge 12 Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0
getRemoteCertificates Chrome 72 Edge 12 Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0
iceTransport Chrome 72 Edge 15
Alternate Name
15
Alternate Name
Alternate Name Uses the non-standard name: transport
Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0
onerror Chrome 72 Edge 12 Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0
onstatechange Chrome 72 Edge 12
Alternate Name
12
Alternate Name
Alternate Name Uses the non-standard name: ondtlsstatechange
Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0
state Chrome 72 Edge 12 Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0
statechange event Chrome 72 Edge 12
Alternate Name
12
Alternate Name
Alternate Name Uses the non-standard name: dtlsstatechange
Firefox No
不支持 No
bug 1307996 .
IE No Opera 60 Safari No WebView Android 72 Chrome Android 72 Firefox Android No
不支持 No
bug 1307996 .
Opera Android 50 Safari iOS No Samsung Internet Android 11.0

图例

完整支持
完整支持
不支持
不支持
见实现注意事项。
使用非标名称。

另请参阅