RTCPeerConnection
是 WebRTC API 的中心接口。它
表示本地与远程对等方之间的连接,
函数和事件。
建立对等连接
实现 WebRTC 功能的应用通常严重依赖
RTCPeerConnection
接口。从调用方方面(即对等方)
发起连接),建立连接的过程通常是
以下:
- 使用适当的 ICE 创建一个新的
RTCPeerConnection
实例 配置。 - 使用
RTCPeerConnection.createOffer()
创建本地 SDP 说明。 - 使用以下命令设置本地 SDP 说明:
RTCPeerConnection.setLocalDescription()
。 - (使用信号传输服务)将本地 SDP 说明传输到遥控器 对等设备
- 在
RTCPeerConnection
上注册一个用于监听icecandidate
事件的监听器。 - 对于每个
icecandidate
事件,请将其(使用信号传输服务)转移到 远程对等网络。 - 等待信号传输服务收到远程 SDP 说明,然后
使用
RTCPeerConnection.setRemoteDescription()
进行设置。 - 等待来自信号传输服务的远程 ICE 候选对象,并添加
使用
RTCPeerConnection.addIceCandidate()
在被调用方,流程略有不同。
- 使用适当的 ICE 创建一个新的
RTCPeerConnection
实例 配置。 - 等待信号传输服务收到远程 SDP 说明,然后
使用
RTCPeerConnection.setRemoteDescription()
进行设置。 - 通过调用以下函数为远程 SDP 说明创建答案:
RTCPeerConnection.createAnswer()
。 - 使用信号传输服务将应答传输至远程对等方。
- 在
RTCPeerConnection
上注册一个用于监听icecandidate
事件的监听器。 - 对于每个
icecandidate
事件,请将其(使用信号传输服务)转移到 远程对等网络。 - 等待来自信号传输服务的远程 ICE 候选对象,并添加
使用
RTCPeerConnection.addIceCandidate()
使用此 API 的挑战是,其中大多数操作都是异步进行的,
这往往会使 WebRTC 应用的实际实现变得复杂。
许多函数会返回 Promise
,必须在调用
继续完成流程中的下一步。
使用此 API 实现应用时,建议将
开发者使用 async
和 await
,而不注册监听器
(使用 Promise.then()
),因为这会使您的代码更易于理解。考虑
请参阅以下示例:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
使用 async
和 await
编写上述代码时,我们会得到以下内容:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}