从 0 打造音视频直播系统
李超
前新东方音视频直播技术专家,前沪江音视频架构师
32579 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
WebRTC 1对1通话 (23讲)
从 0 打造音视频直播系统
15
15
1.0x
00:00/00:00
登录|注册

09 | 让我们揭开WebRTC建立连接的神秘面纱

TURN协议
STUN协议
收集Candidate
Candidate类型
ICE
NAT打洞/P2P穿越
ICE Candidate
场景二:双方处于不同点
场景一:双方处于同一网段内
小结
Candidate
连接建立的基本原则
思考时间
连接建立过程
媒体协商
WebRTC建立连接的神秘面纱

该思维导图由 AI 生成,仅供参考

在上一篇《08 | 有话好商量,论媒体协商》文章中,我向你介绍了 WebRTC 进行通信时,是如何进行媒体协商的,以及媒体协商的目的是什么。
在媒体协商过程中,如果双方能达成一致,也就是商量好了使用什么编解码器,确认了使用什么传输协议,那么接下来,WebRTC 就要建立连接,开始传输音视频数据了。
WebRTC 之间建立连接的过程是非常复杂的。之所以复杂,主要的原因在于它既要考虑传输的高效性,又要保证端与端之间的连通率
换句话说,当同时存在多个有效连接时,它首先选择传输质量最好的线路,如能用内网连通就不用公网。另外,如果尝试了很多线路都连通不了,那么它还会使用服务端中继的方式让双方连通,总之,是“想尽办法,用尽手段”让双方连通。
对于传输的效率与连通率这一点,既是 WebRTC 的目标,也是 WebRTC 建立连接的基本策略。下面我们就来具体看一下 WebRTC 是如何达到这个目标的吧!

在 WebRTC 处理过程中的位置

下面这张图清晰地表达了本文所讲的内容在整个 WebRTC 处理过程中的位置。
WebRTC 处理过程图
图中的红色部分——连接的创建、STUN/TURN 以及 NAT 穿越,就是我们本文要讲的主要内容。

连接建立的基本原则

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

WebRTC建立连接的过程是一个复杂而精妙的技术挑战。文章深入浅出地解释了WebRTC建立连接的基本原则和技术细节,为读者提供了全面的了解。在媒体协商过程中,双方商定使用的编解码器和传输协议,然后WebRTC开始建立连接,确保传输的高效性和端与端之间的连通率。通过候选者的收集和连通性测试,WebRTC巧妙地解决了内网之间的连通性检测问题。文章还介绍了STUN协议和TURN协议,以及NAT打洞/P2P穿越和ICE的相关知识。WebRTC使用优先级的方法去建立连接,即局域网内的优先级最高,其次是NAT穿越,再次是通过中继服务器进行中转,巧妙地实现了“既要高效传输,又能保证连通率”这个目标。虽然WebRTC处理得很好,但仍有不够完美的地方,例如对于同一级别多个Candidate的情况,WebRTC无法从中选出哪个Candidate更优。整体而言,本文为读者提供了对WebRTC建立连接过程的深入理解,使其能够快速了解WebRTC技术特点和连接建立的复杂性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 打造音视频直播系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 花果山の酸梅汤
    srflx candidate是通过信令方式向STUN服务器发送binding request,通过该请求找到NAT映射后的地址(server视角);prflx candidate用于链接检查,当A按照优先级向目标peer B发送binding request,B收到peer A的连通性成功时获得的地址(peer视角)。不知道是否是这样。

    作者回复: 赞,很到位!

    2019-08-05
    14
  • 山石尹口
    连通性检测时的超时设置比较重要,设置短了,会把可以连通的判断为不能连通,设置长了,就会在不能连通的配对上浪费时间

    作者回复: 没错!

    2019-08-03
    5
  • Benjamin
    这篇总算把 STUN 和 TURN 差别搞清楚了 理论上来说 relay 的 TURN 保证一定可以连接上,但是被中转了一次后,后续音视频 UDP 包效率会受到影响。

    作者回复: 是的

    2020-02-11
    3
  • Hengstar
    李老师你好。非常喜欢你的课,讲解很详细。我正好工作中有遇到很多麻烦的问题。比如有很多人家里会安装Wifi的扩展器(extender)设备,这样在家里的时候这些人在不同的位置可能会自动连接到不同的wifi设备(可能是路由器或者是扩展器之间来回切换)。对于这种情况,我们移动端用WebRTC实现的app在通过Host local网络连接上以后,切换wifi的时候是不是会断开WebRTC连接呢?我们如何能够判断这种情况?有没有办法可以很好的实现这种无缝的重连呢?

    作者回复: 当发生网络切换时,移动端自己是可以检测出网络变化的,之后你需要调用pc restart,然后用replace复用原来的通道,这样应该就可以达到无缝切换了

    2021-02-08
    2
  • Geek_fc668a
    老师,有个问题一直很不解,很希望获得您的解答:在一般的C/S架构中,服务器可以很轻松地获取客户端的ip地址,拿为什么不能由信令服务器获取一方的ip交给另一方发起连接,而需要STUN/TURN呢?

    作者回复: stun 协议是专门定义的规范用于打洞的;你这是想自己再实现一套吗?

    2020-12-01
    2
    2
  • Geek_82d1fd
    老师,我又几个问题 1. candidate是不是可以直接设置到SDP里面? 2. 跟媒体服务器通信的时候为什么要发Stun包?

    作者回复: 1. candidate一开始就是放在 SDP中的,后来因为连接效率的问题所以才被拿出来 2. 发 STUN 包是为了 P2P 打洞

    2020-04-11
    4
    2
  • 刘丹
    请问ICE是哪3个英文单词的缩写?是Internet Communication Engine吗?能否创建一个术语表章节?

    作者回复: Interactive Connectivity Establishment (ICE) ,可以参考 https://tools.ietf.org/html/rfc5245

    2019-08-04
    3
    2
  • piboye
    老师, 我一直纳闷 turn 服务器为什么一定要分配 relay port 出来, 这样分配后服务器很难部署了。 不分配端口也是可以做转发啊?

    作者回复: 为什么难以部署呢?不分配端口通信双方如何通信呢?

    2021-03-03
    2
    1
  • SherwinFeng
    prflx和srflx都是为了获取内网主机IP映射的公网IP,只是srflx是通过STUN协议,prflx是直接向目的主机发起连接并请求响应的方式。

    作者回复: 是的。对于 prflx 来说,它也用的 STUN协议!

    2019-11-23
    2
    1
  • Jason
    是不是这样的?srflx:内网地址被NAT映射后的地址,对称型 NAT 与对称型 NAT 、对称型 NAT 与端口限制型 NAT是无法进行 P2P 穿越的;prflx:TUN Server上为客户端分配的中继地址,与各种NAT类型地址都可以进行P2P连接;

    作者回复: 在进行NAT穿越时,如果可以进行穿越,则它向对端发送 binding request请求,binding response就会带回 prflx 类型的 IP 地址和端口,它们就形成了 prflx类型的 candidate。如果NAT穿越不过去,就要走 STUN服务,此时就会获 srflx 类型的 candidate

    2019-08-05
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部