PeerJS:iceConnectionState断开连接,关闭与[userid]的连接

时间:2017-04-12 11:37:56

标签: javascript webrtc peerjs

我将[{3}}用于我的应用程序[语音和视频聊天应用程序],一切运行良好,连接到同行,视频和语音呼叫,工作正常,同时开发和测试在同一网络上完成,直到我托管在线申请。它停止连接到同行并继续报告

PeerJS:iceConnectionState已断开连接,关闭与[userid]的连接

错误:与[userid]的连接协商失败。     在RTCPeerConnection.pc.oniceconnectionstatechange [as onicechange]。

有关解决此问题的任何想法吗?

2 个答案:

答案 0 :(得分:1)

我找到了问题的解决方案。

我不得不从Twilio购买ICE和TURN服务器来修复它。这为我提供了可靠的连接和更快的消息传递。

你可以试试。

答案 1 :(得分:0)

找到了这个答案,并同意Aminu的看法。我发现Twilio的TURN服务器是一个很好的解决方案。我以为我会提供更多细节,以防它对任何人都有帮助。

我已经有一个Twilio帐户,因此变得更加简单。

我做了一个PHP函数来给我一些Ice Server。这样...

define("TWILIO_ACC_ID","AC12345etc...");
define("TWILIO_AUTH_TOKEN","8675309");

require_once '/path/to/my/Twilio/autoload.php';
use Twilio\Rest\Client;

function twilio_iceServers() {
    $twilio=new Client(TWILIO_ACC_ID,TWILIO_AUTH_TOKEN);
    
    $token = $twilio->tokens->create();
    
    return json_encode($token->iceServers);

}

然后针对我的JavaScript,像这样在我的Ice服务器中加载

var twilio_iceServers=<?php print(twilio_iceServers()); ?>;

然后将这些ice服务器包含在我的peerJS配置中,如下所示:

var peer_options={
    key:'myKey',
    host:'my.host.com',
    port: 443,
    secure: true,
    config: {iceServers:twilio_iceServers}
};

似乎这些Ice Server在约一天后到期。由于使用我的应用程序,人们可能一次只能将窗口打开几天,因此我不得不建立一种方法来更新这些服务器。

//returns current time stamp in seconds
function now() {
    return Math.floor(Date.now() / 1000);
}

//some variable that keeps track of whether I'm on a call or not
var call_status=null;

//save the current time stamp into the ice servers object on page load
twilio_iceServers.date=now();

//do a check every 60 seconds to see if the ice servers have expired.  yes... not 12 hours
setInterval(function(){

    //if ice server issued date is more than 12 hours ago AND we're not on a call.  we renew the ice servers.  If we are on a call, this will run about a minute after we get off the call.  This is why the setInterval is set to be 1 minute instead of 12 hours.
    if (twilio_iceServers.date<(now()-43200) && !call_status) {
        
        $.post("/page/on/my/server/that/just/sends/back/twilio_iceServers",{},function(data) {
            if (data) {
                //save the new ice servers
                twilio_iceServers=JSON.parse(data);
                //save the new date of the server
                twilio_iceServers.date=now();
                
            }
        });
        
    }

},60000);

这是完成这一切的真正方法吗?我不知道!但这对我有用。在那里。