我在一家电信公司工作。我们想开发一个带有JsSIP库的SIP电话。但我们不能这样做。我们创建一个基本的测试形式,如下所示:
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 :(得分: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;
答案 1 :(得分:0)
如果呼叫已建立,但没有音频路径,则呼叫者/被呼叫者的SDP端点可能无法相互访问。
呼叫将断开原因&#34; RTP超时&#34;在那种情况下。
以下是一些提示:
通过运行JsSIP.debug.enable(&#39; JsSIP:*&#39;)来打开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/
答案 2 :(得分:0)
session.connection.addEventListener('addstream',function(e) { // Or addtrack
remoteAudio.srcObject = e.stream;
remoteAudio.play();
});
答案 3 :(得分:0)
我一直在与此相同。
我正在尝试在nodejs中运行此代码。在测试环境中使用本地pbx设置
每次我浏览我的端点时,都会给我一个未定义的错误窗口。 我的目标是尝试使用我的100分机号达到1000分机号
请检查以下代码
app.get('/api/sip/outbound' , (req, res) => {
var socket = new JsSIP.WebSocketInterface('wss://10.110.3.230:7443');
var configuration = {
sockets : [ socket ],
uri : 'sip:100@10.110.3.230',
password : '100'
};
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('1000', options);
})
下面的错误
at RTCSession.connect (/home/local-dev/Projects/PBX/mobile_pbx/api/node_modules/jssip/lib-es5/RTCSession.js:269:7)
at UA.call (/home/local-dev/Projects/PBX/mobile_pbx/api/node_modules/jssip/lib-es5/UA.js:241:15)
at /home/local-dev/Projects/PBX/mobile_pbx/api/app.js:50:22
at Layer.handle [as handle_request] (/home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/layer.js:95:5)
at next (/home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/layer.js:95:5)
at /home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/index.js:335:12)
at next (/home/local-dev/Projects/PBX/mobile_pbx/node_modules/express/lib/router/index.js:275:10)