InvalidStateError: kHaveLocalOffer
может произойти, например, когда вы устанавливаете удаленное предложение SDP вместо ответа после установки локального предложения SDP в том же RTCPeerConnection
.
Как показано на диаграмме ниже, WebRTC может автоматически восстанавливаться изdisconnected
указать, не изменились ли условия сети обоих узлов.Таким образом, вы должны выполнить перезапуск на льду, только если iceConnectionState
переключен на failed
или если вы уверены, что ваше устройство переключило сеть и получило другой IP.
![enter image description here](https://i.stack.imgur.com/wClQO.png)
Самый простой способ реализовать повторное соединение из состояния failed
- это определить, что только один узел будет делать предложение iceRestart, например, тот, кто инициировал соединение.
Некоторый псевдокод javascript:
this.rtcPeerConnection.oniceconnectionstatechange = () => {
if (this.rtcPeerConnection.iceConnectionState === 'failed' && this.isConnectionInitializer) {
// createOffer({iceRestart: true})
// set offer as local description
// send offer to peer
}
};