我正在尝试在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?
提前致谢。
答案 0 :(得分:1)
您应该尝试查看此应用程序代码,如果您使用Google Chrome JavaScript调试工具查看代码,则可以很容易地掌握其中的内容:
您还必须从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