2

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)同时制作两个,但不能使用最新版本。

4

1 回答 1

0

当我停止/暂停当前音频并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()
    })
  }
于 2019-05-09T11:14:19.533 回答