【问题标题】:Creating Peer Connection for Web RTC Data Channel为 Web RTC 数据通道创建对等连接
【发布时间】:2014-04-03 14:34:49
【问题描述】:

我一直在尝试在浏览器之间建立对等连接,以使用数据通道,但我没有成功。 每次我更正一个语句时,都会出现另一个错误。

首先,我使用 socket.io 和 Node.js 建立了一个套接字服务器。在服务器中,当任何客户端连接时,我正在发送“信标”数据包。在侦听“信标”数据包时,第一个客户端请求加入“房间”。然后我允许第二个客户加入同一个“房间”。 一旦第二个客户端连接,服务器就会向客户端 1 发送一个确认数据包。

然后,在设置本地描述后,客户端 1 向客户端 2 发送 RTC Peer Connection '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 在收到“报价”时将其设置为远程描述并创建“回复”。将“回复”设置为本地描述,然后发送。

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

但它不起作用!请帮忙。

【问题讨论】:

    标签: webrtc


    【解决方案1】:

    看起来你的流程是正确的,虽然我没有看到完整的代码。 让我感到奇怪的一件事是:

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

    您需要将在 onicecandidate 事件中收到的 icecandidate 发送给其他对等方。而不是自己添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多