Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Połączenia równorzędne

RTCPeerConnection jest centralnym interfejsem API WebRTC. Reprezentuje połączenie między lokalnym i zdalnym peerem oraz zapewnia wszystkie funkcje i zdarzenia niezbędne do ustanowienia połączenia.

Nawiązanie połączenia równorzędnego

Aplikacje implementujące funkcjonalność WebRTC będą zwykle w dużym stopniu polegać na interfejsie RTCPeerConnection . Od strony wywołującej (czyli partnera inicjującego połączenie) proces ustanawiania połączenia przebiega zwykle następująco:

  1. Utwórz nową instancję RTCPeerConnection z odpowiednią konfiguracją ICE.
  2. Utwórz lokalny opis SDP za pomocą RTCPeerConnection.createOffer() .
  3. Ustaw lokalny opis SDP za pomocą RTCPeerConnection.setLocalDescription() .
  4. Prześlij (za pomocą usługi sygnalizacyjnej) lokalny opis SDP do zdalnego peera.
  5. Zarejestruj odbiornik dla zdarzeń icecandidate na RTCPeerConnection .
  6. Dla każdego zdarzenia icecandidate prześlij je (przy użyciu usługi sygnalizacyjnej) do zdalnego peera.
  7. Poczekaj na przychodzący zdalny opis SDP z usługi sygnalizacyjnej i ustaw go za pomocą RTCPeerConnection.setRemoteDescription() .
  8. Poczekaj na przychodzące zdalne kandydatów ICE z usługi sygnalizacyjnej i dodaj ich za pomocą RTCPeerConnection.addIceCandidate()

Po stronie odbiorczej proces przebiega nieco inaczej.

  1. Utwórz nową instancję RTCPeerConnection z odpowiednią konfiguracją ICE.
  2. Poczekaj na przychodzący zdalny opis SDP z usługi sygnalizacyjnej i ustaw go za pomocą RTCPeerConnection.setRemoteDescription() .
  3. Utwórz odpowiedź na opis zdalnego SDP, wywołując RTCPeerConnection.createAnswer() .
  4. Prześlij (za pomocą usługi sygnalizacyjnej) odpowiedź do zdalnego peera.
  5. Zarejestruj odbiornik dla zdarzeń icecandidate na RTCPeerConnection .
  6. Dla każdego zdarzenia icecandidate prześlij je (przy użyciu usługi sygnalizacyjnej) do zdalnego peera.
  7. Poczekaj na przychodzące zdalne kandydatów ICE z usługi sygnalizacyjnej i dodaj ich za pomocą RTCPeerConnection.addIceCandidate()

Wyzwaniem związanym z tym interfejsem API jest to, że większość tych operacji jest asynchroniczna, co często komplikuje rzeczywistą implementację aplikacji WebRTC. Wiele funkcji zwraca Promise która musi zostać rozwiązana, zanim następny krok procesu będzie mógł być kontynuowany.

Zaleca się, aby podczas wdrażania aplikacji przy użyciu tego API, korzystanie make deweloper async i await zamiast rejestracji słuchaczy (używając Promise.then() ), a to sprawia, że kod łatwiejsze do naśladowania. Rozważmy następujący przykład:

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

Pisząc powyższy kod za pomocą async i await , otrzymujemy:

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