我正在使用react-native-webrtc制作React原生Android应用程序。我的目标是将文件传输给另一个人。
我确实使用 Turn/Stun 服务器,我也使用 FCM 来发送通知。
在我的应用程序中,当客户端 1 尝试传输文件时:
如果他们使用 Wi-Fi,则 99% 的情况下传输都会成功。
如果他们使用4G移动网络(连接速度应该不是问题),情况就会改变:
收到应答并在两端设置远程描述后,“iceConnectionState”变为“checking”,然后更改为“failed”。 “connectionState”也失败了。
仅当满足以下两个条件时才会出现此问题:
但是,如果客户端 1 使用 Wi-Fi 或客户端 2 的应用程序位于前台,则文件传输成功。
下面我展示了两个客户端使用的连接(WIFI 或 4G)以及其设备上的应用程序状态(前台或后台)以及成功尝试的次数。
客户端 1 (C1) 客户端 2 (C2)
前景 - 前景:
C1 WIFI - C2 WIFI [10/10]
C1 4G - C2 WIFI [10/10]
C1 WIFI - C2 4G [10/10]
C1 4G - C2 4G [10/10]
前景 - 背景:
C1 WIFI - C2 WIFI [10/10]
C1 4G - C2 WIFI [0/10]
C1 WIFI - C2 4G [10/10]
C1 4G - C2 4G [0/10]
前台 - 退出:
C1 WIFI - C2 WIFI [10/10]
C1 4G - C2 WIFI [0/10]
C1 WIFI - C2 4G [10/10]
C1 4G - C2 4G [0/10]
当本地和远程描述已存在于两个设备上时,所有失败都会发生,iceConnectionState 正在“检查”,然后iceConnectionState 更改为“失败”,connectionState 从“连接”更改为“失败”。
connectionState:连接 -> 21 秒后失败 iceConnectionState:检查 -> 20 秒后失败 冰收集状态完成 本地描述存在 远程描述存在 信令状态稳定
如果我重新启动Ice并创建新的offer(如果之前的offer失败),重新连接尝试也会失败。
更改 TURN 服务器没有帮助,相同的行为仍然存在(我尝试了 Twilio 和 Metered.ca)
我还尝试运行前台任务并尝试在前台任务运行时传输文件 - 没有区别。
我将不胜感激任何帮助!
我去年也遇到过同样的问题,我确定问题是关于turn的,你需要定义正确的turn服务器以使2个peerconnection可以互相看到。
其他小问题,请服务员检查
NAT
问题。