createOffer中的iceRestart选项

问题描述 投票:0回答:1

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

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个回答
1
投票

例如,当您在同一个InvalidStateError: kHaveLocalOffer中设置本地SDP报价后设置远程SDP报价而不是回答时,可能会出现RTCPeerConnection

如下图所示,如果两个对等体的网络状况没有变化,WebRTC可以自动从disconnected状态恢复。因此,只有当iceConnectionState切换到failed或者您确定您的设备已切换网络并获得不同的IP时,才应执行冰重启。

enter image description here

实现从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
      }
};
© www.soinside.com 2019 - 2024. All rights reserved.