cordova-plugin-iosrtc не работает с sip.js 0.11 в приложении для подвижных ионных js webrtc - PullRequest
0 голосов
/ 23 октября 2018

Я занимаюсь разработкой приложения webrtc для вызовов / видеозвонков на основе технологий Ionic / AngularJS.Приложение работает с sip.js для выполнения вызовов через сервер АТС.Для интеграции IOS с WebRtc приложение работает с cordova-plugin-iosrtc.Когда я пытаюсь подключиться к УАТС для вызова или принятого вызова, приложение выдает ошибки при двух возможных режимах использования cordova-plugin-iosrtc с sip.js

A) Когда я пытаюсь использовать работающую над cordova-plugin-iosrtcодноранговое соединение в режиме плагина iOS ....

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 голосов
/ 02 апреля 2019

Таким образом, более новый SIP.js фактически передает экземпляр RTCSessionDescriptionInit, который хотя и имеет похожую структуру: {sdp: ..., type: ...} инициализации RTCSessionDescription, не принимается реализацией cordova iosrtc.

Я создал исправление для этого в виде пользовательского SDH для SIP.js (поскольку я столкнулся с точно такой же проблемой).Мой пользовательский SDH преобразует объект в новую RTCSessionDescription (...) непосредственно перед передачей в getLocationDescription и setRemoteDescription.

Ссылка на плагин SDH: https://github.com/iotum/cordova-ios-session-description-handler

Надеюсь, это поможет!Wes

...