WebRTC中的ICE

ICE简介

ICE是用于UDP媒体传输的NAT穿透协议(适当扩展也可以支持TCP),它需要利用STUN和TURN协议来完成工作。

STUN协议提供了获取一个内网地址对应的公网地址映射关系(NAT Binding)的机制,并且提供了它们之间的保活机制。

TURN协议是STUN协议的一个扩展,允许一个peer只使用一个转发地址就可以和多个peer实现通信。其本质是一个中继协议。

在WebRTC中,ICE会在SDP中增加传输地址信息,利用这个信息进行NAT穿透及确定媒体流传输地址。

ICE Candidate

WebRTC中的ICE Candidate是用来描述可以连接的远端的基本信息,它至少包括(address,port,protocol)三元组,还有Candidate类型、用户名等。

WebRTC将Candidate分成四种类型,且类型间存在优先级次序,从高到低分别为host、srflx、prflx和relay。

  • host:从本机网卡上获取到的地址,一般来说,一个网卡对应一个地址。
  • srflx(server reflexive):从STUN服务器获取到的地址。
  • relay:从TRUN服务器获取到的地址。
  • prflx(peer reflexive):在联通测试中从对端数据报文中获取到的地址。

其中,srflx和prflx地址可能是一样的,但获取的途径不一样。

ICE的基本流程

ICE的基本流程有三步:收集Candidate,交换Candidate,按优先级尝试连接。

收集Candidate

WebRTC在进行NAT穿透时(也就是俗称的打洞),首先会收集Candidate。客户端会按顺序先获取本地的host地址,然后从STUN服务器获取srflx地址,再从TRUN服务器获取relay地址。

交换Candidate

客户端收集到的这些地址会写到SDP报文中,之后通过信令系统将它们发送给对端。对端收到这些Candidate后,会与本地的Candidate组成CandidatePair。当然,这种组合也是有规则的,比如传输协议相同的Candidate才能组成CandidatePair。

需要说明的是WebRTC中的Candidate交换是使用的trickle方式,也就是边收集边交换。

按优先级尝试连接

WebRTC会将CandidatePair按优先级排序,然后按照这个顺序去进行连通性测试。如果有可以连通的CandidatePair就停止尝试,将它作为数据传输地址。后续开始建立连接,成功后就可以利用这个通道传输音视频数据了。

总结

  • WebRTC的ICE会选择出最好的连接通道来传输音视频数据。
  • WebRTC的连通率几乎是100%,因为即使无法完成P2P的连接,最终也能通过中继(relay)的方式来实现端到端的连接。
  • 那么WebRTC具体是怎样利用ICE协议来实现P2P的NAT穿透的呢?请关注后续文章。

吴尼玛的技术后花园
学技术简单记,吴尼玛带你记笔记。

记问之学

29 声望
10 粉丝
0 条评论
推荐阅读
学懂现代C++——《Effective Modern C++》之类型推导和auto
之前分享过Scott Meyers的两本书《Effective C++》和《More Effective C++》。这两本书对我深入学习C++有着很大的帮助,建议所有想进阶C++技术的同学都可以看看。但是,这两本书是大神Scott在C++11之前出的,而C+...

吴尼玛阅读 722

Linux下编译WebRTC(Linux和Android版本)
随着新冠疫情的影响,这两年音视频的需求呈爆发式增长。在音视频领域中,WebRTC可以说是一个绕不开宝库,包括了音视频采集、编解码、传输、渲染的全过程。本文主要记录下在Linux平台上编译WebRTC Linux和Android...

吴尼玛阅读 3.3k评论 2

【音视频】摄像头
IP Camera主要指那些可以直接接入Internet的摄像头,一般不需要专门的PC支持,可以归类于嵌入式设备。多用于监控,如公路上各个路口的监控设备。价格相对较高

看见了阅读 824

出海无从下手?看社交泛娱乐出海「第一趁手工具」怎么说
经过近几年的发展,如今的互联网出海已经是截然不同的命题。开头引导语:移步【融云全球互联网通信云】回复“地图”限量免费领《社交泛娱乐出海作战地图》

融云RongCloud阅读 696

音视频通讯QoS技术及其演进
QoS(Quality of Service)是服务质量的缩写,指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术,包括流分类、流量监管、...

阿里云视频云阅读 492

封面图
“易+”开源 | 基于 ijkplayer 的 LLS-Player 移动端应用实践
云信低延时直播(Low-Latency Streaming,LLS)是在网易云信标准直播的基础上,依托自研的全球实时传输网 WE-CAN 推出的低延时直播产品方案。在保障低延时的同时,具有极致秒开,低卡顿的特性。同时兼容标准直播...

网易智企阅读 412

封面图
保姆级教程!集成声网 SDK 实现 iOS 平台音视频通话和虚拟背景功能
如果你想实现 iOS 平台的音视频通话,想在音视频通话中添加虚拟背景,那这篇文章完全可以借鉴。使用 swift 语言,集成声网 SDK 实现音视频通话,并调用 enableVirtualBackground 接口添加虚拟背景,小伙伴们赶快...

声网阅读 397

记问之学

29 声望
10 粉丝
宣传栏