2

我已经使用 WebRTC 数据通道的 PeerJS 实现设置了一个文本聊天服务。PeerJS 为此目的提供了一个基本的信号服务器,但我试图用通过 XirSys 设置的 STUN 和 TURN 服务器(由另一个 WebRTC 库 SimpleWebRTC 推荐)来替换它。我还没有部署到网络上。

使用 Node 在本地提供我的静态文件,它将在本地网络上工作(当我坐在人旁边并且他们在浏览器中导航到我的 ip/端口时),但在通过不同接入点连接时将无法工作相同的网络(即在工作中,在建筑物的两端)。

我的假设是它击中了防火墙,但仍将流量引导到 PeerJS 的信令服务器,而不会退回到我尝试设置的 XirSys STUN 和 TURN 服务器。这是我正在使用的代码:

var stun = {};
var turn1 = {};
var turn2 = {}; 
  $.ajax({
    type: "POST",
    dataType: "json",
    url: "https://api.xirsys.com/getIceServers",
    data: {
        ident: "myusername",
        secret: "long-alphanumeric-secret-key",
        domain: "www.adomain.com",
        application: "anapp",
        room: "aroom",
        secure: 1
    },
    success: function (data, status) {
        console.log(data);
        stun = data.d.iceServers[0];
        turn1 = data.d.iceServers[1];
        turn2 = data.d.iceServers[2];
    },
    async: false
});

var conn;
  // Connect to PeerJS, have server assign an ID instead of providing one
  var peerID = prompt('What would you like your screen name to be?');
  var peer = new Peer(
    peerID, 
    {key: 'mypeerjsserverkey', debug: true}, 
    {
    config: {'iceServers': [
        {url: stun.url},
        {url: turn1.url, credential: turn1.credential, username: turn1.username},
        {url: turn2.url, credential: turn2.credential, username: turn2.username}
      ]
    }
  });

注意:我的身份、秘密、域等显然在这里没有准确表示。我不认为那是我的问题所在。

有什么想法吗?

4

1 回答 1

2

如果您通过电子邮件将您的 STUN/TURN 流量的wireshark 捕获发送给我们,我们应该能够概述您的问题所在。通过信令发送的消息与 WebRTC 消息是分开但平行的。因此,如果应用程序正在运行但消息是通过信令发送的,那么应用程序的配置可能不正确。

XirSys 通过 UDP over TCP 通过端口 80/443 提供 TURN,因此如果信号正在连接和流动,TURN 也应该如此。

此外,查看您的代码,如果您将 getIceServers 成功处理程序中的 data.d 传递给 PeerJS 配置,那应该会大大减少您的代码 :-) 您正在重建的 ICE 字符串不需要被分解。

问候, Lee XirSys 首席技术官

于 2014-07-12T19:16:47.067 回答