WebRTC通信原理

WebRTC需要通过长链接查找到通信双方,然后通过 peer to peer 的方式传输音频数据。

PeerConnection

PeerConnection是WebRTC中封装的对象。每一路的音视频会话都会有唯一的一个PeerConnection对象,WebRTC通过这个PeerConnection对象进行视频的发起、传输、接收和挂断等操作。
PeerConnection中包含的属性如下:

  • localDescription:本地描述信息,类型:RTCSessionDescription
  • remoteDescription:远端描述信息,类型:RTCSessionDescription
  • onicecandidate:传入一个回调方法,该回调方法有一个返回参数,返回参数类型为:RTCIceCandidateEvent
  • onaddstream:传入一个回调方法,该回调方法有一个返回参数,返回参数类型为:“,如果检测到有远程媒体流传输到本地之后便会调用该方法。
  • setLocalDescription:设置本地offer,将自己的描述信息加入到PeerConnection中,参数类型:RTCSessionDescription
  • setRemoteDescription:设置远端的answer,将对方的描述信息加入到PeerConnection中,参数类型:RTCSessionDescription
  • createOffer:创建一个offer,需要传入两个参数,第一个参数是创建offer成功的回调方法,会返回创建好的offer,可以在这里将这个offer发送出去。第二个参数是创建失败的回调方法,会返回错误信息。
  • createAnswer:创建一个answer,需要传入两个参数,第一个参数是创建answer成功的回调方法,会返回创建好的answer,可以在这里将这个answer发送出去。第二个参数是创建失败的回调方法,会返回错误信息。
  • addIceCandidate:将打洞服务器加入到配置信息中,参数类型:RTCIceCandidate
  • addStream:向PeerConnection中加入需要发送的数据流,参数类型:MediaStream

RTCSessionDescription

RTCSessionDescription类型中包含了两个属性:

  • sdp:这个包含了所有的音视频的配置信息。
  • type:这个指明了是视频的接收方还是发起方,这个将在之后进行讨论。

通信过程

A向B发起通信请求

  • A链接socket;
  • A获取音频数据;
  • A创建一个Ice Candidate
  • A通过创建好的Ice Candidate创建一个PeerConnection
  • A创建一个offeroffer中包含了视频设置sdp,将创建好的offer设置为PeerConnectionlocalDescription
  • A同时将创建的offerIce Candidate通过socket发送给B;
  • 将A获取到的音频数据存入PeerConnection
  • 如果B先接收到A发过来的offer,那么先将offer存起来,等到接收到A发过来的Ice Candidate后通过Ice Candidate创建一个PeerConnection,再将保存好的offer设置为PeerConnectionremoteDescription
    如果B先接收到A发过来的Ice Candidate,那么通过A发过来的Ice Candidate创建一个PeerConnection,然后等待接收到A发过来的offer,再将A发过来的offer设置为PeerConnectionremoteDescription
  • B接收到A发过来的offer后要创建一个answer,将answer设置为PeerConnectionlocalDescription。并且将创建的answer通过socket返回给A。
  • B开始获取音频数据,将音频数据存入PeerConnection中,WebRTC便会自动将音频数据发送给A。
  • A接收到B返回的answer,将B返回的answer设置为PeerConnectionremoteDescription
  • 这个时候WebRTC会将音频数据自动发送给B,A和B就建立起了实时音频通信。

本文链接地址: WebRTC通信原理

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注