如何重置webrtc状态?

时间:2019-03-31 17:07:22

标签: javascript webrtc rtcpeerconnection

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

  

无法设置远程商品sdp:处于错误状态:kHaveLocalOffer

但是可以这样做而无需删除并创建新的RTCPeerConnection对象吗?我不想停止当前的本地视频捕获...

2 个答案:

答案 0 :(得分:3)

  

但是可以这样做而无需删除并创建新的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.

请★this bug敦促Chrome对其进行修复。

答案 1 :(得分:0)

检查要约对象的类型:“要约”