Google is committed to advancing racial equity for Black communities. See how.
本頁面由 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
    });
}