1

我正在尝试在 Windows 系统上的两个 chrome(版本 20.0.1132.57)窗口之间创建对等连接。我将我的应用程序托管在 linux 机器上的 node.js 服务器上并使用 socket.io。这两台机器在同一个内部网络上。我没有使用 stun 服务器。是否需要在这种情况下使用 STUN,因为两台机器都是同一个内部网络的一部分?如果不是,那么为什么不调用 onSignal 回调?

  var stun=null;

  function connect(){
  createPeer();
  pc.addStream(localstream);
  }

  function createPeer(){ 
  pc = new webkitPeerConnection00(stun, onSignal);

  pc.onadddstream=onRemoteStreamAdded;
  pc.onremovestream=onRemoteStreamRemoved;
  }

  function onSignal(message){   
  socket.send(message)//sending this to server
  }

  //on receiving message 
  socket.on('message',onMessage);
  function onMessage(message){
   if(pc==null){
             createPeer();
             pc.addStream(localstream);
                }
   pc.processSignallingMessage(message);
   }

///服务器端

     socket.on('message', function(message){
     socket.broadcast.send(message);//broadcasting received message to other peers
     });

我已经使用了这个演示http://html5videoguide.net/presentations/WebDirCode2012/websocket/webrtc.html

我试图通过这个http://www.html5rocks.com/en/tutorials/webrtc/basics/#toc-sans来了解对等连接的工作原理,其中在一个页面本身上实现了调用者和被调用者。它对我不起作用,因为它在 new RTCIceCandidate(candidate), error "ReferenceError: RTCIceCandidate is not defined" 中抛出错误。有没有其他创建 Ice Candidate 的语法?

提前致谢。

4

2 回答 2

1

您应该尝试查看此应用程序代码,如果您使用 Google Chrome JavaScript 调试工具查看代码,很容易掌握其中发生的情况:

https://apprtc.appspot.com/

您还必须从http://dev.chromium.org/getting-involved/dev-channel安装更新的 Chrome 开发版本。您使用的版本仍在使用旧的信令协议 ROAP,没有 ICE 代理等。

于 2012-10-05T15:22:57.177 回答
1

webkitPeerConnection00 将 IceCandidates 传递给回调,它不传递消息。因此,要完成这项工作,必须向其他客户发送报价,并从那里收到答复。

pc =new webkitPeerConnection00(stun, onIceCandidate);

function onIceCandidate(candidate, moreToFollow) {
if (candidate) {
   //send candidate.toSdp() to other client with candidate.label 
}

if (!moreToFollow) {
  console.log("End of candidates.");
}

}

//来自client1的报价

  function makeOffer()
{
  var offer = pc.createOffer({'has_audio':true, 'has_video':true});
  pc.setLocalDescription(pc.SDP_OFFER, offer);
  //send offer.toSdp() to peer
  pc.startIce();
}

//在client2上收到来自client1的offer,将offer设置为remoteDescription,创建答案,发送给client1并将答案设置为localDescription

   function doAnswer(){
    var offer = pc.remoteDescription;
    var answer = pc.createAnswer(offer.toSdp(), {'has_audio':true, 'has_video':true});
    pc.setLocalDescription(pc.SDP_ANSWER, answer);
    //send answer.toSdp() 
    pc.startIce();
    }

//在client1上从client2接收到答案,将答案设置为remoteDescription

//接收候选人时,var Candidate = new IceCandidate(label, Candidate);

// pc.processIceMessage(候选人);

注意:此代码段不适用于 RTCPeerConnection(新规范)请参阅http://dev.w3.org/2011/webrtc/editor/webrtc.html

于 2012-10-11T07:13:52.330 回答