3

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

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,但他们无法提供帮助。有人有什么想法吗?

4

2 回答 2

7

WebRTC 双 NAT 哦不!

⚠️ 未提供转服务器⚠️

确保您不在 NAT 网络转发上。否则,您将需要TURN servers(未提供)。TURN 服务器代理网络流量并允许受限的网络视频对话。大多数移动提供商都是基本的开放路由(非 NAT)。大多数公司防火墙至少有一个 NAT。

  • 流二进制视频。NATed 网络需要,但不是必需的。
  • STUN解析 IP 地址。点对点发现。
  • PUBNUB发送 IP 地址。

网络RTC

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

STURN 与 TURN 服务器 WebRTC

WebRTC 资源和 SDK 链接

于 2016-07-25T18:06:47.493 回答
2

所以,iv'e 终于设法使它工作。我只是按照此处提到的教程将 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() );
}
于 2016-07-26T12:33:21.270 回答