candidate示例
{
type: 'candidate',
candidate:
{ candidate: 'a=candidate:138613430 1 udp 2122260223 10.10.10.232 61421 typ host generation 0 ufrag /9uN network-id 1 network-cost 10',
sdpMid: '0',
sdpMLineIndex: 0 }
}
candidate:表明收到ICE候选者
138613430:foundation是用于标志和区分来自同一个stun的不同的候选者,ID标识
1:表明ICE的组ID
udp:协议类型
2122260223:priority表示优先级
使用这个公式计算优先级需要综合考虑candidate类型的选择顺序和本地IP地址的选择顺序(如果是多宿主主机的话)。将这两个选择合并计算一个candidate的优先级。计算公式如下:
type preference必须是0到126(包含0和126)之间的一个数字,表示类型的优选。126是最优选择,0是最次选择。设置为0表示这种类型的candidate是最后的选择。相同类型的candidate,type preference必须一样,反之不同类型的candidate,type preference不能一样。peer reflexive的type preference必须必server reflexive的type preference值大。注意基于4.1.1节获取到的candidate列表里面不会有peer reflexive candidate,这种类型只能在ICE的连通性检查流程中学习到。
local preference必须是0到65535(包含0和65535)之间的一个数字,在多宿主的主机中,表示某个特定IP地址的优选顺序。65535是最优选择,0是最次选择。如果只有一个IP,该值必须设置为65535。更通用的说法,如果某个流的某个component具有多个相同类型的candidate,那么他们各自的local preference值需要唯一。本规范中,这种情况只会发生在多宿主的场景下。对于双栈的主机,local preference应该设置为rfc3484中描述的IP地址的优先级值(precedence value)。
component ID为相应candidate的component ID,取值范围为1到256(包括1和256)。
10.10.10.232:对应的公网IP
61421:对应的公网IP转发的端口号
typ:标识符,标识后面字段的属性类型是type
host:对应的类型(”host”, “srflx”, “prflx”, “relay”)
host:本地接口获取到的candidate
srflx:NAT网关在公网侧的IP地址,通过STUN或者是TURN收集(server reflexive candidate)
prflx:可以在ICE的后续阶段中获取到(peer reflexive candidate)
relay:TURN服务器的公网转发地址,通过TURN收集(relayed candidate)
当TURN服务器启用时,两种地址都是从TURN服务器上获取到的。如果只有STUN服务器启用,那么只有server reflexive candidate可以从服务器获取到
generation:代号,表明当前是第几代的候选 0
ufrag:ICE分配的用户名标识 /9uN
network-id:网卡标识 1
network-cost: