我正在创建使用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,
})
}我做错什么了?
发布于 2017-05-26 05:34:19
我解决了问题。
问题出在this.audioElement.play()线的位置。
我将其移到addstream事件的回调中:
this.state.callSession.connection.addEventListener('addstream', (event: any) => {
console.log(event)
this.audioElement.srcObject = event.stream
this.audioElement.play()
})现在它很好用。希望你也发现它有用。
发布于 2017-08-19 17:05:39
您可以使用react-sip npm库,它简化了在React应用程序中的jssip的使用:https://www.npmjs.com/package/react-sip
您只需要将连接设置作为道具传递给<SipProvider/>,它将位于您的响应树顶部附近的某个位置。这将允许您执行基本的开始/停止/应答操作,并在上下文中查看调用的状态!
https://stackoverflow.com/questions/44183387
复制相似问题