javascript - 用 Pubnub 替换 Socket io (WebRTC)

标签 javascript node.js webrtc publish-subscribe pubnub

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

现在 socket io 正在处理从客户端和服务器发出的事件。据我了解,当前 Node js 服务器将不再需要处理任何发出的事件,因为不会使用套接字 io,但这就是我遇到的问题。我不确定如何设置客户端以向对方发送他们需要的信息(连接到谁等)

是否有任何简单的例子或 pubnub 的实现被用于一个项目而不是 socket io 或者也许有人可以阐明一些我可能没有看到的东西,谢谢!

编辑:还有任何在 Pubnub 有经验的人,这就是我正在尝试做的事情,甚至可能哈哈

最佳答案

通过 PubNub 交换 ICE 候选者的 WebRTC 信号

目标是在两个对等点之间交换 ICE 候选数据包。 ICE 候选数据包是结构化的有效载荷,其中包含两个对等点之间可能的路径推荐。您可以使用一个库来处理细节问题,例如 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

关于javascript - 用 Pubnub 替换 Socket io (WebRTC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316668/

相关文章:

javascript - Electron js : cannot read property 'showSaveDialog' of undefined

node.js - "Failed to load resource: net::ERR_CONNECTION_REFUSED"用于生产中的 Assets 、css、app.js 和vendor.js(react、babel、webpack)

ffmpeg - 转换 Chrome 生成的 webm 视频很慢

javascript - 我可以在不使用麦克风的情况下录制 <audio> 的输出吗?

javascript - 自定义 JavaScript 滚动条 (jScrollPane) 存在变换比例错误

javascript - jquery .on() 委托(delegate)事件,无法使用 $(this) 访问任何内容

javascript - 如何将 aurelia 版本从 webpack1 升级到 webpack3?

node.js - 使用 express 和 marked 返回呈现的 Markdown

javascript - 获取动态图像的边框颜色然后打印它

webrtc - peerConnection 建立后创建 WebRTC 数据通道