为了提升应用程序的安全性,WebRTC中RTP和RTCP数据都采用DTLS协议进行传输,RTCDtlsTransport接口提供了对DTLS层的访问。RTCDtlsTransport的定义如下面的代码清单所示。
//RTCDtlsTransport的定义
interface RTCDtlsTransport : EventTarget {
[SameObject]readonly attribute RTCIceTransport iceTransport;
readonly attribute RTCDtlsTransportState state;
sequence<ArrayBuffer> getRemoteCertificates();
attribute EventHandler onstatechange;
attribute EventHandler onerror;
};
该属性表示收发数据包的底层传输通道,类型为RTCIceTransport。
该属性返回DTLS传输状态,类型为 RTCDtlsTransportState,定义如下。
//RTCDtlsTransportState的定义
enum RTCDtlsTransportState {
"new",
"connecting",
"connected",
"closed",
"failed"
};
| RTCDtlsTransportState 枚举值说明 | |
| 枚举值 | 说明 |
| new | DTLS还没有开始协商 |
| connecting | DTLS正在验证对等端的指纹,并建立安全连接 |
| connected | DTLS 安全连接已经建立 |
| closed | DTLS 传输已关闭 |
| failed | DTLS 传输因为某种原因失败了 |
该方法返回包含对等端证书的数组。
const remoteCert =transport.getRemoteCertificates()
输入:无。
返回值:包含对等端证书的数组,数组成员类型为 ArrayBuffer。
当 state 状态值发生改变时触发该事件,新的状态值可以通过 RTCDtlsTransport.state 获取,对应事件句柄 onstatechange,如下面的代码清单所示。
transport.onstatechange = (event) => {
console.log(transport.state);
};
也可以使用 addEventListener()方法监听事件 statechange,如下面的代码清单所示。
transport.addEventListener("statechange", ev => {
console.log(transport.state);
};
当 DTLS 传输出错时触发该事件,事件类型为 RTCErrorEvent,对应事件柄 onerror,如下面的代码清单所示。
//onerror事件句柄示例
transport.onerror = (event) => {
console.log(event.name);
};
RTCErrorEvent 包含了类型为 RTCError 的属性 error。