我正在尝试使用 Web 套接字在客户端之间创建 WebRTC 数据通道。
我列出了一些 ICE 服务器
var rtcsettings = {
iceServers: [
{url: "stun:stun.ekiga.net"},
{url: "stun:stun.voipbuster.com"},
{url: "stun:stun.1.google.com:19302"},
]
};
然后是一个连接函数,它创建一个通道并提供并通过 Web 套接字发送它。
function(them) {
var pc = new RTCPeerConnection(rtcsettings);
self.channel = pc.createDataChannel("gamelink");
console.log(pc, self.channel);
self.peerconnection = pc;
pc.createOffer(function(offer) {
pc.setLocalDescription(new RTCSessionDescription(offer), function() {
self.socket.send(JSON.stringify({
"to": them,
"uuid": uuid,
"offer": offer,
}));
}, pc.close);
}, pc.close);
}
然后在另一端有一个回调,将报价添加到其连接并发送响应。
它还为添加数据通道时设置回调,但这永远不会触发。我错过了什么?
function (message){
var offer = message.offer;
var pc = new RTCPeerConnection(rtcsettings);
pc.ondatachannel = function(ch) {
self.channel = ch;
console.log(self.channel);
}
console.log(pc);
pc.setRemoteDescription(new RTCSessionDescription(offer), function() {
pc.createAnswer(function(answer) {
pc.setLocalDescription(new RTCSessionDescription(answer), function() {
self.socket.send(JSON.stringify({
"to": message.uuid,
"uuid": uuid,
"answer": answer,
}));
}, pc.close);
}, pc.close);
}, pc.close);
self.peerconnection = pc;
}
最后,发起者上还有另一个回调,将响应描述符添加到其连接中。
function(message) {
self.peerconnection.setRemoteDescription(
new RTCSessionDescription(message.answer),
function() { },
self.peerconnection.close);
}
除了套接字内容和数据通道内容之外的所有代码几乎一字不差地取自MDN 基本用法页面。
我正在本地主机上使用 Chrome 进行测试,所以防火墙应该不是问题。
交换发生后,两个连接都有本地和远程描述符集。数据通道readyState
为connecting
。PeerConnection 的iceConnectionState
isnew
和它的signalingState
is stable
。
少了什么东西?