5

我有一个问题,有时我需要重置 WebRTC 状态(例如我有时会收到此错误:

无法设置远程报价 sdp:在错误状态下调用:kHaveLocalOffer

但是是否可以在不删除和创建新的 RTCPeerConnection 对象的情况下这样做?我不想停止当前的本地视频捕获...

4

2 回答 2

7

但是是否可以在不删除和创建新的 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 中运行。铬 说:

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

请 ★此 bug督促 Chrome 修复。

于 2019-04-01T13:00:18.920 回答
0

检查您的报价对象的类型:“报价”

于 2020-09-24T09:51:37.670 回答