Несколько вызовов с использованием SIP.js (версия 0.13.7) - PullRequest
1 голос
/ 09 мая 2019

Я использую sip.js (version 0.13.7) для голосового вызова.

Я получаю поток мультимедиа и подключаю его следующим образом:

let mediaStream


  getMedia() {
    if (navigator.getUserMedia) {
      navigator.getUserMedia(
        { audio: true, video: false },
        function(stream) {
          mediaStream = stream
        },
        function(err) {
          console.log('error in getUserMedia: ' + err.name)
        }
      )
    } else {
      console.log('getUserMedia not supported')
    }
  }

  handleInvite(session) {
    handleMedia(session)
    session.accept(mediaStream)
  }

  handleMedia(session) {
    session.on('trackAdded', function() {
      var remoteStream = new MediaStream()
      var pc = session.sessionDescriptionHandler.peerConnection
      pc.getReceivers().forEach(receiver => {
        remoteStream.addTrack(receiver.track)
      })
      incomingAudioEl.srcObject = remoteStream
      incomingAudioEl.play()
    })
  }

Это работает хорошо для одного вызова, но яя не могу сделать несколько одновременных вызовов, событие, если я пытаюсь позвонить handleInvite() с новым сеансом, нет звука и слышен только первый звонок.

Нет хорошей документации о том, как это сделать наВеб-сайт sip.js и многие решения, доступные в Интернете, являются предыдущими несовместимыми версиями.

Когда я ищу в Google «несколько вызовов sip.js», первый результат - https://sipjs.com/guides/reuse-mediastreams/,, который не существует..

Примечание: Мне удалось сделать два одновременно, используя более старую версию SIP, т.е. 0,7.0, но не с самой последней.

1 Ответ

0 голосов
/ 09 мая 2019

Несколько аудио работали для меня, когда я останавливал / приостанавливал текущее аудио и удалял srcObject из аудиоэлемента, а затем назначал новые дорожки. Теперь моя функция handleMedia выглядит следующим образом:

  handleMedia(session) {
    session.on('trackAdded', function() {
      incomingAudioEl.pause()
      incomingAudioEl.srcObject = null
      var remoteStream = new MediaStream()
      var pc = session.sessionDescriptionHandler.peerConnection
      pc.getReceivers().forEach(receiver => {
        remoteStream.addTrack(receiver.track)
      })
      incomingAudioEl.srcObject = remoteStream
      incomingAudioEl.play()
    })
  }
...