如何冰重启?

Hir*_*roo 5 android disconnect webrtc

我正在开发app基于webRTC使用 android的语音聊天libjingle。我想在用户将网络从wifi4g更改为 4g(反之亦然)或断开连接时通过使用 ice restart 重新连接用户。我有一个关于使用libjingle. 我将根据我的理解写下如何实现冰重启功能,以便让我知道有什么问题。

问:据我所知,首先我需要在选项中将 ice start 选项设置为 trueMediaConstraints而不删除对等连接??用于第一次连接,如下所示:

mediaConstraints.optional.add(new MediaConstraints.KeyValuePair("IceRestart", "true"));
Run Code Online (Sandbox Code Playgroud)

其次,我需要MediaConstrants使用对等连接 ??(用于第一个连接)的 updateIce 方法进行更新,如下所示:

peerConnection.updateIce(iceServers, mediaConstraints);
Run Code Online (Sandbox Code Playgroud)

最后发个offer对不对,跟基础webrtc网络一样吗?

  • 我想仔细检查我是否理解得很好。如果我写的有什么问题,请告诉我!!

小智 5

为了进行 ice restart,发送方应该发送不同的 ice-pwd 或 ice-ufrag 的 SDP 文件。IceRestart 选项强制 PeerConnection 更新这些值。

步骤应该是:

  1. 放置额外的约束: cons.mandatory.add(new MediaConstraints.KeyValuePair("IceRestart", "true"));
  2. 生成sdp文件: pc.createOffer(new WebRtcObserver(callbacks), cons);
  3. 将结果 sdp 设置为 PeerConnection: pc.setLocalDescription(new WebRtcObserver(callbacks), sdp);
  4. 将其发送到远程对等方。

所以步骤 2-4 与常规报价相同。