diff --git a/pages/im/friends/info.vue b/pages/im/friends/info.vue index 98c117a..1f9b382 100644 --- a/pages/im/friends/info.vue +++ b/pages/im/friends/info.vue @@ -207,7 +207,7 @@ singleCall(e) { CallLib.startSingleCall(this.targetId, e.type, ''); uni.redirectTo({ - url: '/pages/im/private/call', + url: '/pages/im/private/call?targetId=' + this.targetId + '&mediaType=' + e.type, success: (err) => { console.log('跳转视频通话成功'); }, diff --git a/pages/im/index.vue b/pages/im/index.vue index 54e6e4f..961e989 100644 --- a/pages/im/index.vue +++ b/pages/im/index.vue @@ -205,6 +205,9 @@ // 进入聊天的详情页面,清理未读消息数量 toDetail(item) { this.hidePop() + // uni.navigateTo({ + // url: '/pages/im/private/call?targetId=' + item.targetId + '&mediaType=1' + // }) uni.navigateTo({ url: '/pages/im/private/index?targetId=' + item.targetId + '&conversationType=' + item .conversationType diff --git a/pages/im/private/call.nvue b/pages/im/private/call.nvue index 439c555..3535a78 100644 --- a/pages/im/private/call.nvue +++ b/pages/im/private/call.nvue @@ -8,20 +8,42 @@ - + - - {{userInfo.name}} - 等待对方接听 - 已接通 {{ connected }} - {{ mediaType == 0 ? '邀请您语音通话' : '邀请您视频通话' }} + + {{userInfo.name}} + 等待对方接听 + 已接通 + {{ mediaType == 0 ? '邀请您语音通话' : '邀请您视频通话' }} - 麦克风 - 挂断 - 接听 - 扬声器 + + + + + + 麦克风 + + + + + + 挂断 + + + + + + 接听 + + + + + + + 扬声器 + @@ -37,50 +59,32 @@ return { targetId: '', mediaType: 0, // 0 语音 1 视频 - users: [], userInfo: {}, isOut: false, connected: false, micStatus: false, speStatus: false, remoteRinging: false, - innerAudioContext: null + ring: null } }, onLoad(e) { - this.targetId = e.targetId || 10051 + this.targetId = e.targetId this.mediaType = e.mediaType getFriendInfo(this.targetId).then(res => { this.userInfo = res }) this.startRing() // 监听通话链接状态 - - setTimeout(() => { - CallLib.setVideoView(10047, this.$refs.bigVideoView.ref, 0, false) - }, 200) - - uni.$on('onCallConnected', () => { - console.log('OnCallConnected'); - this.connected = true - this.stopRing() - }) - uni.$on('onCallDisconnected', () => { - this.hangup() - }) - uni.$on('onRemoteUserRinging', () => { + uni.$once('onCallConnected', this.onCallConnected) + uni.$once('onCallDisconnected', this.hangup) + uni.$once('onRemoteUserRinging', () => { this.remoteRinging = true }) - uni.$on('onRemoteUserJoined', () => { + uni.$once('onRemoteUserJoined', () => { this.remoteRinging = false }) }, - beforeDestroy() { - uni.$off('onCallConnected') - uni.$off('onCallDisconnected') - uni.$off('onRemoteUserRinging') - uni.$off('onRemoteUserJoined') - }, computed: { windowWidth() { return uni.getSystemInfoSync().windowWidth @@ -100,10 +104,15 @@ }, accept() { CallLib.accept() + }, + onCallConnected() { + // 关掉铃声 + this.stopRing() + // 设置链接状态 + this.connected = true // 视频通话,才开摄像头 if (this.mediaType == 1) { const session = CallLib.getCurrentCallSession() - this.users = session.users setTimeout(() => { CallLib.setVideoView(session.targetId, this.$refs.bigVideoView.ref, 0, false) @@ -118,11 +127,10 @@ setTimeout(() => { this.downRing() - uni.navigateBack() - // uni.redirectTo({ - // url: '/pages/im/private/index?targetId=' + this.targetId + '&conversationType=1' - // }) - }, 500); + uni.switchTab({ + url: '/pages/im/index' + }) + }, 200); }, toHome() { uni.switchTab({ @@ -130,24 +138,24 @@ }) }, startRing() { - const innerAudioContext = uni.createInnerAudioContext() - this.innerAudioContext = innerAudioContext - innerAudioContext.autoplay = true - innerAudioContext.loop = true - innerAudioContext.src = '/static/im/sounds/call-ring.mp3' - innerAudioContext.onEnded(() => { - innerAudioContext.destroy() + const ring = uni.createInnerAudioContext() + this.ring = ring + ring.autoplay = true + ring.loop = true + ring.src = '/static/im/sounds/call-ring.mp3' + ring.onEnded(() => { + ring.destroy() }) }, stopRing() { - this.innerAudioContext.stop() + this.ring.stop() }, downRing() { - const innerAudioContext = uni.createInnerAudioContext() - innerAudioContext.autoplay = true - innerAudioContext.src = '/static/im/sounds/call-down.mp3' - innerAudioContext.onEnded(() => { - innerAudioContext.destroy() + const ding = uni.createInnerAudioContext() + ding.autoplay = true + ding.src = '/static/im/sounds/call-down.mp3' + ding.onEnded(() => { + ding.destroy() }) } } @@ -156,17 +164,18 @@ diff --git a/pages/im/private/index.vue b/pages/im/private/index.vue index 9f5029d..e0e70c8 100644 --- a/pages/im/private/index.vue +++ b/pages/im/private/index.vue @@ -130,11 +130,6 @@ computed: { disabled() { return this.inputTxt.length == 0 - }, - friend() { - return function(targetId) { - return this.$store.getters.userInfo(targetId) - } } }, onNavigationBarButtonTap(e) { diff --git a/utils/im/index.js b/utils/im/index.js index 4a864ea..0ce3c2f 100644 --- a/utils/im/index.js +++ b/utils/im/index.js @@ -101,39 +101,38 @@ const addListeners = () => { } }) // 监听通话呼入 - CallLib.onCallReceived((res) => { - console.log("Engine:OnCallReceived=>" + "监听通话呼入, 目标id=>", res.data.targetId); - console.log('RES', res); + CallLib.onCallReceived(({ + data + }) => { + console.log('onCallReceived'); uni.navigateTo({ - url: '/pages/im/private/call?targetId=' + res.data.targetId + '&mediaType=' + - res.data.mediaType, - success: (err) => { - console.log('跳转视频通话成功'); - }, - fail: (err) => { - console.log('跳转视频页失败', err); - } + url: '/pages/im/private/call?targetId=' + data.targetId + '&mediaType=' + + data.mediaType }) - }) - - CallLib.onCallConnected((res) => { - uni.$emit('onCallConnected'); - }) - CallLib.onCallOutgoing((res) => { - uni.$emit('onCallOutgoing'); - }) - CallLib.onRemoteUserRinging((res) => { - uni.$emit('onRemoteUserRinging'); - }) - CallLib.onRemoteUserJoined((res) => { - uni.$emit('onRemoteUserJoined'); - }) - CallLib.onCallDisconnected((res) => { - uni.$emit('onCallDisconnected'); - }) - CallLib.onRemoteUserLeft((res) => { - uni.$emit('onCallDisconnected'); - }) + }) + + // 通话建立成功 + CallLib.onCallConnected(() => { + uni.$emit('onCallConnected'); + }) + + CallLib.onCallOutgoing((res) => { + uni.$emit('onCallOutgoing'); + }) + CallLib.onRemoteUserRinging((res) => { + uni.$emit('onRemoteUserRinging'); + }) + CallLib.onRemoteUserJoined((res) => { + uni.$emit('onRemoteUserJoined'); + }) + CallLib.onCallDisconnected((res) => { + console.log('断开链接', res); + uni.$emit('onCallDisconnected'); + }) + CallLib.onRemoteUserLeft((res) => { + console.log('远端离开', res); + uni.$emit('onRemoteUserLeft'); + }) } // 维护消息列表