代码之家  ›  专栏  ›  技术社区  ›  user6906805

LTE-to-WIFI连接不适用于WebRTC连接,但WIFI-to-WIFI连接适用

  •  1
  • user6906805  · 技术社区  · 7 年前

    我正在编写一个视频聊天应用程序,目前正在使用googles public STUN服务器,并向xirsys端点请求远程TURN服务器。当我查看日志时,我注意到使用LTE连接的设备正在发送bag tcp数据包,使用WiFi连接的设备正在发送udp数据包。起初,我认为问题是我只使用了STUN服务器,而不是TURN和STUN服务器。然而,我仍在获取数据。sdp未定义和/或icestateconnection卡在检查状态。请有人不仅回顾和分析代码及其谬误,而且解释为什么会发生这种情况,并提供您所知道的任何资源来帮助我理解这个问题。谢谢

    [代码]

    //fetch for ice servers
    if (servers) {
      console.log(`servers: ${JSON.stringify(servers.v.iceServers, null, 2)}`);
      iceServers = [
        ...servers.v.iceServers,
        {"url": "stun:stun.l.google.com:19302"},
        {"url":'stun:stun1.l.google.com:19302'},
        {"url":'stun:stun2.l.google.com:19302'},
        {"url":'stun:stun3.l.google.com:19302'},
        {"url":'stun:stun4.l.google.com:19302'},
      ];
      return;
    }
    
    //configuration
    pc = new RTCPeerConnection({"iceServers": iceServers};);
    
    //exchange to signaling server
    exchange(data) {
    const fromId = data.from;
    
    if (!pc)
      this.createPC(fromId, false);
    
    console.log(`Data: ${JSON.stringify(data, null, 2)}`);
    console.log(`Data.sdp ${data.sdp}`);
    if (data.sdp) {
      console.log('exchange sdp', data.sdp);
      pc.setRemoteDescription(new RTCSessionDescription(data.sdp), function () {
        if (pc.remoteDescription.type === "offer")
          pc.createAnswer(function(desc) {
            console.log('createAnswer', desc);
            pc.setLocalDescription(desc, function () {
              console.log('setLocalDescription', pc.localDescription);
              socket.emit('exchange', {'to': fromId, 'sdp': pc.localDescription });
            }, logError);
          }, logError);
      }, logError);
    } else {
      console.log('exchange candidate', data);
      pc.addIceCandidate(new RTCIceCandidate(data.candidate));
    }
    

    }

    1 回复  |  直到 7 年前
        1
  •  0
  •   user6906805 user6906805    7 年前

    事实证明,在网络请求后设置服务器之前,我就启动了ICE服务器的配置!问题解决了!