Saya mencoba mengimplementasikan sip.js di repo vue.js saya.
`
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?
Anda tidak perlu menelepon getUserMedia
sendiri. Pengendali media default akan melakukannya untuk Anda.
Hai Eric, terima kasih atas tanggapan Anda. Seperti yang saya katakan pada masalah pertama saya ketika saya menghapus baris kode:
SIP.WebRTC.getUserMedia(this.audioConstraints, function (stream) { console.log(stream) this.mediaStream = stream }, function (e) { console.error(e) }) })
Kesalahan berhenti muncul, dan saya dapat melakukan panggilan dari situs web saya. Namun, orang yang saya panggil dapat mendengar saya dari ponselnya tetapi saya tidak dapat mendengarkan orang yang saya panggil dari speaker komputer saya. Itu berarti, aplikasi mengakses mikrofon saya tetapi bukan speaker saya. Tahu mengapa itu terjadi?
Terima kasih.
Pertama, bisakah Anda mengonfirmasi bahwa audio jarak jauh sedang dilampirkan ke elemen audio di DOM? Konfirmasikan juga bahwa itu dimainkan dan tidak dijeda.
Jika demikian, saya akan membuat SIP.js bekerja di luar vue.js terlebih dahulu. Kemudian mengintegrasikannya ke dalam vue. Sebenarnya tidak ada apa pun di vue yang seharusnya memengaruhi SIP.js afaik.
Terima kasih Eric, akhirnya saya berhasil, saya mengubah metode komputasi saya dari
dihitung: {
media () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
stream: this.audioConstraints,
render: {
remote: audio,
local: audio2
}
}
}
},
Ke:
options () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
media: {
constraints: {
audio: true,
video: false
},
render: {
remote: audio,
local: audio2
}
}
}
},
Dan memanggil this.options alih-alih this.media dan tampaknya berfungsi.
Terima kasih banyak atas bantuannya, saya menutup masalah ini.
@Juli0GT
Hai,
Bisakah Anda membagikan sisa contoh kode kerja Anda?
Saya berjuang untuk membuatnya bekerja juga dan Anda bisa sangat membantu saya.
Terima kasih
Komentar yang paling membantu
@Juli0GT
Hai,
Bisakah Anda membagikan sisa contoh kode kerja Anda?
Saya berjuang untuk membuatnya bekerja juga dan Anda bisa sangat membantu saya.
Terima kasih