如何处理JsSIP中的音频流?

我正在创建使用JsSIP库来应答通过VoIP SIP提供程序进行的呼叫的React应用程序。

我已经创建了一个具有两个按钮(接受和拒绝)的页面。它在SIP服务器上成功注册了SIP客户端。它也成功接听电话,我可以接听。但是接听电话时我什么都没听到。

注册JsSIP客户端(willReceiveProps因为在更改道具后我有连接信息):

const socketHost = 'wss://' + contactCenter.host + ':' + contactCenter.port

const socket = new JsSIP.WebSocketInterface(socketHost)

const configuration = {

sockets: [socket],

uri: 'sip:' + contactCenter.login + '@' + contactCenter.host,

password: contactCenter.password,

socketHost: socketHost,

}

const coolPhone = new JsSIP.UA(configuration)

coolPhone.on('connected', (e: any) => {

const messages = ServiceContainer.get<MessageManagerInterface>(ServiceTypes.Messages)

messages.addSuccess('SIP connected')

})

coolPhone.on('newRTCSession', (e: any) => {

const messages = ServiceContainer.get<MessageManagerInterface>(ServiceTypes.Messages)

messages.addAlert('New call')

const session = e.session

session.on('failed', this.resetLocalState)

session.on('ended', this.resetLocalState)

const numberRegexp = /\"(\d+)\"/

const fromNumber = (numberRegexp.exec(e.request.headers.From[0].raw))[1]

const toNumber = (numberRegexp.exec(e.request.headers.Contact[0].raw))[1].slice(1)

this.setState({

callReceived: true,

callSession: session,

fromNumber: fromNumber,

toNumber: toNumber,

})

})

coolPhone.start()

处理答案按钮单击的方法:

private answerCall = () => {

const messages = ServiceContainer.get<MessageManagerInterface>(ServiceTypes.Messages)

messages.addSuccess('Call answered')

const callOptions = {

mediaConstraints: {

audio: true, // only audio calls

video: false

},

pcConfig: {

iceServers: [

{ urls: ["stun:stun.l.google.com:19302"] }

],

iceTransportPolicy: "all",

rtcpMuxPolicy: "negotiate"

}

}

this.state.callSession.answer(callOptions)

this.state.callSession.connection.addEventListener('addstream', (event: any) => {

console.log(event)

this.audioElement.srcObject = event.stream

})

this.audioElement.play()

this.setState({

callAnswered: true,

callReceived: false,

})

}

我做错什么了?

回答:

我解决了问题。

问题在于this.audioElement.play()生产线的位置。

我将其移至addstream事件的回调中:

this.state.callSession.connection.addEventListener('addstream', (event: any) => {

console.log(event)

this.audioElement.srcObject = event.stream

this.audioElement.play()

})

现在工作正常。希望您也觉得它有用。

以上是 如何处理JsSIP中的音频流? 的全部内容, 来源链接: utcz.com/qa/432227.html

回到顶部