2014-04-03 29 views
0

我一直在嘗試在瀏覽器之間建立對等連接,以使用數據通道,但我不成功。 每當我更正一個語句時會出現另一個錯誤。爲Web RTC數據通道創建對等連接

首先我使用socket.io和Node.js建立了一個套接字服務器。在服務器上,當任何客戶端連接時,我正在發送'beacon'數據包。在收聽'信標'數據包時,第一個客戶請求加入'房間'。然後,我允許第二個客戶加入同一個「房間」。 第二客戶端連接後,服務器向客戶端1發送一個確認數據包。

然後,客戶端1在設置本地描述之後,向客戶端2發送RTC對等連接'offer'。

if(isChrome)   { 
     localPC = new window.webkitRTCPeerConnection(server, contraints); 
     rslt.innerHTML = "Webkit Variables Set"; 
    }else  { 
     localPC = new mozRTCPeerConnection(server, contraints); 
     rslt.innerHTML = "Mozilla Variables Set"; 
    } 

    localPC.onicecandidate = function(event) { 
     if(event.candidate) 
      localPC.addIceCandidate(event.candidate); 
    }; 

    localPC.onnegotiationneeded = function()  { 
     localPC.createOffer(setOffer, sendFail); 
    }; 

    sendChannel = localPC.createDataChannel("sendDataChannel", {reliable: false}); 

    localPC.ondatachannel = function(event)  { 
     receiveChannel = event.channel; 
     receiveChannel.onmessage = function(event) { 
      rslt.innerHTML = event.data; 
     }; 
    }; 

    localPC.createOffer(setOffer, sendFail); 



function setOffer(offer)  { 

    lDescp = new RTCSessionDescription(offer); 

    localPC.setLocalDescription(lDescp); 

    socket.emit('offer', JSON.stringify(offer)); 

    rslt.innerHTML += "Offer Sent...<br/>";//+offer.sdp;          

}//End Of setOffer()  

客戶端2在接收'offer'時將其設置爲遠程描述並創建'reply'。將「答覆」設置爲本地說明併發送。

   if(message.type == 'offer')  { 

        rDescp = new RTCSessionDescription(message.sdp); 
        localPC.setRemoteDescription(rDescp); 

        localPC.createAnswer( 
         function(answer) { 

          lDescp = new RTCSessionDescription(answer); 
          localPC.setLocalDescription(lDescp); 

          socket.emit('reply', JSON.stringify(answer)); 

         }, sendFail 
        );      

       }else { 

        localPC.addIceCandidate = new RTCIceCandidate(message.candidate); 

       }//End Of IF ELse 

客戶端1在接收到'回覆'時將其設置爲遠程說明和連接應該建立?

localPC.setRemoteDescription(new RTCSessionDescription(message.sdp)); 

但它不工作! Pleease幫助。

回答

1

似乎你得到了正確的流量,雖然我沒有看到整個代碼。 有一件事令我奇怪的是這樣的:

localPC.onicecandidate = function(event) { 
     if(event.candidate) 
      localPC.addIceCandidate(event.candidate); 
}; 

您需要發送的onicecandidate事件給其他同行收到的icecandidate。而不是自己添加它。