首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSSIP与反应音频问题

JSSIP与反应音频问题
EN

Stack Overflow用户
提问于 2018-06-28 00:33:16
回答 1查看 2.3K关注 0票数 0

因此,我使用jssip 3.2.10对一个React项目进行调用。

服务器安装在星号和CentOS上。

我可以在呼叫接收者很好地听我的地方打电话,但我不能听到他们的声音,也不能听到等待(传统的)嘟嘟声,直到接上电话。

它确实适用于一些SPML5/星号udp在线测试,因此我觉得这是在我的客户端问题上。我在Chrome和Firefox上进行了测试(都是最新的,结果相同)。

我的设置

我有一个名为sip.js的助手要连接:

代码语言:javascript
复制
const JsSIP = require('jssip')
const GLOBAL = require('../globals')

function register(user, pass, cb) {
  console.log('Registering to SIP')
  JsSIP.debug.disable('JsSIP:*')
  const address = GLOBAL.jssip_server + ':' + GLOBAL.jssip_port
  let socket = new JsSIP.WebSocketInterface('ws://' + address + '/ws')

  const configuration = {
    sockets: [socket],
    uri: 'sip:' + user + '@' + GLOBAL.jssip_server,
    authorization_user: user,
    password: pass,
    connection_recovery_min_interval: 3,
    register: true
  }
  let ua = new JsSIP.UA(configuration)
  ua.start()
  cb(ua)
}

export {
  register
}

然后,在我的主要组件上执行以下操作:

代码语言:javascript
复制
  componentDidMount() {
    if(GLOBAL.jssip) {
      this.props.dispatch(connecting(true))
      register('***', '***', (ua) => {
        this.setState({ua: ua}, () => {
          this.state.ua.on("registered", () => {
            this.props.dispatch(connecting(false))
            this.setState({critical: false})
          })
          this.state.ua.on("registrationFailed", () => {
            this.props.dispatch(connecting(false))
            this.setState({critical: true})
          })
        })
      })
    }
  }

当我试图打电话时,我会做以下几件事:

代码语言:javascript
复制
  doCall(number) {
    this.props.dispatch(placeCall(call))
      if(GLOBAL.jssip) {
        let eventHandlers = {
          'connecting': (e) => {
            console.log('call is in progress')
            this.setState({sipStatus: "connecting"})
          },
          'progress': (e) => {
            console.log('call is in progress')
            this.setState({sipStatus: "progress"})
          },
          'failed': (e) => {
            console.log('call failed with cause: ', e)
            this.setState({sipStatus: "failed"})
          },
          'ended': (e) => {
            console.log('call ended with cause: ', e)
            this.setState({sipStatus: "ended"})
          },
          'confirmed': (e) => {
            this.setState({sipStatus: "confirmed"})
          }
        }
        let options = {
          eventHandlers: eventHandlers,
          mediaConstraints: { 'audio': true, 'video': false }
        }
        let session = this.state.ua.call('sip:'+number+'@'+GLOBAL.jssip_server, options)

      }
  }

有人知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 17:54:47

感谢这里的答案:How to handle audio stream in JsSIP?

我找到了解决方案,我需要添加到呈现调用的文件中:

代码语言:javascript
复制
<audio ref={(audio) => {this.audioElement = audio}} id="audio-element"></audio>

并将doCall最后一位更改为:

代码语言:javascript
复制
this.setState({session: this.state.ua.call('sip:'+number+'@'+GLOBAL.jssip_server, options)}, () =>{
  this.state.session.connection.addEventListener('addstream', (event: any) => {
    this.audioElement.srcObject = event.stream
    this.audioElement.play()
  })
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51073157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档