Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Kết nối ngang hàng

RTCPeerConnection là giao diện trung tâm trong API WebRTC. Nó đại diện cho kết nối giữa các đồng nghiệp cục bộ và từ xa, và chứng minh tất cả các chức năng và sự kiện cần thiết để thiết lập kết nối.

Thiết lập kết nối ngang hàng

Các ứng dụng triển khai chức năng WebRTC thường sẽ phụ thuộc nhiều vào giao diện RTCPeerConnection . Từ phía người gọi (nghĩa là ngang hàng bắt đầu một kết nối), quá trình thiết lập kết nối thường là như sau:

  1. Tạo một phiên bản RTCPeerConnection mới với cấu hình ICE thích hợp.
  2. Tạo mô tả SDP cục bộ bằng RTCPeerConnection.createOffer() .
  3. Đặt mô tả SDP cục bộ bằng RTCPeerConnection.setLocalDescription() mô tả RTCPeerConnection.setLocalDescription() .
  4. Chuyển (sử dụng dịch vụ báo hiệu) mô tả SDP cục bộ sang thiết bị ngang hàng từ xa.
  5. Đăng ký người nghe cho các sự kiện icecandidate trên RTCPeerConnection .
  6. Đối với mỗi sự kiện icecandidate , chuyển nó (sử dụng dịch vụ báo hiệu) đến thiết bị ngang hàng từ xa.
  7. Đợi một mô tả SDP từ xa đến từ dịch vụ báo hiệu và thiết lập nó bằng RTCPeerConnection.setRemoteDescription() .
  8. Đợi các ứng viên ICE từ xa đến từ dịch vụ báo hiệu và thêm họ bằng RTCPeerConnection.addIceCandidate()

Về phía callee, quá trình này hơi khác một chút.

  1. Tạo một phiên bản RTCPeerConnection mới với cấu hình ICE thích hợp.
  2. Đợi một mô tả SDP từ xa đến từ dịch vụ báo hiệu và thiết lập nó bằng RTCPeerConnection.setRemoteDescription() .
  3. Tạo câu trả lời cho mô tả SDP từ xa bằng cách gọi RTCPeerConnection.createAnswer() .
  4. Chuyển (sử dụng dịch vụ báo hiệu) câu trả lời cho thiết bị ngang hàng từ xa.
  5. Đăng ký người nghe cho các sự kiện icecandidate trên RTCPeerConnection .
  6. Đối với mỗi sự kiện icecandidate , chuyển nó (sử dụng dịch vụ báo hiệu) đến thiết bị ngang hàng từ xa.
  7. Đợi các ứng viên ICE từ xa đến từ dịch vụ báo hiệu và thêm họ bằng RTCPeerConnection.addIceCandidate()

Thách thức với API này là hầu hết các hoạt động này không đồng bộ, điều này thường làm cho việc triển khai thực tế của ứng dụng WebRTC trở nên phức tạp. Nhiều hàm trả về một Promise phải được giải quyết trước khi bước tiếp theo trong quy trình có thể tiếp tục.

Chúng tôi khuyên bạn nên triển khai một ứng dụng sử dụng API này, nhà phát triển sử dụng asyncawait thay vì đăng ký người nghe (sử dụng Promise.then() ), vì điều này giúp mã của bạn dễ theo dõi hơn. Hãy xem xét ví dụ sau:

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

Khi viết mã ở trên bằng cách sử dụng asyncawait , chúng tôi nhận được các thông tin sau:

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