用Pubnub(WebRTC)替换Socket io

时间:2014-06-19 21:40:39

标签: javascript node.js webrtc publish-subscribe pubnub

我正在研究使用Pubnub的服务在对等体之间建立WebRTC连接以获取视频。 有了这个,我希望避免使用我正在使用的socket io,虽然我找不到任何好的例子来演示如何做到这一点。

现在socket io正在处理从客户端和服务器发出的事件。据我所知,当前节点js服务器将不再需要处理任何发出的事件,因为不会使用socket io,但这就是我遇到的问题。我不确定如何设置客户端以相互发信号通知他们需要的信息(连接谁等)

是否有任何简单的例子或实现使用pubnub而不是socket io用于项目,或者有人可能会对我可能没有看到的内容有所了解,谢谢!

编辑:对于任何在Pubnub有经验的人,我正在努力做甚至可能哈哈

1 个答案:

答案 0 :(得分:1)

WebRTC信令通过PubNub

交换ICE候选人

目标是在两个对等体之间交换ICE候选数据包。 ICE candidate packets are structured payloads which contain possible path recommendations between two peers.你可以使用一个lib来处理http://www.sinch.com/这样的细节,下面是你要采取的一般方向:

信令示例代码遵循

<script src="http://cdn.pubnub.com/pubnub-3.6.3.min.js"></script>
<script>(function(){

    // INIT P2P Packet Exchanger
    var pubnub = PUBNUB({
        publish_key   : 'demo',
        subscribe_key : 'demo'
    })

    // You need to specify the exchange channel for the peers to
    // exchange ICE Candidates.
    var exchange_channel = "p2p-exchange";

    // LISTEN FOR ICE CANDIDATES
    pubnub.subscribe({
        channel : exchange_channel,
        message : receive_ice_candidates
    })

    // ICE CANDIDATES RECEIVER PROCESSOR FUNCTION
    function receive_ice_candidates(ice_candidate) {
        // Attempt peer connection or upgrade route if better route...
        console.log(ice_candidate);
        // ... RTC Peer Connection upgrade/attempt ...
    }

    // SEND ICE CANDIDATE
    function send_ice_candidate(ice) {
        pubnub.publish({
            channel : exchange_channel,
            message : ice
        })
    }

生成ICE候选者示例代码遵循:

    // CREATE ICE CANDIDATES
    var pc = new RTCPeerConnection();
    navigator.getUserMedia( {video: true}, function(stream) {
        pc.onaddstream({stream:stream});
        pc.addStream(stream);
        pc.createOffer( function(offer) {
            pc.setLocalDescription(
                new RTCSessionDescription(offer),
                send_ice_candidate, // - SEND ICE CANDIDATE via PUBNUB
                error
            );
        }, error );
    } );

    // ERROR CALLBACK
    function error(e) {
        console.log(e);
    }
})();</script>

等待更多有趣的细节 - https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection