我已经成功地传达了从A到B的WebRTC连接的报价,答案和冰候选人。此时,连接卡在状态。启动器(A)似乎在一段时间后超时或什么,并切换到状态,而它的远程(B)则永久停留在状态。"connecting""failed""connecting"
任何帮助将不胜感激。
创建对等节点(A 和 B):
let peer = new RTCPeerConnection({
iceServers: [
{
urls: [
"stun:stun1.l.google.com:19302",
"stun:stun2.l.google.com:19302",
],
},
{
urls: [
"stun:global.stun.twilio.com:3478?transport=udp",
],
},
],
iceCandidatePoolSize: 10,
});
创建报价 (A):
peer.onnegotiationneeded = async () => {
offer = await peer.createOffer();
await peer.setLocalDescription(offer);
};
收集冰候选者(A):
peer.onicecandidate = (evt) => {
if (evt.candidate) {
iceCandidates.push(evt.candidate);
} else {
// send offer and iceCandidates to B through signaling server
// this part is working perfectly
}
};
创建答案并填充候选冰 (B):
await peer.setRemoteDescription(offer);
let answer = await this._peer.createAnswer();
await peer.setLocalDescription(answer);
// send answer back to A through signaling server
for (let candidate of sigData.iceCandidates) {
await peer.addIceCandidate(candidate);
}
从 B 到信令服务器 (A) 的应答:
await peer.setRemoteDescription(answer);
检测连接状态更改(A 和 B):
peer.onconnectionstatechange = () => {
console.log("state changed")
console.log(peer.connectionState);
}
另请注意,有两次成功连接,但我还没有看到它再次工作。
编辑:我忘了提到我也在创建一个数据通道(没有这个事件似乎不会调用)。这将在构造并附加任何事件处理程序后立即调用。onicecandidateRTCPeerConnection
let channel = peer.createDataChannel("...", {
id: ...,
ordered: true,
});
编辑2:正如@jib建议的那样,我现在也在收集B中的冰候选者,并把他们送回A进行添加。但是,完全相同的问题仍然存在。
编辑3:它似乎连接时,我第一次硬重新加载A的网页和B的网页.连接再次停止工作,直到我再做一次硬重新加载。有没有人知道为什么会这样?至少我应该能够暂时继续开发,直到我能弄清楚这个问题。
编辑4:我删除了我正在使用的构造函数,并将构造函数留空。不知何故,它现在更可靠了。但是我还没有在iOS Safari上获得成功的连接!iceServersRTCPeerConnection
POPMUISE
幕布斯6054654
相关分类