【问题标题】:iceRestart option in createOffercreateOffer 中的 iceRestart 选项
【发布时间】:2019-04-18 15:37:49
【问题描述】:

在网络重新连接时,我们正在尝试使用参数创建报价:

iceRestart : true

但是,在接收者用户它抛出一个错误:

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

基本上,它试图创建一个新的报价,而不是重新启动现有的连接。在 createOffer 方法中实现 iceRestart 的正确方法是什么?

self.constraints = [[RTCMediaConstraints alloc] 
initWithMandatoryConstraints:
@[
[[RTCPair alloc] initWithKey:@"OfferToReceiveAudio" 
value:@"true"],
[[RTCPair alloc] initWithKey:@"OfferToReceiveVideo" 
 value:@"true"],
[[RTCPair alloc] initWithKey:@"iceRestart" value:@"true"]
] optionalConstraints:nil];
[_peerConnection createOfferWithDelegate:self 
constraints:self.constraints];

【问题讨论】:

    标签: webrtc openwebrtc


    【解决方案1】:

    InvalidStateError: kHaveLocalOffer 可能会发生,例如,当您在同一 RTCPeerConnection 中设置本地 SDP 报价后设置远程 SDP 报价而不是应答时。

    如下图所示,如果两个对等点的网络条件没有改变,WebRTC 可以自动从disconnected 状态恢复。所以只有当iceConnectionState切换到failed或者你确定你的设备已经切换网络并获得了不同的IP时,你才应该执行ice restart。

    从failed 状态实现重新连接的最简单方法是定义只有一个对等方会执行iceRestart 提议,例如发起连接的那个。

    一些javascript伪代码:

    this.rtcPeerConnection.oniceconnectionstatechange = () => {
          if (this.rtcPeerConnection.iceConnectionState === 'failed' && this.isConnectionInitializer) {
              // createOffer({iceRestart: true})
              // set offer as local description
              // send offer to peer
          }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2019-09-03
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多