Page 299 - Web性能权威指南
P. 299
➌ 注册远程 ICE 候选项并开始连接检查
Trickle ICE 导致发信通道的流量增加,但可以显著减少初始化端到端连接的时间。
为此,所有 WebRTC 应用都应该考虑这一点:尽快发送提议,然后随着发现依次发
送 ICE 候选项。
18.4.5 跟踪ICE收集和连接状态
内置的 ICE 框架负责候选项发现、连接检查、持久化,等等。如果一切顺利,那么所
有这些工作对应用而言都是不可见的:我们要做的只是在初始化 RTCPeerConnection
对象时指定 STUN 和 TURN 服务器。可是,并非所有连接都能成功,此时隔离和解
决问题就很重要了。为此,我们可以查询 ICE 代理状态并预订其通知:
var ice = {"iceServers": [
{"url": "stun:stun.l.google.com:19302"},
{"url": "turn:user@turnserver.com", "credential": "pass"}
]};
var pc = new RTCPeerConnection(ice);
logStatus("ICE gathering state: " + pc.iceGatheringState); ➊
pc.onicecandidate = function(evt) { ➋
logStatus("ICE gathering state change: " + evt.target.iceGatheringState);
}
logStatus("ICE connection state: " + pc.iceConnectionState); ➌
pc.oniceconnectionstatechange = function(evt) { ➍
logStatus("ICE connection state change: " + evt.target.iceConnectionState);
}
➊ 记录当前 ICE 收集状态
➋ 预订 ICE 收集事件
➌ 记录当前 ICE 连接状态
➍ 预订 ICE 连接状态事件
顾名思义,iceGatheringState 属性中保存的是本地端候选项的收集状态。这个属性
有 3 个可能的值。
• new: 对象刚刚创建,还没有连网。
• gathering:ICE 代理正在收集本地候选项。
• complete:ICE 代理收集过程完成。
同样可以顾名思义,iceConnectionState 属性中保存着端到端的连接状态(图 18-9)。
这个属性有 7 个可能的值。
WebRTC | 289