为何我的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
相关产品推荐
相关产品推荐

