Как сбросить состояние webrtc?

У меня проблема, иногда мне нужно сбросить состояние WebRTC (например, я иногда получаю такую ​​ошибку:

Не удалось установить удаленное предложение sdp: вызывается в неправильном состоянии: kHaveLocalOffer

Но можно ли сделать это, не отбрасывая и не создавая новый объект RTCPeerConnection? Я не хочу останавливать текущий локальный захват видео ...


person zeus    schedule 31.03.2019    source источник


Ответы (2)


Но можно ли сделать это, не отбрасывая и не создавая новый объект RTCPeerConnection?

Да, это называется "rollback":

(async () => {
  try {
    const pc1 = new RTCPeerConnection(), pc2 = new RTCPeerConnection();
    pc1.createDataChannel("dummy");
    const offer1 = await pc1.createOffer();

    // Say a remote offer comes in we're not ready for (most observable difference)
    const offer2 = await pc2.createOffer({offerToReceiveAudio: true,
                                          offerToReceiveVideo: true});
    await pc1.setRemoteDescription(offer2);
    console.log(pc1.getTransceivers().length); // 2

    await pc1.setRemoteDescription({type: "rollback"}); // <---

    await pc1.setLocalDescription(offer1);
    console.log(pc1.getTransceivers().length); // 0
  } catch(e) {
    console.log(e);
  }
})();

К сожалению, в Chrome пока нет "rollback", но он работает в Firefox. Chrome говорит:

TypeError: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': The
provided value 'rollback' is not a valid enum value of type RTCSdpType.

Пожалуйста, ★ эту ошибку, чтобы убедить Chrome исправить ее.

person jib    schedule 01.04.2019

проверьте тип вашего объекта предложения: предложение

person Abduqodir Abdumalikov    schedule 24.09.2020