当 Android 应用程序在后台运行时,React Native WebRTC 无法使用移动网络进行连接

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

我正在使用react-native-webrtc制作React原生Android应用程序。我的目标是将文件传输给另一个人。

我确实使用 Turn/Stun 服务器,我也使用 FCM 来发送通知。

在我的应用程序中,当客户端 1 尝试传输文件时:

  • 如果他们使用 Wi-Fi,则 99% 的情况下传输都会成功。

  • 如果他们使用4G移动网络(连接速度应该不是问题),情况就会改变:

  • 收到应答并在两端设置远程描述后,“iceConnectionState”变为“checking”,然后更改为“failed”。 “connectionState”也失败了。

仅当满足以下两个条件时才会出现此问题:

  1. 客户端 2 的应用程序正在后台运行或已退出。
  2. 客户端 1 未使用 Wi-Fi。

但是,如果客户端 1 使用 Wi-Fi 或客户端 2 的应用程序位于前台,则文件传输成功。

下面我展示了两个客户端使用的连接(WIFI 或 4G)以及其设备上的应用程序状态(前台或后台)以及成功尝试的次数。

客户端 1 (C1) 客户端 2 (C2)

前景 - 前景:

  1. C1 WIFI - C2 WIFI [10/10]

  2. C1 4G - C2 WIFI [10/10]

  3. C1 WIFI - C2 4G [10/10]

  4. C1 4G - C2 4G [10/10]

前景 - 背景:

  1. C1 WIFI - C2 WIFI [10/10]

  2. C1 4G - C2 WIFI [0/10]

  3. C1 WIFI - C2 4G [10/10]

  4. C1 4G - C2 4G [0/10]

前台 - 退出:

  1. C1 WIFI - C2 WIFI [10/10]

  2. C1 4G - C2 WIFI [0/10]

  3. C1 WIFI - C2 4G [10/10]

  4. C1 4G - C2 4G [0/10]

当本地和远程描述已存在于两个设备上时,所有失败都会发生,iceConnectionState 正在“检查”,然后iceConnectionState 更改为“失败”,connectionState 从“连接”更改为“失败”。

connectionState:连接 -> 21 秒后失败 iceConnectionState:检查 -> 20 秒后失败 冰收集状态完成 本地描述存在 远程描述存在 信令状态稳定

如果我重新启动Ice并创建新的offer(如果之前的offer失败),重新连接尝试也会失败。

更改 TURN 服务器没有帮助,相同的行为仍然存在(我尝试了 Twilio 和 Metered.ca)

我还尝试运行前台任务并尝试在前台任务运行时传输文件 - 没有区别。

我将不胜感激任何帮助!

android react-native webrtc webrtc-android react-native-webrtc
1个回答
0
投票

我去年也遇到过同样的问题,我确定问题是关于turn的,你需要定义正确的turn服务器以使2个peerconnection可以互相看到。

其他小问题,请服务员检查

NAT
问题。

© www.soinside.com 2019 - 2024. All rights reserved.