Кто-нибудь знает, как использовать sip.js версии 0.8 или выше с электронным (настольное приложение) или с Ionic (мобильное приложение)? - PullRequest
0 голосов
/ 06 ноября 2018

Я занимаюсь разработкой веб-приложения для телефонных звонков, используя sip.js для сигнализации и webrtc для управления мультимедиа. С браузерами все работает отлично. Сейчас мы пытаемся разработать его для настольных компьютеров, использующих Electron (Chromium), и для мобильных устройств, использующих ionic / cordova. Для IOS cordova-plugin-iosrtc иметь webrtc и для андроида родной webrtc. Обе мобильные среды прекрасно работают с sip 0.7, но с идентичной или более поздней версией sip 0.8 ни одно из них не может получить локальные медиа-устройства.

Например, в электроне :

session.on ('trackAdded', function () {

    var pc = session.sessionDescriptionHandler.peerConnection;

    // Gets remote tracks
    var remoteStream = new MediaStream ();
    pc.getReceivers (). forEach (function (receiver) {
        remoteStream.addTrack (receiver.track);
    });

    remoteVideo.srcObject = remoteStream;
    remoteVideo.play ();

    // Gets local tracks
    alert (pc.getSenders ())
    var localStream = new MediaStream ();

    pc.getSenders (). forEach (function (sender) {
        localStream.addTrack (sender.track);
    });

    localVideo.srcObject = localStream;
    localVideo.play ();

});

ошибка

Tue Nov 06 2018 16:17:33 GMT+0100 (CET) | 
sip.invitecontext.sessionDescriptionHandler | unable to acquire streams
LoggerFactory.print @ sip.js:516
LoggerFactory.(anonymous function) @ sip.js:530
Logger.(anonymous function) @ sip.js:525
(anonymous) @ sip.js:8816
sip.js:516 TypeError: pc.getSenders is not a function
at InviteClientContext.<anonymous> (telephoneservice.js:796)
at InviteClientContext.EventEmitter.emit (sip.js:662)
at SessionDescriptionHandlerObserver.trackAdded (sip.js:8963)
at SessionDescriptionHandler.<anonymous> (sip.js:8797)
at <anonymous>

Нечто подобное происходит с IOS ...

Доброе утро

1 Ответ

0 голосов
/ 07 ноября 2018

Используемая вами версия электрона ( 1.8.4 ) не поддерживает sip.js 0.8 new api , который, в свою очередь, поддерживает все последние версии основных браузеров .

Об изменениях с версии 0.7.x см. Заметки о выпуске на GitHub

Обработчик описания сеанса заменяет обработчик носителя. Смотрите новые документы для получения дополнительной информации. Это критическое изменение API от 0.7.X.

Вот почему вы получаете это

sip.js:516 TypeError: pc.getSenders is not a function

Потому что в то время ( электрон 1.8.4 / Chrome 59.0.3071.115 ) эта функция еще не была реализована.

WEBRTC CHROME M64

PSA: addTrack (), removeTrack (), ontrack и getSenders ()

Значительные части RTP Media API поставляются для совместимых со спецификацией способов обработки потоков и дорожек RTCPeerConnection.

Новые API, хотя еще не полностью реализованы (более подробно здесь), позволяют приложениям отойти от устаревших addStream () / removeStream () / getLocalStreams ().

Добавлено в RTCPeerConnection: addTrack (), removeTrack (), getSenders () и ontrack.

Новый интерфейс: RTCRtpSender (только атрибут track).

...