音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结

【网络通信 -- WebRTC】WebRTC 基础知识 -- ICE 交互总结
【1】ICE 的一般概念简介ICE 角色
offer (主动发起)的一方为 controlling 角色
answer (被动接受)的一方为 controlled 角色
full ice agent 必须是 controlling role,lite ice agent 是 controlled;srs 仅支持 lite ice
ICE 模式
FULL ICE,双方都要进行连通性检查;ice 客户端实现,该模式既可以收 binding request,也可以发 binding request
Lite ICE,在 FULL ICE 和 Lite ICE 互通时,只需要 FULL ICE 一方进行连通性检查,Lite 一方只需回应 response 消息,该模式对于部署在公网的设备比较常用;只接受并回复 binding request 请求,不会主动发送 binding request 请求给对方
sdp 中有 a=ice-lite 字样
srs 服务器采用 lite-ice 模式
Candidate 地址
媒体传输的候选地址,组成 candidate pair 做连通性检查,确定传输路径
Type 类型
Host (Host Candidate),该地址是一个真实的主机,参数中的地址和端口对应一个真实的主机地址,该地址来源于本地的物理网卡或逻辑网卡上的地址,对于具有公网地址或者同一内网的端可以用;
Srvflx (Server Reflexive Candidate),该地址是通过 Cone NAT (锥形 NAT) 反射的类型,参数中的地址和端口是端发送 Binding 请求到 STUN/TURN server 经过 NAT 时,NAT 上面分配的地址和端口
Relay (Relayed Candidate),该地址是端发送 Allocate 请求到 TURN server,由 TURN server 用于中继的地址和端口,该地址和端口是 TURN 服务用于在两个对等点之间转发数据的地址和端口,是一个中继地址端口;( 可能是本机或 NAT 地址);
Prflx(Peer Reflexive Candidate),该地址是通过发送 STUN Binding 时,通过 Binding 获取到的地址;在建立连接检查期间新发生,参数中的地址和端口是端发送 Binding 请求到 STUN/TURN server 经过 NAT 时,NAT 上分配的地址和端口
Componet ID
传输媒体的类型,1 代表 RTP; 2 代表 RTCP
WebRTC 采用 Rtcp-mux 方式,也就是 RTP 和 RTCP 在同一通道内传输,减少 ICE 的协商和通道的保护
Priority
Candidate 的优先级
Base
candidate 的基础地址
SDP 中的 Candidate 地址描述

音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结

文章插图
 
ICE 保活
对于每个 ICE 通道,都需要为其会话进行保护
采用 STUN binding request 或者 STUN binding indication
如果没有收到响应,则会重传,直到最大重传次数
ICE 角色冲突的解决方法
当两端角色都为 controlling 或者 controlled 角色冲突时,在连通性检查阶段,要求发送信息 binding request 消息中必须要带上 tie-breaker 属性
当出现冲突时,比较 tie-breaker 大小,值比较大的则被认为是 controlling,同时回应 487 错误给对端,对端收到消息 487 错误后切换角色
音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结

文章插图
 
私信【1】领取上图学习webRTC高级开发技术,资源资料共享【2】ICE 的一般过程收集 candidates
客户端无法知道自己的外网 IP,需要发送 stun 包给 stun 服务,stun 服务返回对应客户端的出口 IP 和端口,返回来的地址和自己本地地址做比对便可以知道 NAT 类型
根据 Componet ID,获取本机 host address;从 STUN 服务器获取 srvflx address;从 TURN 服务器获取 relay address;同时生成 foundation;
删除重复的 candidate 收集地址完成后,需要去掉重复的 candidate,如果两个 candidate 的地址一样,并且 Base 地址也一样则删除
交换 candidates
ICE 交换 candidates 方式可以使用 sdp 交换,也可以使用单独信令交换
ICE 交换 candidates sdp 方式
ICE 使用 offer/answer 方式,双方通过 SDP 协商交换 candidate 信息;
Candidate 信息包括 type, foundation, base, component id, transport
SDP 示例
音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结

文章插图
 

音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结

文章插图
 
生成 candidate pairs
在本端收到远端 candidates 后,将 Component ID 和 transport protocol 相同的 candidates 组成 pair
修整 candidate pair,如果是 srvflx 地址则需要用其 base 地址替换
连通性检查
将 candidate pairs 按照优先级排序,供连通性检查使用,其实就是把 sdp 中的 candidate 地址和本地的 candidate 地址进行排队,组成一个 checklist 表,生成按优先级排序的链表,按优先顺序发起每个候选地址对的检查;
连通性检查成功的 candidate pair 按优先级排序的链表,用于 ICE 提名和选择最终路径,连通性检查完毕后,开始进行优先级排序


推荐阅读