У меня есть два партнера, которые хотят соединиться друг с другом через WebRTC.Обычно первый узел создает предложение и отправляет его второму через канал / сервер сигнализации, второй узел отвечает ответом.Этот сценарий работает нормально.
Однако возможно ли поддержать случай, когда оба партнера пытаются соединиться друг с другом одновременно, одновременно отправляя друг другу предложения SDP через сервер сигнализации.
// Both peers do this simultaneously:
const conn = new RTCPeerConnection(null);
const sdpOffer = await conn.createOffer();
await conn.setLocalDescription(sdpOffer);
signalingService.send(peerId, sdpOffer);
// At some point in the future both peers also receive an SDP offer
// (rather than answer) from the other peer whom they sent an offer to
// via the signaling service. If this was an answer we'd call
// RTCPeerConnection.setRemoteDescription, however this doesn't work for an
// offer:
conn.setRemoteDescription(peerSDPOffer);
// In Chrome results in "DOMException: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: Called in wrong state: kHaveLocalOffer"
Я даже пытался «преобразовать» полученные предложения одноранговых узлов в ответы, переписав тип SDP с offer
до answer
и setup:actpass
до setup:active
, но, похоже, это невместо этого я просто получаю новое исключение.
Итак, вопрос в том, поддерживается ли этот вариант использования одновременного подключения / предложения каким-либо образом - или мне нужно закрыть одну сторону / узел RTCPeerConnection и создать новую, используя RTCPeerConnection.createAnswer
на этот раз?