【问题标题】:JsSIP ImplementationJsSIP实现
【发布时间】:2017-04-04 08:34:36
【问题描述】:

我在一家电信公司工作。我们想开发一个带有 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);

上面的代码正在运行。我们可以在任何地方打电话,但呼叫用户的声音不会传到我们这里。我怎样才能做到这一点?我们必须做什么?有人有这个项目的示例代码吗?

【问题讨论】:

    标签: jquery websocket webrtc jssip


    【解决方案1】:

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

    在这种情况下,呼叫将断开,原因是“RTP 超时”。

    这里有一些提示:

    1. 通过运行 JsSIP.debug.enable('JsSIP:*') 来打开 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/

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我一直在做同样的事情。

        我正在尝试在 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)
        

        【讨论】:

          【解决方案4】:
          session.connection.addEventListener('addstream',function(e) {  // Or addtrack
                  remoteAudio.srcObject = e.stream;
                  remoteAudio.play();
          
               });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多