You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的WebRTC仅局域网可用?跨网连接失败求助

跨网WebRTC连接问题排查建议

首先你的核心问题大概率出在TURN服务器的配置上,先从这里入手:

  • TURN服务器必须配置有效的认证信息
    你代码里的TURN用户名和密码是空的,这会直接导致TURN服务器拒绝你的中继请求。必须填回正确的用户名和密码,另外建议补充TCP传输参数(避免UDP被防火墙拦截),修改后的配置参考:
const iceConfiguration = {
  iceServers: [
    {
      urls: "stun:stun.l.google.com:19302"
    },
    {
      urls: 'turn:relay1.expressturn.com:3478?transport=tcp',
      username: '你的真实用户名',
      credential: '你的真实密码'
    }
  ]
}
  • 验证ICE候选的收集与交换
    跨网连接依赖STUN生成的服务器反射候选,或TURN的中继候选。你需要监听icecandidate事件,确认是否有relay类型的候选生成:
peerConnection.onicecandidate = (event) => {
  if (event.candidate) {
    console.log('ICE候选类型:', event.candidate.type);
    // 务必将所有候选完整发送给远端
  }
};

如果控制台没有输出relay类型的候选,说明TURN服务器配置错误,或者你的网络无法访问该TURN服务器。

  • 确认信令服务器的跨网可用性
    局域网内信令服务器用本地IP就能通信,但跨网时必须使用公网IP或域名,同时要确保信令服务器的端口在防火墙、路由器上已开放,双方都能正常连接到信令服务器交换SDP和ICE候选。

  • 检查媒体流的正确添加
    确保在PeerConnection创建后,已经将本地媒体流的轨道添加到连接中,没有媒体流的话,即使ICE连接成功也会表现为“无法工作”:

navigator.mediaDevices.getUserMedia({ video: true, audio: true })
  .then(stream => {
    stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
  });
  • 查看浏览器控制台的错误信息
    打开开发者工具的控制台,直接看是否有ICE连接失败、TURN认证错误、信令超时等提示,这些信息是定位问题最直接的依据。

内容的提问来源于stack exchange,提问作者MJDawson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:52:44