2

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 を使用してテストしているので、ファイアウォールは問題になりません。

交換が行われると、両方の接続にローカルおよびリモートの記述子が設定されます。データチャンネルreadyStateconnecting. PeerConnection のiceConnectionStateisnewとそのsignalingStateis stable

何が欠けていますか?

4

2 に答える 2

0

これらの設定を RTCPeerConnection に追加します

var optionalRtpDataChannels = {
  optional: [{RtpDataChannels: true}]
};
var pc = new RTCPeerConnection(rtcsetting, optionalRtpDataChannels);
于 2015-02-28T22:38:04.467 に答える