检查 WebRTC 连接 - 可靠的方法

Checking for WebRTC connectivity - reliable methods

我有一个实时视频聊天应用程序,我使用支持 STUN/TURN 和 UPD/TCP 传输的 TURN 服务器。

有时用户可以连接到阻塞那么多的端口和协议,WebRTC 连接不可能发生(通常那些是公司网络)。我想在用户尝试相互连接之前检查 WebRTC 连接是否可行(实际上,执行 技术检查 )。

我该怎么做?我脑子里的想法:

  1. 尝试通过 WebRTC 下载托管数据块(例如音频文件)- 是否可能,这是否足以确保入站和出站连接都正常打开了吗?
  2. 使用TURN服务器作为主机建立连接并查看它是否失败(不知道我是否能做到)
  3. 使用 Flash 尝试通过特定端口和协议download/upload 一大块数据。甚至可能正在使用 Cirrus。但是,我不确定这个测试从 WebRTC 的角度来看是否准确。
  4. 还有其他想法吗?

附加要求:检测技术必须支持Chrome、Opera和Firefox。最好也通过 Temasys 插件 IE/Safari。

第 1 版 - 收集 ICE 候选人是个好主意,但是,它不是 100% 可靠。一旦我检查了我的应用程序中的日志,它实际上收集了中继 ICE 候选者,但是 video/audio 传输失败。在 Apprtc 上也进行了测试,得到了相同的结果。

典型的 WebRTC 方法是创建与 STUN 和 TURN 服务器的对等连接,调用 createOffer 和 setLocalDescription 并观察收集的候选人。参见例如http://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

如果你得到 srflx 候选人,你的 stun 服务器工作(即 UDP 未被阻止)。更有趣的是你是否得到接力候选人。如果这样做,使用 TURN 作为后备将起作用。如果使用 TURN/TCP,质量可能会受到影响。如果你没有接力候选人......电话不太可能奏效。

最好的检查方法是先连接一个数据通道。您的用户不会注意到。如果可行,那么音频和视频几乎可以保证正常工作。作为奖励,您可以在用户准备就绪时使用数据通道发送超快速连接信号。