如何在 WebRTC 中优雅地在网络之间切换?

use*_*821 6 android ios webrtc

假设我PeerConnection在 Wifi 上建立了一个。如何在不中断会话的情况下优雅地将网络切换到移动设备?

我显然可以停止一切并重新协商会议,但我不认为这是解决方案。

也有iceConnectionReceivingTimeout和iceBackupCandidatePairPingInterval参数,这似乎正好是专为这种情况下,但不幸的是我无法找到如何从分开使用它们任何提示这个职位。显然只是设置它们并没有做任何事情。

Mar*_*ski 7

如前所述,你不能。但是,如果您使用的是来自 Chromium 的最新 WebRTC,则有一种方法可以最大程度地减少延迟。

最快的可用选项是捕获网络更改事件并通过使用标志重新创建offer相同的事件并将其发送给参与者来重新启动连接。RTCPeerConnectioniceRestart: true

https://w3c.github.io/webrtc-pc/#dom-rtcofferoptions

这将通过为 ICE 用户名和密码片段 - ufrag/生成和使用新值来自动触发重新协商pwd。

笔记

当 iceConnectionState 转换为“失败”时,建议执行 ICE 重启。应用程序还可以选择侦听 iceConnectionState 转换为“断开连接”,然后使用其他信息源(例如使用 getStats 来衡量在接下来的几秒钟内发送或接收的字节数是否增加)来确定 ICE建议重启。


Mik*_*kel 2

简单的答案是,你不能。当前连接将立即断开...

信令阶段协商一对可从两端相互访问的 IP 和端口。当您关闭 wifi 到移动网络时,这必然会发生变化,因为您的 IP 会发生变化,您的防火墙、路由等也会发生变化。您需要再次经历整个过程。