3.5.1. ICE Gathering Overview (ICE 收集概述)
3.5.1. ICE Gathering Overview (ICE 收集概述)
JSEP 根据应用程序的需要收集 ICE 候选。ICE 候选的收集被称为收集阶段, 这是由向本地会话描述添加新的或回收的 "m=" 段, 或由描述中的新 ICE 凭据 (指示 ICE 重启) 触发的。使用新的 ICE 凭据可以由应用程序显式触发, 也可以由 JSEP 实现响应 ICE 配置的更改而隐式触发。
当 ICE 配置以需要新收集阶段的方式更改时, 会设置 'needs-ice-restart' 位。当设置此位时, 对 createOffer API 的调用将生成新的 ICE 凭据。此位通过使用来自 offer 或 answer 的新 ICE 凭据调用 setLocalDescription API 来清除, 即来自本地或远程启动的 ICE 重启。
当新的收集阶段开始时, ICE 代理将通过状态更改事件通知应用程序正在进行收集。然后, 当每个新的 ICE 候选变得可用时, ICE 代理将通过 onicecandidate 事件将其提供给应用程序; 这些候选还将自动添加到当前和/或待处理的本地会话描述中。最后, 当收集所有候选时, 将分派最终的 onicecandidate 事件以指示收集过程已完成。
请注意, 收集阶段仅收集新的/回收的/重启的 "m=" 段所需的候选; 其他 "m=" 段继续使用其现有候选。此外, 如果 "m=" 段被捆绑 (通过成功的捆绑协商或通过标记为 bundle-only), 则当且仅当其 MID 项是 BUNDLE-tag 时, 才会为该 "m=" 段收集和交换候选, 如 [RFC8843] 中所述。