Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Одноранговые связи

RTCPeerConnection является центральным интерфейсом в API WebRTC. Он представляет собой соединение между локальным и удаленным узлом и предоставляет все функции и события, необходимые для установления соединения.

Установление однорангового соединения

Приложения, реализующие функциональность WebRTC, обычно сильно зависят от интерфейса RTCPeerConnection . Со стороны вызывающих (то есть однорангового узла, инициирующего соединение) процесс установки соединения обычно следующий:

  1. Создайте новый экземпляр RTCPeerConnection с соответствующей конфигурацией ICE.
  2. Создайте локальное описание SDP, используя RTCPeerConnection.createOffer() .
  3. Установите локальное описание SDP с помощью RTCPeerConnection.setLocalDescription() .
  4. Передача (с использованием службы сигнализации) локального описания SDP удаленному узлу.
  5. Регистрация слушателя для icecandidate событий на RTCPeerConnection .
  6. Для каждого события icecandidate его (используя службу сигнализации) удаленному узлу.
  7. Дождитесь входящего описания удаленного SDP от службы сигнализации и установите его с помощью RTCPeerConnection.setRemoteDescription() .
  8. Дождитесь поступления удаленных кандидатов ICE от службы сигнализации и добавьте их с помощью RTCPeerConnection.addIceCandidate()

На стороне вызываемого процесс немного другой.

  1. Создайте новый экземпляр RTCPeerConnection с соответствующей конфигурацией ICE.
  2. Дождитесь входящего описания удаленного SDP от службы сигнализации и установите его с помощью RTCPeerConnection.setRemoteDescription() .
  3. Создайте ответ для описания удаленного SDP, вызвав RTCPeerConnection.createAnswer() .
  4. Передать (используя службу сигнализации) ответ удаленному узлу.
  5. Регистрация слушателя для icecandidate событий на RTCPeerConnection .
  6. Для каждого события icecandidate его (используя службу сигнализации) удаленному узлу.
  7. Дождитесь поступления удаленных кандидатов 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
    });
}