cordova-plugin-iosrtc在可移动离子js webrtc应用程序上不适用于sip.js 0.11

时间:2018-10-23 15:06:09

标签: ionic-framework webrtc cordova-plugins freeswitch

我正在基于Ionic / AngularJS技术开发一个webrtc通话/视频通话应用程序。该应用程序与sip.js一起通过PBX服务器进行呼叫操作。对于IOS与WebRtc的集成,该应用程序可与cordova-plugin-iosrtc一起使用。当我尝试与PBX连接以拨打电话或接听电话时,应用程序在sip.js的cordova-plugin-iosrtc的两种可能的使用模式上引发错误

A)当我尝试在对等连接iOS插件模式下使用cordova-plugin-iosrtc ....

telephoneService.js(Angular JS)

var pc = new cordova.plugins.iosrtc.RTCPeerConnection({
    iceServers: []
});

cordova.plugins.iosrtc.getUserMedia(
  // constraints
  { audio: true, video: true },
  // success callback
  function (stream) {
    console.log('got local MediaStream: ', stream);
    pc.addStream(stream);
  },
  // failure callback
  function (error) {
    console.error('getUserMedia failed: ', error);
  }
);

var sessionDescriptionHandlerOptions = {

                constraints: {
                    audio: audioId,
                    video: videoId
                },


                media: {
                    local: {
                      audio: document.getElementById('localAudio')
                    },
                    remote: {
                      audio: document.getElementById('remoteAudio')
                    }
                },


            extraHeaders: extraHeaders

            }

}

userAgent.invite('sipusertocall', sessionDescriptionHandlerOptions);

收到下一个错误:

undefined is not a object evaluating 'environment.navigator.mediaDevices.getUserMedia' (sip.js lib)

B)

cordova.plugins.iosrtc.registerGlobals(); use iosrtc plugin with webrtc native api (navigator.mediaDevice.getUserMedia(), ....)

    navigator.mediaDevices.getUserMedia(
     function (stream) {
        console.log('got local MediaStream: ', stream);

        window.stream = stream;
      },
      // failure callback
      function (error) {
        console.error('getUserMedia failed: ', error);
      }
    )

    var sessionDescriptionHandlerOptions = {

                    constraints: {
                        audio: audioId,
                        video: videoId
                    },


                    media: {
                        local: {
                          audio: document.getElementById('localAudio')
                        },
                        remote: {
                          audio: document.getElementById('remoteAudio')
                        }
                    },


                extraHeaders: extraHeaders

            }

    userAgent.invite('sipusertocall', sessionDescriptionHandlerOptions);

App receive from sip.js next error from PBX: Failed:WebRTC Error 

客户端同时显示下一个错误:

  

setLocalDescription()必须以RTCSessionDescription实例作为第一个参数来调用

1 个答案:

答案 0 :(得分:0)

因此,较新的SIP.js实际上正在传递RTCSessionDescriptionInit实例,尽管该实例具有类似的结构:{sdp:...,type:...}与RTCSessionDescription init相同,但是cordova iosrtc实现不接受该实例。

我已经以针对SIP.js的自定义SDH的形式为此创建了一个修复程序(因为我遇到了完全相同的问题)。我的自定义SDH在将对象传递到getLocationDescription和setRemoteDescription之前,将其转换为新的RTCSessionDescription(...)。

链接到SDH插件: https://github.com/iotum/cordova-ios-session-description-handler

希望这会有所帮助! 韦斯