Google 致力于为黑人社区推动种族平等。查看具体行动
此页面由 Cloud Translation API 翻译。
Switch to English

对等连接

RTCPeerConnection是WebRTC API中的中央接口。它表示本地和远程对等方之间的连接,并提供建立连接所需的所有功能和事件。

建立对等连接

实现WebRTC功能的应用程序通常将严重依赖RTCPeerConnection接口。从调用方(即,对等方发起连接)而言,建立连接的过程通常如下:

  1. 使用适当的ICE配置创建一个新的RTCPeerConnection实例。
  2. 使用RTCPeerConnection.createOffer()创建本地SDP描述。
  3. 使用RTCPeerConnection.setLocalDescription()设置本地SDP描述。
  4. (使用信令服务)将本地SDP描述传输到远程对等方。
  5. icecandidate上为icecandidate事件注册一个侦听RTCPeerConnection
  6. 对于每个icecandidate事件,(使用信令服务)将其传输到远程对等方。
  7. 等待来自信令服务的传入远程SDP描述,并使用RTCPeerConnection.setRemoteDescription()
  8. 等待来自信令服务的传入远程ICE候选者,然后使用RTCPeerConnection.addIceCandidate()将其添加

在被叫方,此过程略有不同。

  1. 使用适当的ICE配置创建一个新的RTCPeerConnection实例。
  2. 等待来自信令服务的传入远程SDP描述,并使用RTCPeerConnection.setRemoteDescription()
  3. 通过调用RTCPeerConnection.createAnswer()为远程SDP描述创建答案。
  4. (使用信令服务)将答案传输到远程对等方。
  5. icecandidate上注册icecandidate事件的侦听RTCPeerConnection
  6. 对于每个icecandidate事件,(使用信令服务)将其传输到远程对等方。
  7. 等待来自信令服务的传入远程ICE候选者,然后使用RTCPeerConnection.addIceCandidate()将其添加

使用此API的挑战在于,其中大多数操作都是异步的,这通常会使WebRTC应用程序的实际实现变得复杂。许多功能都返回一个Promise ,在继续进行下一步之前必须解决该Promise

建议使用此API实现应用程序时,开发人员应使用asyncawait而不是注册侦听器(使用Promise.then() ),因为这会使您的代码更易于遵循。考虑以下示例:

 function createAndSendOffer(peerConnection, signallingService) {
    peerConnection.createOffer()
                  .then(offer => {
                      signallingService.send({
                          type: 'offer',
                          data: offer
                      });
                  });
}
 

当使用asyncawait编写以上代码时,我们得到以下信息:

 async function createAndSendOffer(peerConnection, signallingService) {
    const offer = await peerConnection.createOffer();
    signallingService.send({
        type: 'offer',
        data: offer
    });
}