我正在使用android libjingle开发一个基于webRTC的语音聊天应用程序.我希望通过使用ice重新连接用户,当他们将网络从wifi更改为4g或反之,或者断开连接时.我有一个关于使用libjingle实现它的问题.我将根据我的理解写下如何实现冰重启功能,让我知道有什么不对.
问:根据我的理解,首先我需要在MediaConstraints选项中将ice start选项设置为true,而不删除用于第一个连接的对等连接like,如下所示:
mediaConstraints.optional.add(new MediaConstraints.KeyValuePair("IceRestart", "true"));
其次,我需要使用对等连接객체(用于第一个连接)的updateIce方法更新MediaConstrants,如下所示:
peerConnection.updateIce(iceServers, mediaConstraints);
最后发送报价是否正确,这与基本的webrtc网络是一样的?
>我想仔细检查一下我是否理解得很好.如果我写的有什么问题,请告诉我!
解决方法:
为了重新启动冰,发送方应该发送带有不同ice-pwd或ice-ufrag的SDP文件.
IceRestart选项强制PeerConnection更新这些值.
步骤应该是:
>加上额外的约束:
cons.mandatory.add(new MediaConstraints.KeyValuePair(“IceRestart”,“true”));
>生成sdp文件:
pc.createOffer(new WebRtcObserver(callbacks),cons);
>将结果sdp设置为PeerConnection:
pc.setLocalDescription(new WebRtcObserver(callbacks),sdp);
>将其发送给远程同伴.
因此,步骤2-4与常规报价相同.