WebRTC中,连接是核心内容,通过RTCPeerConnection接口可以将本地流MediaStream发送至远端,同时也可以远端媒体发送至本地,从而建立对等连接。本地与远端之间进行媒体协商及网络协商成功后,将本地媒体流发送到远端的过程称为连接建立。
七、建立连接
1、RTCConnection
RTCPeerConnection简称PC对象,即连接对象,本地为Local对象,远端为Remote对象,主要有以下API,如表所示:
2、连接建立
术语:
Peer-A : 简写为 A ,即本地
Peer-B : 简写为 B 即远端
RTCPeerConnection :简写为PC
RTCPeerConnection连接A端即为PC-A,连接B端即为PC-B
连接过程:
(1)A 获取媒体流MediaStream
代码如下:
navigator.mediaDevices.getUserMedia
(2) A(生成PC-A对象
RTCPeerConnection接口代表一个由本地计算机至远端的WebRTC连接。该接口提供了创建、保持、监控、关闭连接的方法,代码如下:
//可选参数包括ICE服务器等
pc=new RTCPeerConnection([RTCConfiguration dictionary])
ICE服务器的设置如下所示:
//设置ICE Server,使用Google服务器
let configuration = { "iceServers": [{ "url": "stun:stun.l.google.com:19302" }] };
(3) A将流加入PC-A
代码如下:
//该方法已经不推荐使用,推荐使用addTrack方法
pc.addStream(stream);
//加入轨道
/循环迭代本地流的所有轨道
localStream.getTracks().forEach((track) => {
/把音视频轨道添加到连接里去
PC.addTrack(track, stream);
});
(4)A创建提议Offer
PC接口的CreateOffer()方法启动创建一个SDP offer ,目的是启动一个新的WebRTC去连接远程端点。代码如下:
offer=await pc.createOffer()
(5) 设置本地描述
A 创建提议Offer成功后,会生成RTCSessionDescription对象,然后调用PC-A的setLocalDescription方法设置本地描述,代码如下:
await pc.setLocalDescription(desc)
(6) A将Offer发送给B
A将Offer信息发送给B, 通常需要架设一个信令服务器转发Offer数据。WebSocket是一种常规的实现方式。
(7)B生成PC-B对象
B端也要生成一个RTCPeerC