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
   294   295   296   297   298   299   300   301   302   303   304