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');
+ })
}
// 维护消息列表