λ΄ vue.js μ μ₯μμμ sip.jsλ₯Ό ꡬννλ €κ³ ν©λλ€.
`
import sipModal from './sipModal.vue'
export default {
template: '#sipDialler',
name: 'sip-dialler',
data () {
return {
session: '',
ua: '',
hangupType: 'NOCALL',
inputNumber: '',
onCall: false,
callIncoming: false,
audioConstraints: {
audio: true,
video: false
},
mediaStream: ''
}
},
computed: {
media () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
stream: this.audioConstraints,
render: {
remote: audio,
local: audio2
}
}
}
},
components: {
'sip-modal': sipModal
},
created () {
this.registerUserAgent()
},
methods: {
registerUserAgent () {
// eslint-disable-next-line
this.ua = new SIP.UA({
uri: '******.callwise.net',
wsServers: 'wss://sip.callwise.net:443',
traceSip: true,
authorizationUser: '******',
password: '********'
})
this.onRegistered()
this.onUnregistered()
this.onInvite()
},
onRegistered () {
this.ua.on('registered', function () {
// eslint-disable-next-line
SIP.WebRTC.isSupported()
// eslint-disable-next-line
SIP.WebRTC.getUserMedia(this.audioConstraints, function (stream) {
console.log(stream)
this.mediaStream = stream
}, function (e) {
console.error(e)
})
})
},
onUnregistered () {
this.ua.on('unregistered', function () {
console.log('unregistered')
})
},
onInvite () {
this.ua.on('invite', function (incoming) {
console.log('receiving call')
this.session = incoming
this.callIncoming = true
})
},
onFailed () {
this.session.on('failed', function (response, cause) {
this.callIncoming = false
})
},
makeCall () {
this.session = this.ua.invite('sip:' + this.inputNumber + '********.callwise.net', this.media)
},
answerCall () {
this.session.accept(this.media)
this.callIncoming = false
},
rejectCall () {
this.session.reject({statusCode: '486', reasonPhrase: 'Busy Here'})
},
deleteInput () {
this.inputNumber = this.inputNumber.slice(0, -1)
},
addHash () {
this.inputNumber += '#'
},
addAsterisk () {
this.inputNumber += '*'
}
}
}
`
When using that code I get ---> TypeError: Failed to execute 'getUserMedia' on 'Navigator': At least one of audio and video must be requested
at sip-0.7.5.js:10447
at Promise (
at Object.promisifiedMethod [as getUserMedia] (sip-0.7.5.js:10442)
at UA.eval (eval at 186 (0.9df3722β¦.hot-update.js:7),
at UA.EventEmitter.emit (sip-0.7.5.js:112)
at RegisterContext.EventEmitter.emit (sip-0.7.5.js:112)
at RegisterContext.receiveResponse (sip-0.7.5.js:3477)
at RequestSender.receiveResponse (sip-0.7.5.js:3758)
at NonInviteClientTransaction.receiveResponse (sip-0.7.5.js:7615)
at Transport.onMessage (sip-0.7.5.js:8526)
(anonymous) @ sipDialler.vue?36c1:114
If I remove the bit:
SIP.WebRTC.getUserMedia(this.audioConstraints, function (stream) {
console.log(stream)
this.mediaStream = stream
}, function (e) {
console.error(e)
})
})
I don't get any errors and I'm able to make calls, the person I'm calling to can hear me on the mobile-phone but I'm not ables to hear the person I'm calling on my speakers.
Any ideas why is that happening?
μ§μ getUserMedia
μ μ νν νμλ μμ΅λλ€. κΈ°λ³Έ λ―Έλμ΄ μ²λ¦¬κΈ°κ° μλμΌλ‘ μ²λ¦¬ν©λλ€.
μλ¦λ, λ΅λ³ κ°μ¬ν©λλ€. μ½λ μ€μ μ κ±°ν λ 첫 λ²μ§Έ λ¬Έμ μμ λ§νλ―μ΄:
SIP.WebRTC.getUserMedia(this.audioConstraints, function (stream) { console.log(stream) this.mediaStream = stream }, function (e) { console.error(e) }) })
μ€λ₯κ° νμλμ§ μκ³ λ΄ μΉμ¬μ΄νΈμμ μ νλ₯Ό κ±Έ μ μμ΅λλ€. κ·Έλ¬λ λ΄κ° μ νλ₯Ό κ±Έκ³ μλ μ¬λμ κ·Έμ ν΄λν°μμ λ΄ λͺ©μ리λ₯Ό λ€μ μ μμ§λ§ λ΄ μ»΄ν¨ν° μ€νΌμ»€μμλ λ΄κ° μ νλ₯Ό κ±Έκ³ μλ μ¬λμ λͺ©μ리λ₯Ό λ€μ μ μμ΅λλ€. μ¦, μ±μ λ΄ λ§μ΄ν¬μ μ‘μΈμ€νμ§λ§ λ΄ μ€νΌμ»€μλ μ‘μΈμ€νμ§ μμ΅λλ€. μ κ·Έλ° μΌμ΄ μΌμ΄λλμ§ μμΈμ?
κ°μ¬ ν΄μ.
λ¨Όμ μ격 μ€λμ€κ° DOMμ μ€λμ€ μμμ μ°κ²°λκ³ μλμ§ νμΈν μ μμ΅λκΉ? λν μ¬μλκ³ μΌμ μ€μ§λμ§ μμλμ§ νμΈνμμμ€.
μ΄ κ²½μ° λ¨Όμ vue.js μΈλΆμμ SIP.jsκ° μλνλλ‘ ν©λλ€. κ·Έλ° λ€μ vueμ ν΅ν©νμμμ€. μ€μ λ‘ SIP.jsμ μν₯μ λ―ΈμΉλ vueμλ μ무 κ²λ μμ΅λλ€.
Ericμκ² κ°μ¬ν©λλ€. λ§μΉ¨λ΄ μλνκ² λ§λ€μμ΅λλ€. κ³μ° λ°©λ²μ λ€μμμ λ³κ²½νμ΅λλ€.
κ³μ°: {
media () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
stream: this.audioConstraints,
render: {
remote: audio,
local: audio2
}
}
}
},
NS:
options () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
media: {
constraints: {
audio: true,
video: false
},
render: {
remote: audio,
local: audio2
}
}
}
},
this.media λμ this.optionsλ₯Ό νΈμΆνλ©΄ μλνλ κ² κ°μ΅λλ€.
λ§μ λμμ μ£Όμ
μ κ°μ¬ν©λλ€. λ¬Έμ λ₯Ό μ’
λ£ν©λλ€.
@Juli0GT
μλ
νμΈμ,
λλ¨Έμ§ μμ
μ½λ μνμ 곡μ ν΄ μ£Όμκ² μ΅λκΉ?
μ λ μ΄μ¬ν νκ³ μλλ° λ§μ΄ λμμ£ΌμΈμ.
κ°μ¬ν©λλ€
κ°μ₯ μ μ©ν λκΈ
@Juli0GT
μλ νμΈμ,
λλ¨Έμ§ μμ μ½λ μνμ 곡μ ν΄ μ£Όμκ² μ΅λκΉ?
μ λ μ΄μ¬ν νκ³ μλλ° λ§μ΄ λμμ£ΌμΈμ.
κ°μ¬ν©λλ€