为什么在webkitPeerConnection00(stun,onSignal)onSignalcallback没有被调用?

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

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来了解对等连接的工作原理 ,其中一个页面本身既实现了调用者又实现了被调用者。 它没有为我工作,因为它是在新的RTCIceCandidate(候选)抛出错误,错误“ReferenceError:RTCIceCandidate未定义”。 有没有其他的语法来创buildIce Candidate?

提前致谢。

您应该尝试查看此应用程序代码,如果您使用Google Chrome JavaScriptdebugging工具浏览代码,那么可以很容易地掌握其中的内容:

https://apprtc.appspot.com/

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

webkitPeerConnection00将IceCandidates传递给callback,它不传递消息。 所以为了使这个工作,一个报价必须发送到其他客户,并从那里收到答案。

 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(); } 

//接收客户端2上的客户端1的报价,将报价设置为remoteDescription,创build答案,发送给客户端1,并将答案设置为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候选人=新IceCandidate(标签,候选人);

// pc.processIceMessage(候选人);

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