我正在研究使用 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/