我正在使用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)同时进行两个操作,但不能使用最新的sip版本。
答案 0 :(得分: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()
})
}