gpt4 book ai didi

javascript - 如何在 JsSIP 中处理音频流?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:44 25 4
gpt4 key购买 nike

我正在创建 React 应用程序,它使用 JsSIP 库来接听通过 VoIP SIP 提供商发出的调用。

我已经创建了一个包含两个按钮(接受和拒绝)的页面。它成功地在 SIP 服务器上注册了 SIP 客户端。它也成功接听电话,我可以接听。但是我在接听电话时听不到任何声音。

注册 JsSIP 客户端(在 willReceiveProps 中,因为我有 props 更改后的连接信息):

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()
})

现在一切正常。希望您也觉得它有用。

关于javascript - 如何在 JsSIP 中处理音频流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com