أحاول تطبيق sip.js في ملفي vue.js repo.
"
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؟ تأكد أيضًا من تشغيله وعدم إيقافه مؤقتًا.
إذا كان هذا هو الحال ، فسأجعل SIP.js يعمل خارج vue.js أولاً. ثم قم بدمجه في vue. لا يوجد شيء في vue يجب أن يؤثر على SIP.js afaik.
شكرًا إريك ، لقد نجحت أخيرًا في تغيير طريقة الحساب الخاصة بي
محسوب: {
media () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
stream: this.audioConstraints,
render: {
remote: audio,
local: audio2
}
}
}
},
إلى:
options () {
const audio = document.getElementById('remoteAudio')
const audio2 = document.getElementById('localAudio')
return {
media: {
constraints: {
audio: true,
video: false
},
render: {
remote: audio,
local: audio2
}
}
}
},
وتسمية هذه الخيارات بدلاً من هذه الوسائط ويبدو أنها تعمل.
شكرًا جزيلاً على المساعدة ، أغلقت المشكلة.
تضمين التغريدة
أهلا،
هل يمكنك من فضلك مشاركة بقية عينة كود العمل الخاص بك؟
أنا أجاهد لجعله يعمل أيضًا ويمكنك مساعدتي كثيرًا.
شكرا لك
التعليق الأكثر فائدة
تضمين التغريدة
أهلا،
هل يمكنك من فضلك مشاركة بقية عينة كود العمل الخاص بك؟
أنا أجاهد لجعله يعمل أيضًا ويمكنك مساعدتي كثيرًا.
شكرا لك