PubNub webrtc仅在本地网络上工作

时间:2016-07-25 16:30:23

标签: javascript webrtc pubnub stun turn

我之前问过这个问题,但没有任何运气...... 我在本教程https://www.pubnub.com/blog/2014-10-21-building-a-webrtc-video-and-voice-chat-application/之后遇到了问题。 我写了代码,它在本地网络上完美运行,但是当我尝试连接远程客户端(即不在同一网络上)时,代码不再起作用了。它只显示一个黑屏,客户端的视频应该是。

phone.receive(function(session){
    session.connected(function(session){
        $("#vid-box").append(session.video); //outputs black screen
    });

    session.ended(function(session) {alert("Call ended: "+session.number});
});

我甚至联系了PubNub,但他们无法提供帮助。 有人有什么想法吗?

2 个答案:

答案 0 :(得分:6)

WebRTC双NAT哦不!

  

⚠️ TURN服务器未提供 ⚠️

确保您没有进行NAT网络转发。否则,您需要 TURN servers (未提供)。 TURN Servers代理网络流量并允许受限制的网络视频对话。大多数移动提供商都是基本的开放路由(非NAT)。大多数企业防火墙至少有一个NAT。

  • TURN Streams BINARY VIDEO。 需要NATed网络,但不是必需的。
  • STUN 解析IP地址。 Peer to Peer发现。
  • PUBNUB 发送IP地址。

WebRTC

  

STUN提供IP地址。 WebRTC中没有任何内容可以提供在连接客户端之间交换IP地址的方法。这就是PubNub的用武之地。

STURN versus TURN server WebRTC

WebRTC资源和SDK链接

答案 1 :(得分:2)

所以,我终于设法让它发挥作用。 我只是按照这里提到的教程将Turn / Stun服务器添加到pubnub调用函数:https://xirsys.com/pubnub-part-2/ 非常感谢@PubNub的建议。

function get_xirsys_servers() {
    var servers;
    $.ajax({
        type: 'POST',
        url: 'https://service.xirsys.com/getIceServers',
        data: {
            room: 'default',
            application: 'default',
            domain: 'www.thedomainyoucreated.com',
            ident: 'yourxirsysident',
            secret: 'secret-token-from-xirsys-dash',
        },
        success: function(res) {
            res = JSON.parse(res);
            if (!res.e) servers = res.d.iceServers;
        },
        async: false
    });
    return servers;
}

//Request to connect to Remote User
function makeCall( remoteId ){
    if (!window.phone) alert("Login First!");
    else if( !remoteId ) alert("The call id is missing or invalid!");
    else phone.dial( remoteId, get_xirsys_servers() );
}