2017-04-04 84 views
1

我正在一家电信公司工作。我们想要开发一个带有JsSIP库的SIP电话。但我们不能这样做。我们创建一个基本测试形式,如下所示:JsSIP实施

var socket = new JsSIP.WebSocketInterface('*****'); 
var configuration = { 
    sockets : [ socket ], 
    uri  : '*****', 
    password : '*****' 
}; 

var ua = new JsSIP.UA(configuration); 

ua.start(); 

// Register callbacks to desired call events 
var eventHandlers = { 
    'progress': function(e) { 
    console.log('call is in progress'); 
    }, 
    'failed': function(e) { 
    console.log('call failed with cause: '+ e.data.cause); 
    }, 
    'ended': function(e) { 
    console.log('call ended with cause: '+ e.data.cause); 
    }, 
    'confirmed': function(e) { 
    console.log('call confirmed'); 
    } 
}; 

var options = { 
    'eventHandlers' : eventHandlers, 
    'mediaConstraints' : { 'audio': true, 'video': true } 
}; 

var session = ua.call('680', options); 

上面的代码正在工作。我们可以打电话到任何地方,但呼叫用户的声音不会来到我们身边。我怎样才能做到这一点?我们该做什么?有没有人有这个项目的示例代码?

回答

0

如果呼叫已建立,但没有音频路径,则呼叫方/被叫方的SDP端点可能无法互相访​​问。

在这种情况下,呼叫将断开连接,并显示“RTP超时”原因。

这里有一些提示:

  1. 打开JSSIP控制台调试通过运行JsSIP.debug.enable( 'JsSIP:*');

  2. 重新加载页面。

  3. 拨打电话,然后检查浏览器上的控制台日志以获取更多详细信息。

更多关于它:http://jssip.net/documentation/3.0.x/api/debug/

如果您看到了错误的设定SDP的IP地址,外出或进来的,那么ICE候选人是不正确或不恰当顺序。

在这种情况下,需要调整STUN和其他配置设置。 http://jssip.net/documentation/0.3.x/api/ua_configuration_parameters/

此外,请参阅jssip演示页面,查看源代码以及查看附加配置应用的内容/方式。 https://tryit.jssip.net/

1

如果您正在查找示例代码,请随时查看react-sip(帮助将JsSIP嵌入React应用程序的包)的实现。特别是,即使不使用React,您也会发现the source of <SipProvider/> component有用。

也许,您听不到用户声音的原因是因为您的页面上没有HTML5 <audio/> DOM元素,该元素附加到您的JsSIP实例。

这里大约是你应该添加什么:

// in the beginning, e.g. before you create an instance of JsSIP.WebSocketInterface 
var remoteAudio = window.document.createElement('audio'); 
window.document.body.appendChild(remoteAudio); 

// inside rtcSession.on('accepted', function() {...}) 
remoteAudio.src = window.URL.createObjectURL(
    rtcSession.connection.getRemoteStreams()[0] 
); 
remoteAudio.play(); 
// rtcSession comes from an argument in 
// ua.on('newRTCSession', ({ originator, session: rtcSession }) => {}); 

// when no longer need to make calls (e.g. on user logout) 
delete remoteAudio;