WebRTC手记 —— 建立连接、原理剖析

 WebRTC自身并不提供ICE Servwr(NAT穿透服务器)(ICE服务器:STUN服务器 / TURN服务器),ICE服务器需要自己实现。

Signaling Server(信令服务器),需自己实现,它是在客户端A和客户端B之前传递彼此的SDP信息和candidate信息。ClientA和ClientB通过这些信息建立P2P连接来传送音视频数据。由于网络环境的复杂性,并不是所有的客户端之间都能够建立P2P连接,这种情况下就需要有个relay服务器做音视频数据的中转。

说明:STUN服务器 、TURN服务器、relay服务器的实现在WebRTC源码中都有示例

接下来将从使用层面描述WebRTC建立连接的流程,至于深层次的内容,将持续更新

场景:ClientA向ClientB发起视讯请求

  • 【ClientA创建PeerConnection对象】→【ClientA打开本地音视频设备】→【ClientA将音视频数据封装成MediaStream添加到PeerConnection中】
  • 【ClientA调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。】→【ClientA通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来】→【ClientA通过Signal服务器将SDP对象发送给ClientB】
  • 【ClientB接收到ClientA发送过的offer SDP对象】→【通过PeerConnection的SetRemoteDescription方法将其保存起来】→【调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象】→【通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象】→【通过Signal服务器将该应答SDP对象发送给ClientA】
  • 【ClientA接收到ClientB发送过来的应答SDP对象】→【将应答SDP对象通过PeerConnection的SetRemoteDescription方法保存起来】
  • 【在SDP信息的offer/answer流程中,ClientA和ClientB已经根据SDP信息创建好相应的音频Channel和视频Channel并开启Candidate数据的收集】【Candidate数据可以简单地理解成Client端的IP地址信息(本地IP地址、公网IP地址、Relay服务端分配的地址)】
  • 【当ClientA收集到Candidate信息后,PeerConnection会通过OnIceCandidate接口给ClientA发送通知,ClientA将收到的Candidate信息,通过Signal服务器发送给ClientB,ClientB通过PeerConnection的AddIceCandidate方法保存起来。同样的操作ClientB对ClientA再来一次】
  • 【这样ClientA和ClientB就已经建立了音视频传输的P2P通道,ClientB接收到ClientA传送过来的音视频流,会通过PeerConnection的OnAddStream回调接口返回一个标识ClientA端音视频流的MediaStream对象,在ClientB端渲染出来即可。同样操作也适应ClientB到ClientA的音视频流的传输】

 

你可能感兴趣的:(前端开发,-,WebRTC)