我正在编写一个视频聊天应用程序,我正在使用谷歌的公共STUN服务器并向xirsys的端点请求远程TURN服务器。当我查看日志时,我注意到正在使用LTE连接向设备发送bag tcp数据包,并且使用WiFi连接与设备一起发送udp数据包。起初,我认为问题是我只使用STUN服务器而不是TURN和STUN服务器。但是,我仍然得到“data.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));
}
}
答案 0 :(得分:0)
事实证明,在网络请求之后设置服务器之前,我已经为ICE服务器启动了配置!问题解决了!