为什么在webkitPeerConnection00(stun,oneSignal)中没有调用oneSignal回调?

时间:2012-10-05 06:22:26

标签: node.js webkit webrtc

我正在尝试在Windows系统上的两个chrome(版本20.0.1132.57)窗口之间创建peerconnection。我将我的应用程序托管在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来了解对等连接,其中一个页面本身都是调用者和被调用者。它对我没有用,因为它在新的RTCIceCandidate(候选者)中引发错误,错误" ReferenceError:RTCIceCandidate未定义" 。 是否还有其他语法来创建Ice Candidate?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

https://apprtc.appspot.com/

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

答案 1 :(得分: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的商品,将商品设置为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的回答,将answer设置为remoteDescription

//接收候选人,var candidate = new IceCandidate(标签,候选人);

// pc.processIceMessage(候选人);

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