javascript - 如何重置 WebRTC 状态?
我有一个问题,有时我需要重置 WebRTC 状态(例如我有时会收到这个错误:
设置远程 offer SDP 失败:在错误的状态下调用:kHaveLocalOffer
但是是否有可能在不丢弃并创建新的 RTCPeerConnection 对象的情况下做到这一点?我不想停止当前的本地视频捕获...
答案#1
但是有可能在不丢弃并创建新的 RTCPeerConnection 对象的情况下做到这一点吗?
是的,这叫做 “回滚”:
(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 修复它。
答案#2
检查你的报价对象类型:“offer”
