我之前问过这个问题,但没有任何运气...... 我在本教程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,但他们无法提供帮助。 有人有什么想法吗?
答案 0 :(得分:6)
⚠️ TURN服务器未提供 ⚠️
确保您没有进行NAT网络转发。否则,您需要 TURN servers
(未提供)。 TURN Servers代理网络流量并允许受限制的网络视频对话。大多数移动提供商都是基本的开放路由(非NAT)。大多数企业防火墙至少有一个NAT。
STUN提供IP地址。 WebRTC中没有任何内容可以提供在连接客户端之间交换IP地址的方法。这就是PubNub的用武之地。
答案 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() );
}