我在一家电信公司工作。我们想开发一个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);
上面的代码正在工作。我们可以在任何地方打电话,但呼叫用户的声音不会来找我们。我该怎么做?我们必须做什么?有没有人有这个项目的示例代码?
如果呼叫正在建立,但没有音频路径,则可能彼此无法访问呼叫者/被呼叫者的 SDP 终结点。
在这种情况下,呼叫将断开连接,原因为"RTP 超时"。
以下是一些提示:
通过运行 JsSIP.debug.enable('JsSIP:*')打开 JSSIP 控制台调试;
-
重新加载页面。
-
拨打电话并检查浏览器上的控制台日志以获取更多详细信息。
更多关于它: 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/
如果您正在寻找示例代码,请随时查看react-sip
的实现(一个有助于将 JsSIP 嵌入到 React 应用程序中的包)。特别是,你可能会发现<SipProvider/>
组件的源代码很有用,即使不使用 React。
也许,您听不到用户声音的原因是因为您的页面上没有附加到 JsSIP 实例的 HTML5<audio/>
DOM 元素。
以下是您应该添加的大致内容:
// 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;
session.connection.addEventListener('addstream',function(e) { // Or addtrack
remoteAudio.srcObject = e.stream;
remoteAudio.play();
});