优化音视频通话
This commit is contained in:
@@ -55,7 +55,9 @@
|
|||||||
// TUIChatService.sendTextMessage(params)
|
// TUIChatService.sendTextMessage(params)
|
||||||
navigateTo('/pages/room/incom', {
|
navigateTo('/pages/room/incom', {
|
||||||
type: 'call',
|
type: 'call',
|
||||||
userID: data.userID
|
userID: data.userID,
|
||||||
|
mediaType: 'audio',
|
||||||
|
callType: 'out',
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
let params = {
|
let params = {
|
||||||
@@ -91,15 +93,9 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- needBottomPopup -->
|
<!-- needBottomPopup -->
|
||||||
<ToolbarItemContainer
|
<ToolbarItemContainer ref="container" :iconFile="evaluateIcon" :iconWidth="isUniFrameWork ? '34px' : '20px'"
|
||||||
ref="container"
|
:iconHeight="isUniFrameWork ? '34px' : '20px'" :title="isType ? '语音通话' : '视频通话'" @onDialogShow="onDialogShow"
|
||||||
:iconFile="evaluateIcon"
|
@onDialogClose="onDialogClose">
|
||||||
:iconWidth="isUniFrameWork ? '34px' : '20px'"
|
|
||||||
:iconHeight="isUniFrameWork ? '34px' : '20px'"
|
|
||||||
:title="isType ? '语音通话' : '视频通话'"
|
|
||||||
@onDialogShow="onDialogShow"
|
|
||||||
@onDialogClose="onDialogClose"
|
|
||||||
>
|
|
||||||
<!-- <view class="box-index">
|
<!-- <view class="box-index">
|
||||||
<view class="top-icon">
|
<view class="top-icon">
|
||||||
<uni-icons
|
<uni-icons
|
||||||
|
|||||||
@@ -444,14 +444,14 @@
|
|||||||
{
|
{
|
||||||
"path": "pages/room/room",
|
"path": "pages/room/room",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "拨打电话",
|
"navigationBarTitleText": "拨打视频",
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/room/incom",
|
"path": "pages/room/incom",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "拨打视频",
|
"navigationBarTitleText": "拨打电话",
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -150,24 +150,16 @@
|
|||||||
},
|
},
|
||||||
onUnload() {
|
onUnload() {
|
||||||
call.hangup()
|
call.hangup()
|
||||||
// this.removeAllListeners()
|
|
||||||
},
|
},
|
||||||
onHide() {
|
onHide() {
|
||||||
const session = call.getCurrentCallSession()
|
const session = call.getCurrentCallSession()
|
||||||
if (session) {
|
if (session) {
|
||||||
call.hangup()
|
call.hangup()
|
||||||
}
|
}
|
||||||
// this.removeAllListeners()
|
uni.$off('OnCallDisconnected')
|
||||||
|
uni.$off('OnCallConnected')
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
removeAllListeners(){
|
|
||||||
//移除监听-接收到通话呼入
|
|
||||||
call.removeRemoteUserJoinedListener();
|
|
||||||
// 移除监听-通话已结束
|
|
||||||
call.removeCallDisconnectedListener();
|
|
||||||
// 移除监听-通话出现错误的回调
|
|
||||||
call.removeErrorListener();
|
|
||||||
},
|
|
||||||
changeMediaType() {
|
changeMediaType() {
|
||||||
if (this.mediaTypeCur == 'video') {
|
if (this.mediaTypeCur == 'video') {
|
||||||
this.mediaTypeCur = 'audio'
|
this.mediaTypeCur = 'audio'
|
||||||
@@ -284,9 +276,9 @@
|
|||||||
hangup() {
|
hangup() {
|
||||||
this.isSelf = true
|
this.isSelf = true
|
||||||
call.hangup()
|
call.hangup()
|
||||||
uni.navigateBack({
|
// uni.navigateBack({
|
||||||
delta: 1
|
// delta: 1
|
||||||
})
|
// })
|
||||||
},
|
},
|
||||||
accept() {
|
accept() {
|
||||||
call.accept()
|
call.accept()
|
||||||
@@ -324,12 +316,61 @@
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onCallConnected() {
|
onCallConnected() {
|
||||||
let context = this
|
let context = this
|
||||||
console.log('oncallconnected接收了')
|
console.log('oncallconnected接收了')
|
||||||
|
console.log('call: ',call);
|
||||||
|
// 使用 Promise 确保 call 对象完全初始化
|
||||||
|
this.initializeCall(call)
|
||||||
|
.then(() => {
|
||||||
|
this.processCallSession()
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('初始化通话失败:', error)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async initializeCall(callObj) {
|
||||||
|
// 等待 call 对象就绪
|
||||||
|
await this.waitForCallReady(callObj)
|
||||||
|
|
||||||
|
// 设置扬声器
|
||||||
|
if (callObj.enableSpeaker && typeof callObj.enableSpeaker === 'function') {
|
||||||
|
try {
|
||||||
|
callObj.enableSpeaker(true)
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('设置扬声器失败:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return callObj
|
||||||
|
},
|
||||||
|
|
||||||
|
waitForCallReady(callObj, timeout = 2000) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const startTime = Date.now()
|
||||||
|
|
||||||
|
const check = () => {
|
||||||
|
const now = Date.now()
|
||||||
|
|
||||||
|
if (callObj &&
|
||||||
|
callObj.enableSpeaker &&
|
||||||
|
callObj.getCurrentCallSession &&
|
||||||
|
typeof callObj.getCurrentCallSession === 'function') {
|
||||||
|
resolve(callObj)
|
||||||
|
} else if (now - startTime > timeout) {
|
||||||
|
reject(new Error('call 对象初始化超时'))
|
||||||
|
} else {
|
||||||
|
setTimeout(check, 50)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
check()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
processCallSession(){
|
||||||
|
// call.enableSpeaker(true)
|
||||||
this.mediaTypeCur = this.mediaType
|
this.mediaTypeCur = this.mediaType
|
||||||
call.enableSpeaker(true)
|
|
||||||
this.currentCallSession = call.getCurrentCallSession()
|
this.currentCallSession = call.getCurrentCallSession()
|
||||||
this.callWay = this.currentCallSession.callType
|
this.callWay = this.currentCallSession.callType
|
||||||
this.users = this.currentCallSession.users
|
this.users = this.currentCallSession.users
|
||||||
@@ -347,6 +388,7 @@
|
|||||||
) {
|
) {
|
||||||
//视频是两个的时候
|
//视频是两个的时候
|
||||||
if (this.currentCallSession.users.length <= 2) {
|
if (this.currentCallSession.users.length <= 2) {
|
||||||
|
console.log("视频是两个的时候");
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.systemInfoSync(
|
this.systemInfoSync(
|
||||||
this.currentCallSession.mine.userId,
|
this.currentCallSession.mine.userId,
|
||||||
@@ -397,6 +439,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
systemInfoSync(userId, ref, isZOrderOnTop) {
|
systemInfoSync(userId, ref, isZOrderOnTop) {
|
||||||
switch (uni.getSystemInfoSync().platform) {
|
switch (uni.getSystemInfoSync().platform) {
|
||||||
case 'android':
|
case 'android':
|
||||||
|
|||||||
Reference in New Issue
Block a user