首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启动WebRTC数据通道?

如何启动WebRTC数据通道?
EN

Stack Overflow用户
提问于 2015-03-01 03:55:36
回答 2查看 483关注 0票数 2

我正在尝试使用web套接字在客户端之间创建一个WebRTC数据通道。

我列出了一些ICE服务器

代码语言:javascript
复制
var rtcsettings = {
  iceServers: [
    {url: "stun:stun.ekiga.net"},
    {url: "stun:stun.voipbuster.com"},
    {url: "stun:stun.1.google.com:19302"},
  ]   
};

然后有一个连接函数,它创建一个通道,提供并通过web套接字发送它。

代码语言:javascript
复制
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);
}

然后,在另一端有一个回调,该回调将提供添加到其连接并发送响应。

它还会在添加数据通道时设置一个回调,但它从不触发。我遗漏了什么?

代码语言:javascript
复制
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;
}

然后,最后在启动器上有另一个回调,将响应描述符添加到它的连接中。

代码语言:javascript
复制
function(message) {
  self.peerconnection.setRemoteDescription(
      new RTCSessionDescription(message.answer),
      function() { },
      self.peerconnection.close);
}

除了套接字和数据通道之外的所有代码几乎都是从MDN Basic Usage页面逐字提取的。

我在本地主机上使用Chrome进行测试,所以防火墙应该不是问题。

交换发生后,两个连接都有一个本地和远程描述符集。数据信道readyStateconnecting。对等连接的iceConnectionStatenew,其signalingStatestable

遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-03-01 05:29:37

你需要处理ICE考生。

上,的两端都需要这样的回调:

代码语言:javascript
复制
pc.onicecandidate = function(e) {
  if(e.candidate) {
    self.socket.send(JSON.stringify({
      "to": message.uuid,
      "uuid": uuid,
      "candidate": e.candidate,
    }));
  }
};

处理程序

代码语言:javascript
复制
callbacks["candidate"] = function(message) {
  console.log(message)
  self.peerconnection.addIceCandidate(new RTCIceCandidate(message.candidate));
}
票数 3
EN

Stack Overflow用户

发布于 2015-03-01 06:38:04

将这些设置添加到您的RTCPeerConnection

代码语言:javascript
复制
var optionalRtpDataChannels = {
  optional: [{RtpDataChannels: true}]
};
var pc = new RTCPeerConnection(rtcsetting, optionalRtpDataChannels);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28786173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档