RTCDataChannel - 表示一个网络通道,可用于任意数据的双向对等传输
RTCDataChannel
接口表示一个网络通道,可用于任意数据的双向对等传输。每个数据通道都与一个 RTCPeerConnection
相关联,每个对等连接在理论上最多可以有 65,534 个数据通道(实际限制可能因浏览器而异)。
要创建数据通道并要求远程对等方加入,请调用 RTCPeerConnection
的 createDataChannel()
方法。被邀请交换数据的对等方收到一个 datachannel
事件(类型为RTCDataChannelEvent
),以使其知道数据通道已添加到连接中。
事件
bufferedamountlow
当传出数据缓冲区中的数据字节数低于 bufferedAmountLowThreshold
指定的值时,触发通道的 onbufferedamountlow
事件处理程序。
close
基础数据传输关闭时,触发 onclose
事件处理程序。
error
当数据通道上发生错误时,触发 onerror
事件处理程序。
message
当从远程对等方收到消息时,触发 onmessage
事件处理程序。消息内容可以通过事件的 data
属性中获得。
open
首次打开数据通道或现有数据通道的基础连接重新打开时,触发 onopen
事件处理程序。
数据格式
基础数据格式由 IEEE 草案规范 draft-ietf-mmusic-sctp-sdp
定义。当前格式将其协议指定为 "UDP/DTLS/SCTP"
(UDP 承载 DTLS 的 SCTP)或 "TCP/DTLS/SCTP"
(TCP 承载 DTLS 的 SCTP)。较旧的浏览器只能指定为 "DTLS/SCTP"
。
实例
var pc = new RTCPeerConnection();
var dc = pc.createDataChannel("我的通道");
dc.onmessage = function (event) {
console.log("收到:" + event.data);
};
dc.onopen = function () {
console.log("datachannel 打开");
};
dc.onclose = function () {
console.log("datachannel 关闭");
};
规范
规范 | 状态 | 备注 |
---|---|---|
WebRTC 1.0: Real-time Communication Between Browsers RTCDataChannel 的定义 |
候选推荐 | 初始定义 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 支持 | 未知 | 24 18 — 601 | 不支持 | 支持 | 支持 |
binaryType | 支持 | 未知 | 18 | 不支持 | 支持 | 支持 |
bufferedAmount | 56 | 未知 | 18 | 不支持 | 43 | 支持 |
bufferedamountlow 事件 | 572 | 未知 | 支持 | 不支持 | 442 | 支持 |
bufferedAmountLowThreshold | 56 | 未知 | 支持 | 不支持 | 43 | 支持 |
close | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
close 事件 | 56 | 未知 | 支持 | 不支持 | 43 | 未知 |
error 事件 | 56 | 未知 | 支持 | 不支持 | 43 | 未知 |
id | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
label | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
maxPacketLifeTime | 56 | 未知 | 62 | 不支持 | 43 | 不支持 |
maxRetransmits | 56 | 未知 | 62 | 不支持 | 43 | 不支持 |
message 事件 | 56 | 未知 | 支持 | 不支持 | 43 | 未知 |
negotiated | 56 | 未知 | 68 | 不支持 | 43 | 不支持 |
onbufferedamountlow | 573 | 未知 | 支持 | 不支持 | 443 | 支持 |
onclose | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
onerror | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
onmessage | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
onopen | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
open 事件 | 56 | 未知 | 支持 | 不支持 | 43 | 未知 |
ordered | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
priority | 不支持 | 未知 | 未知 | 不支持 | 未知 | 未知 |
protocol | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
readyState | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
reliable | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
Support for sctp-sdp-21 format | 58 | 未知 | 63 | 不支持 | 未知 | 不支持 |
send | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
stream | 56 | 未知 | 不支持 | 不支持 | 43 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 4.4 | 29 | 未知 | 24 18 — 601 | 未知 | 支持 | 不支持 |
binaryType | 4.4 | 29 | 未知 | 18 | 未知 | 支持 | 不支持 |
bufferedAmount | 56 | 56 | 未知 | 18 | 未知 | 43 | 不支持 |
bufferedamountlow 事件 | 572 | 572 | 未知 | 支持 | 未知 | 432 | 不支持 |
bufferedAmountLowThreshold | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
close | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
close 事件 | 56 | 56 | 未知 | 支持 | 未知 | 43 | 不支持 |
error 事件 | 56 | 56 | 未知 | 支持 | 未知 | 43 | 不支持 |
id | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
label | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
maxPacketLifeTime | 56 | 56 | 未知 | 62 | 未知 | 43 | 不支持 |
maxRetransmits | 56 | 56 | 未知 | 62 | 未知 | 43 | 不支持 |
message 事件 | 56 | 56 | 未知 | 支持 | 未知 | 43 | 不支持 |
negotiated | 56 | 56 | 未知 | 68 | 未知 | 43 | 不支持 |
onbufferedamountlow | 573 | 573 | 未知 | 支持 | 未知 | 433 | 不支持 |
onclose | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
onerror | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
onmessage | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
onopen | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
open 事件 | 56 | 56 | 未知 | 支持 | 未知 | 43 | 不支持 |
ordered | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
priority | 不支持 | 不支持 | 未知 | 未知 | 未知 | 未知 | 不支持 |
protocol | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
readyState | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
reliable | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
Support for sctp-sdp-21 format | 58 | 58 | 未知 | 63 | 未知 | 未知 | 不支持 |
send | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
stream | 56 | 56 | 未知 | 不支持 | 未知 | 43 | 不支持 |
1. 通过 DataChannel
支持。
2. rtcpMuxPolicy
的默认值是 require
。
3. rtcpMuxPolicy
的默认值是 require
。