WebRtc建立P2P链接的总体流程

前言

最近项目需要了解下webrtc,网上webrtc的资料层出不穷,大多都是过时的描述。个人在这方面也走了不少弯路,为了方便自己后续的工作,将自己阅读代码的所得进行了总结。鉴于个人水平有限,错误在所难免,敬请指正不甚感激!

WebRtc简介

webrtc是Web Real-Time Communication的缩写,google收购Global IP Solutions公司而获得的一项技术,用来实现浏览器与浏览器或者浏览器与本地应用的视频通话标准,也可以用来实现文件共享等功能!后来谷歌推广成了一套W3C标准,目前支持的浏览器有 Chrome、Firefox、Opera。有两大使用比较广泛的开源实现,一个是谷歌自己实现的webrtc另一套是爱立信实现的openwebrtc。webrtc源码托管在谷歌源码服务器,可以参考https://webrtc.org/中的文档获取源码和编译,由于国内被墙了,所以这个过程比较痛苦,后面抽时间专门针对这块总结下。openwebrtc源码托管在github上,参考https://github.com/EricssonResearch/openwebrtc!本系列文章都是针对的谷歌的源码实现。

WebRtc建立链接总体流程

无论使用前端的WebRtc API接口,还是WebRtc源码上构建自己的聊天框架,都需要遵循以下执行流程:
这里写图片描述
为了便于描述,只考虑ClientA链接上apprtc服务器(谷歌实现的房间服务器和信令服务器),coturn服务器(ICE服务器),并将自己的condidate发送给信令apprtc服务器后,ClientB才开始链接,ClientA想ClientB发起对聊请求,调用描述如下:
- ClientA链接上房间服务器后,房间服务器将信令服务器,ICE服务器的配置信息传送给ClientA
- ClientA拿到配置信息后,创建PeerConnection对象,新建本地的音视频流并封装在MediaStream对象中,并添加在创建的PeerConnection对象中
- ClientA通过creatOff创建本地SDP,创建成功后通过SDPObserver回调调用SetLocalDescription设置本地despription,设置成功后调用回调通过http协议将本地的SDP发送到远程的房间服务器,接着通过ICE服务器查询本机对外的接入端(Condidate),每发现新的condidate,ice服务器会通过异步的方式告知,本地则会调用相应的回调并将结果通过websocket发送给信令服务器

通过上述过程apprtc服务器保存有ClientA的SDP以及Condidate信息,给A B之间创建p2p链接创造了条件。

  • ClientB链接上房间服务器,房间服务器将信令服务器,ICE服务器的配置信息,已经ClientA的SDP,condidate信息全部返回给ClientB。
  • ClientB创建PeerConnection对象,新建本地的音视频流并封装在MediaStream对象中,并添加在创建的PeerConnection对象中
  • ClientB先将ClientA的SDP信息通过SetRemoteDescripton保存,通过CreatAnswer接口创建本地SDP,若创建成功通过SDPObserver回调调用SetLocalDescription设置本地description,设置成功后也会通过SDPObserve回调将SDP发送给信令服务器。在SetLocalDescription会根据房间服务器返回的ice配置信息链接ice服务器,开始查询本地的condidate,每发现新的condidate,ice服务器会通过异步的方式告知,本地则会调用相应的回调并将结果通过websocket发送给信令服务器。接着会将房间服务器送回的ClientA condidate通过SetRemoteCondidate保存!
  • 信令服务器会将ClientB端的SDP condidate信息通过websocket发送给ClientA,ClientA通过SetRemoteDescripton保存ClientB的SDP信息,通过SetRemoteCondidate保存ClientB的condidate信息,至此两端的p2p链接建立完毕!

相关时序图如下:
这里写图片描述
类图如下:
这里写图片描述

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值