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是用于標(biāo)志和區(qū)分來自同一個stun的不同的候選者,ID標(biāo)識
1:表明ICE的組ID
udp:協(xié)議類型
2122260223:priority表示優(yōu)先級
使用這個公式計算優(yōu)先級需要綜合考慮candidate類型的選擇順序和本地IP地址的選擇順序(如果是多宿主主機的話)。將這兩個選擇合并計算一個candidate的優(yōu)先級盈蛮。計算公式如下:
image.png
type preference必須是0到126(包含0和126)之間的一個數(shù)字瓶盛,表示類型的優(yōu)選。126是最優(yōu)選擇删壮,0是最次選擇。設(shè)置為0表示這種類型的candidate是最后的選擇。相同類型的candidate艰山,type preference必須一樣,反之不同類型的candidate咏闪,type preference不能一樣曙搬。peer reflexive的type preference必須必server reflexive的type preference值大。注意基于4.1.1節(jié)獲取到的candidate列表里面不會有peer reflexive candidate鸽嫂,這種類型只能在ICE的連通性檢查流程中學(xué)習(xí)到纵装。
local preference必須是0到65535(包含0和65535)之間的一個數(shù)字,在多宿主的主機中据某,表示某個特定IP地址的優(yōu)選順序橡娄。65535是最優(yōu)選擇,0是最次選擇癣籽。如果只有一個IP挽唉,該值必須設(shè)置為65535滤祖。更通用的說法,如果某個流的某個component具有多個相同類型的candidate瓶籽,那么他們各自的local preference值需要唯一匠童。本規(guī)范中,這種情況只會發(fā)生在多宿主的場景下塑顺。對于雙棧的主機汤求,local preference應(yīng)該設(shè)置為rfc3484中描述的IP地址的優(yōu)先級值(precedence value)。
component ID為相應(yīng)candidate的component ID严拒,取值范圍為1到256(包括1和256)扬绪。
10.10.10.232:對應(yīng)的公網(wǎng)IP
61421:對應(yīng)的公網(wǎng)IP轉(zhuǎn)發(fā)的端口號
typ:標(biāo)識符,標(biāo)識后面字段的屬性類型是type
host:對應(yīng)的類型(”host”, “srflx”, “prflx”, “relay”)
host:本地接口獲取到的candidate
srflx:NAT網(wǎng)關(guān)在公網(wǎng)側(cè)的IP地址裤唠,通過STUN或者是TURN收集(server reflexive candidate)
prflx:可以在ICE的后續(xù)階段中獲取到(peer reflexive candidate)
relay:TURN服務(wù)器的公網(wǎng)轉(zhuǎn)發(fā)地址挤牛,通過TURN收集(relayed candidate)
當(dāng)TURN服務(wù)器啟用時,兩種地址都是從TURN服務(wù)器上獲取到的巧骚。如果只有STUN服務(wù)器啟用赊颠,那么只有server reflexive candidate可以從服務(wù)器獲取到
generation:代號,表明當(dāng)前是第幾代的候選 0
ufrag:ICE分配的用戶名標(biāo)識 /9uN
network-id:網(wǎng)卡標(biāo)識 1
network-cost: