日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

【網(wǎng)絡(luò)通信 -- WebRTC】WebRTC 基礎(chǔ)知識(shí) -- ICE 交互總結(jié)

【1】ICE 的一般概念簡(jiǎn)介

ICE 角色

offer (主動(dòng)發(fā)起)的一方為 controlling 角色

answer (被動(dòng)接受)的一方為 controlled 角色

full ice agent 必須是 controlling role,lite ice agent 是 controlled;srs 僅支持 lite ice

ICE 模式

FULL ICE,雙方都要進(jìn)行連通性檢查;ice 客戶端實(shí)現(xiàn),該模式既可以收 binding request,也可以發(fā) binding request

Lite ICE,在 FULL ICE 和 Lite ICE 互通時(shí),只需要 FULL ICE 一方進(jìn)行連通性檢查,Lite 一方只需回應(yīng) response 消息,該模式對(duì)于部署在公網(wǎng)的設(shè)備比較常用;只接受并回復(fù) binding request 請(qǐng)求,不會(huì)主動(dòng)發(fā)送 binding request 請(qǐng)求給對(duì)方

sdp 中有 a=ice-lite 字樣

srs 服務(wù)器采用 lite-ice 模式

Candidate 地址

媒體傳輸?shù)暮蜻x地址,組成 candidate pair 做連通性檢查,確定傳輸路徑

Type 類型

Host (Host Candidate),該地址是一個(gè)真實(shí)的主機(jī),參數(shù)中的地址和端口對(duì)應(yīng)一個(gè)真實(shí)的主機(jī)地址,該地址來源于本地的物理網(wǎng)卡或邏輯網(wǎng)卡上的地址,對(duì)于具有公網(wǎng)地址或者同一內(nèi)網(wǎng)的端可以用;

Srvflx (Server Reflexive Candidate),該地址是通過 Cone NAT (錐形 NAT) 反射的類型,參數(shù)中的地址和端口是端發(fā)送 Binding 請(qǐng)求到 STUN/TURN server 經(jīng)過 NAT 時(shí),NAT 上面分配的地址和端口

Relay (Relayed Candidate),該地址是端發(fā)送 Allocate 請(qǐng)求到 TURN server,由 TURN server 用于中繼的地址和端口,該地址和端口是 TURN 服務(wù)用于在兩個(gè)對(duì)等點(diǎn)之間轉(zhuǎn)發(fā)數(shù)據(jù)的地址和端口,是一個(gè)中繼地址端口;( 可能是本機(jī)或 NAT 地址);

Prflx(Peer Reflexive Candidate),該地址是通過發(fā)送 STUN Binding 時(shí),通過 Binding 獲取到的地址;在建立連接檢查期間新發(fā)生,參數(shù)中的地址和端口是端發(fā)送 Binding 請(qǐng)求到 STUN/TURN server 經(jīng)過 NAT 時(shí),NAT 上分配的地址和端口

Componet ID

傳輸媒體的類型,1 代表 RTP; 2 代表 RTCP

WebRTC 采用 Rtcp-mux 方式,也就是 RTP 和 RTCP 在同一通道內(nèi)傳輸,減少 ICE 的協(xié)商和通道的保護(hù)

Priority

Candidate 的優(yōu)先級(jí)

Base

candidate 的基礎(chǔ)地址

SDP 中的 Candidate 地址描述

音視頻流媒體開發(fā)WebRTC 基礎(chǔ)知識(shí) -- ICE 交互總結(jié)

 

ICE 保活

對(duì)于每個(gè) ICE 通道,都需要為其會(huì)話進(jìn)行保護(hù)

采用 STUN binding request 或者 STUN binding indication

如果沒有收到響應(yīng),則會(huì)重傳,直到最大重傳次數(shù)

ICE 角色沖突的解決方法

當(dāng)兩端角色都為 controlling 或者 controlled 角色沖突時(shí),在連通性檢查階段,要求發(fā)送信息 binding request 消息中必須要帶上 tie-breaker 屬性

當(dāng)出現(xiàn)沖突時(shí),比較 tie-breaker 大小,值比較大的則被認(rèn)為是 controlling,同時(shí)回應(yīng) 487 錯(cuò)誤給對(duì)端,對(duì)端收到消息 487 錯(cuò)誤后切換角色

音視頻流媒體開發(fā)WebRTC 基礎(chǔ)知識(shí) -- ICE 交互總結(jié)

 

私信【1】領(lǐng)取上圖學(xué)習(xí)webRTC高級(jí)開發(fā)技術(shù),資源資料共享

【2】ICE 的一般過程

收集 candidates

客戶端無法知道自己的外網(wǎng) IP,需要發(fā)送 stun 包給 stun 服務(wù),stun 服務(wù)返回對(duì)應(yīng)客戶端的出口 IP 和端口,返回來的地址和自己本地地址做比對(duì)便可以知道 NAT 類型

根據(jù) Componet ID,獲取本機(jī) host address;從 STUN 服務(wù)器獲取 srvflx address;從 TURN 服務(wù)器獲取 relay address;同時(shí)生成 foundation;

刪除重復(fù)的 candidate 收集地址完成后,需要去掉重復(fù)的 candidate,如果兩個(gè) candidate 的地址一樣,并且 Base 地址也一樣則刪除

交換 candidates

ICE 交換 candidates 方式可以使用 sdp 交換,也可以使用單獨(dú)信令交換

ICE 交換 candidates sdp 方式

ICE 使用 offer/answer 方式,雙方通過 SDP 協(xié)商交換 candidate 信息;

Candidate 信息包括 type, foundation, base, component id, transport

SDP 示例

音視頻流媒體開發(fā)WebRTC 基礎(chǔ)知識(shí) -- ICE 交互總結(jié)

 


音視頻流媒體開發(fā)WebRTC 基礎(chǔ)知識(shí) -- ICE 交互總結(jié)

 

生成 candidate pairs

在本端收到遠(yuǎn)端 candidates 后,將 Component ID 和 transport protocol 相同的 candidates 組成 pair

修整 candidate pair,如果是 srvflx 地址則需要用其 base 地址替換

連通性檢查

將 candidate pairs 按照優(yōu)先級(jí)排序,供連通性檢查使用,其實(shí)就是把 sdp 中的 candidate 地址和本地的 candidate 地址進(jìn)行排隊(duì),組成一個(gè) checklist 表,生成按優(yōu)先級(jí)排序的鏈表,按優(yōu)先順序發(fā)起每個(gè)候選地址對(duì)的檢查;

連通性檢查成功的 candidate pair 按優(yōu)先級(jí)排序的鏈表,用于 ICE 提名和選擇最終路徑,連通性檢查完畢后,開始進(jìn)行優(yōu)先級(jí)排序

如果 checklist 中存在 relay candidate,則必須先為 relay candidate 創(chuàng)建 permission;permission 就是一個(gè)許可,如果沒有創(chuàng)建許可,發(fā)送的包將被丟棄 (針對(duì) TURN 時(shí)使用)

ICE 使用 STUN binding request/response,包含 Fingerprint 檢驗(yàn)校驗(yàn)機(jī)制

如果 A 收到 B 的 response 則代表連通性檢查成功,否則需要進(jìn)行重傳直到超時(shí),在建立連接時(shí),如果沒有響應(yīng),則會(huì)以 RTO 時(shí)間進(jìn)行重傳,每次翻倍,直到最大重傳次數(shù);

STUN 請(qǐng)求采用 STUN short-term credential 方式認(rèn)證,即一段時(shí)間如果沒有 stun 包發(fā)送時(shí),該連接會(huì)過期失效,因此需要不斷地發(fā)送 stun 包并收到回復(fù)的 stun 包,用來保持連接有效性;剛開始建聯(lián)時(shí),以 50ms 間隔頻率發(fā)送,后期穩(wěn)定后是以 2.5s 的間隔頻率發(fā)送,維持連接的有效性

STUN USERNAME 屬性 ”RemoteUsername : localUsername”

兩端在 SDP 協(xié)商時(shí)交換 ice-pwd 和 ice-ufrag,以得對(duì)端用戶名和密碼,計(jì)算 stun 包中的 MESSAGE-INTEGRITY 時(shí),需要自己本地的 ice-pwd 去計(jì)算 Hmac-SHA1,生成對(duì)應(yīng)的屬性值串,用來檢查消息的完整性

生成 validlist

將連通性檢查成功的 candidate pair 按優(yōu)先級(jí)排序加入 validlist,此時(shí)本地 candidate 填寫的是公網(wǎng)映射地址,remote candidate 填寫的是對(duì)端發(fā)送的 STUN binding request 地址

提名 candidate pair

由 controlling 提名哪對(duì) candidate pair 為 valid pair

提名方式分為普通提名和進(jìn)取型提名

普通提名方式會(huì)做兩次連通性檢查,在第一次做連通性檢查時(shí)不會(huì)帶上 USE-CANDIDATE 屬性,而是在生成的 validlist 中選擇 pair 再進(jìn)行一次連通性檢查,這時(shí)會(huì)帶上 USE-CANDIDATE 屬性,并且置位 nominated flag (ICE 提名地址對(duì))

進(jìn)取型方式則是每次發(fā)送連通性檢查時(shí)都會(huì)帶上 USE-CANDIDATE 屬性,并且置位 nominated flag (ICE 提名地址對(duì)),不會(huì)再去做第二次連通性檢查

選擇最終傳輸?shù)刂?/p>

ICE 在提名的 valid pair 中選擇優(yōu)先級(jí)最高的那對(duì)作為本次 ICE 流程傳輸?shù)刂罚缓箝_始建立 DTLS 連接,開始握手,交換證書

【3】ICE 交互示例解析

如果 A 收到 B 的 response,則代表連通性檢查成功,否則需要進(jìn)行重傳直到超時(shí)

在建立連接時(shí),如果沒有響應(yīng),則會(huì)以 RTO 時(shí)間進(jìn)行重傳,每次翻倍,直到最大重傳次數(shù)

STUN 請(qǐng)求,采用 STUN short-term credential 方式認(rèn)證

STUN USERNAME 屬性 ”
RemoteUsername:localUsername”

兩端在 SDP 協(xié)商時(shí)交換 ice-pwd 和 ice-ufrag,以得對(duì)端用戶名和密碼

STUN 檢查請(qǐng)求中需要檢查地址的對(duì)稱性,請(qǐng)求的源地址是響應(yīng)的目的地址,請(qǐng)求的目的地址是響應(yīng)的源地址,否則都設(shè)置狀態(tài)為 Failed

ICE 的完整實(shí)現(xiàn)過程

1. 為中繼候選地址生成許可 (Permissions)

2. 從本地候選往遠(yuǎn)端候選發(fā)送 Binding Request

在 Binding 請(qǐng)求中通常需要包含特殊的屬性,以在 ICE 進(jìn)行連接性檢查的時(shí)候提供必要信息

PRIORITY 和 USE-CANDIDATE

終端必須在其 request 中包含 PRIORITY 屬性,指明其優(yōu)先級(jí),優(yōu)先級(jí)由公式計(jì)算獲得;如果有需要也可以給出特別指定的候選 (即 USE-CANDIDATE 屬性)

ICE-CONTROLLED 和 ICE-CONTROLLING

在每次會(huì)話中,每個(gè)終端都有一個(gè)身份,存在兩種身份,即受控方(controlled role) 和主控方(controlling role),主控方負(fù)責(zé)選擇最終用來通訊的候選地址對(duì),受控方被告知哪個(gè)候選地址對(duì)用來進(jìn)行哪次媒體流傳輸,并且不生成更新過的 offer 來提示此次告知;發(fā)起 ICE 處理進(jìn)程 (即生成 offer)的一方必須是主控方,而另一方則是受控方;如果終端是受控方,那么在 request 中就必須加上 ICE-CONTROLLED 屬性;如果終端是主控方,就需要 ICE-CONTROLLING 屬性

生成 Credential

作為連接性檢查的 Binding Request 必須使用 STUN 的短期身份驗(yàn)證;驗(yàn)證的用戶名被格式化為一系列 username 段的聯(lián)結(jié),包含了發(fā)送請(qǐng)求的所有對(duì)等端的用戶名,以冒號(hào)隔開;密碼就是對(duì)等端的密碼

3. 處理 Response

當(dāng)收到 Binding Response 時(shí),終端會(huì)將其與 Binding Request 相聯(lián)系,通常通過事務(wù) ID;隨后將會(huì)將此事務(wù) ID 與候選地址對(duì)進(jìn)行綁定

終端收到成功響應(yīng)之后,先檢查其 mApped address 是否與本地記錄的地址對(duì)有匹配,如果沒有則生成一個(gè)新的候選地址,即對(duì)等端的反射地址;如果有匹配,則終端會(huì)構(gòu)造一個(gè)可用候選地址對(duì) (valid pair);

通常很可能地址對(duì)不存在于任何檢查列表中,此時(shí)檢索檢查列表中沒有被服務(wù)器反射的本地地址,將這些地址的本地候選轉(zhuǎn)換成服務(wù)器反射地址的基地址并把冗余的地址去除掉;

失敗響應(yīng)

如果 STUN 傳輸返回 487(Role Conflict) 錯(cuò)誤響應(yīng),終端首先會(huì)檢查其是否包含了 ICE-CONTROLLED 或 ICE-CONTROLLING 屬性;如果有 ICE-CONTROLLED 終端必須切換為 controlling role; 如果請(qǐng)求包含 ICE-CONTROLLING 屬性則必須切換為 controlled role;切換完成,終端必須將使得產(chǎn)生 487 錯(cuò)誤的候選地址對(duì)放入檢查隊(duì)列中,并將此地址對(duì)的狀態(tài)設(shè)置為 Waiting

成功響應(yīng),一次連接檢查在滿足下列所有情況時(shí)候就被認(rèn)為成功

STUN 傳輸產(chǎn)生一個(gè) Success Response

response 的源 IP 和端口等于 Binding Request 的目的 IP 和端口

response 的目的 IP 和端口等于 Binding Request 的源 IP 和端口

分享到:
標(biāo)簽:流媒體
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定