Как сбросить состояние webrtc?
У меня проблема, иногда мне нужно сбросить состояние WebRTC (например, иногда я получаю эту ошибку:
Не удалось установить удаленное предложение sdp: вызвано в неправильном состоянии: kHaveLocalOffer
Но возможно ли это сделать без удаления и создания нового объекта RTCPeerConnection? Я не хочу останавливать текущий локальный захват видео...
1 ответ
Но возможно ли это сделать без удаления и создания нового объекта 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 исправить это.