From a4ae5577d487d3a0f60a8b616cc563a43fc16699 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 23 Jan 2025 11:14:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 150 +++++++++++++++++-------------------- src/utils/package/agora.ts | 7 +- vite.config.ts | 2 - 3 files changed, 68 insertions(+), 91 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 2d5c30a..645fcbf 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -13,7 +13,7 @@ import ImageUrl from '@/utils/package/imageUrl' import { agora } from '@/utils/package/agora' import dayjs from 'dayjs'; import durationPlugin from 'dayjs/plugin/duration'; -import { AudioVolumeInfo, ConnectionChangedReasonType, ConnectionStateType, LocalVideoStreamReason, LocalVideoStreamState, QualityType, RenderModeType, RtcConnection, RtcStats, UserOfflineReasonType, VideoSourceType, VideoStreamType } from 'agora-electron-sdk'; +import { AudioVolumeInfo, ConnectionChangedReasonType, ConnectionStateType, LocalVideoStreamReason, LocalVideoStreamState, RenderModeType, RtcConnection, RtcStats, UserOfflineReasonType, VideoSourceType, VideoStreamType } from 'agora-electron-sdk'; import Avatar from '@/components/Avatar'; import SharedFilesModel from '@/components/SharedFilesModel'; import StupWizard from '@/components/StupWizard'; @@ -166,7 +166,7 @@ const Meeting: React.FC = () => { const [currentVideoId, setCurrentVideoId] = useState('') const [currentVideoUid, setCurrentVideoUid] = useState('') let [currentSeconds, setCurrentSeconds] = useState(0) - const [currentEffective, setCurrentEffective] = useState(4) + const [currentEffective, setCurrentEffective] = useState(3) const [networkQuality, setNetworkQuality] = useState({ level: '佳', text: '网络质量极好。' @@ -520,39 +520,37 @@ const Meeting: React.FC = () => { }, []); useEffect(() => { - switch (currentEffective) { - case 0: + if (networkOther) { + let data = networkOther as any; + if (storage.getItem('reconnect') === 'true') { + if (data.lastmileDelay < 100) { + setNetworkQuality({ + level: '佳', + text: '网络质量极好' + }) + setCurrentEffective(3) + } else if (data.lastmileDelay > 500) { + setNetworkQuality({ + level: '非常差', + text: '完全无法沟通' + }) + setCurrentEffective(2) + } else if (data.lastmileDelay < 500 && data.lastmileDelay > 100) { + setNetworkQuality({ + level: '差', + text: '勉强能沟通但不顺畅' + }) + setCurrentEffective(1) + } + } else { setNetworkQuality({ level: '断开连接', text: '网络连接断开' }) - break; - case 1: - setNetworkQuality({ - level: '非常差', - text: '完全无法沟通' - }) - break; - case 2: - setNetworkQuality({ - level: '差', - text: '勉强能沟通但不顺畅' - }) - break; - case 3: - setNetworkQuality({ - level: '良好', - text: ' 有瑕疵但不影响沟通' - }) - break; - case 4: - setNetworkQuality({ - level: '佳', - text: '网络质量极好' - }) - break; + setCurrentEffective(0) + } } - }, [currentEffective]); + }, [networkOther]); useEffect(() => { if (chatList.length) { @@ -1253,31 +1251,6 @@ const Meeting: React.FC = () => { }); } }, - onNetworkQuality: async (_connection: RtcConnection, remoteUid: number, _txQuality: QualityType, rxQuality: QualityType) => { - if (remoteUid === 0) { - switch (rxQuality) { - case 1: - setCurrentEffective(4) - break; - case 2: - case 3: - setCurrentEffective(3) - break; - case 4: - setCurrentEffective(2) - break; - case 5: - setCurrentEffective(1) - break; - case 6: - setCurrentEffective(0) - break; - default: - setCurrentEffective(storage.getItem('reconnect') === 'true' ? 4 : 0) - break; - } - } - }, onRtcStats: async (stats: RtcStats) => { setNetworkOther(stats) }, @@ -3426,44 +3399,55 @@ const meetingContentError = (item: any) => { const networkIcon = (network: number) => { switch (network) { case 0: - return - - - + return + + + - - + + case 1: - return - - - - + return + + + + + + + + + + case 2: - return - - - - + return + + + + + + + + + + case 3: - return - - - - - - case 4: - return - - - - + return + + + + + + + + + + } } diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts index b901b9d..6494db7 100644 --- a/src/utils/package/agora.ts +++ b/src/utils/package/agora.ts @@ -9,7 +9,6 @@ import { AudioAinsMode, SimulcastStreamMode, VideoStreamType, - QualityType, RtcConnection, RtcStats, AudioVolumeInfo, @@ -152,7 +151,7 @@ export const agora = { }, 1000); }, // 事件回调 - registerEventHandler: ({ onJoinChannelSuccess, onUserJoined, onUserOffline, onAudioVolumeIndication, onNetworkQuality, onRtcStats, onConnectionStateChanged, onLocalVideoStateChanged, onConnectionLost, onTokenPrivilegeWillExpire }: any) => { + registerEventHandler: ({ onJoinChannelSuccess, onUserJoined, onUserOffline, onAudioVolumeIndication, onRtcStats, onConnectionStateChanged, onLocalVideoStateChanged, onConnectionLost, onTokenPrivilegeWillExpire }: any) => { rtcEngine.registerEventHandler({ // 监听本地用户加入频道事件 onJoinChannelSuccess: async (connection: RtcConnection, elapsed: number) => { @@ -182,10 +181,6 @@ export const agora = { onAudioVolumeIndication: async (_connection: RtcConnection, speakers: AudioVolumeInfo[], _speakerNumber: number, _totalVolume: number) => { await onAudioVolumeIndication?.(speakers) }, - //通话中每个用户的网络上下行 last mile 质量报告回调。 - onNetworkQuality: async (connection: RtcConnection, remoteUid: number, txQuality: QualityType, rxQuality: QualityType) => { - await onNetworkQuality?.(connection, remoteUid, txQuality, rxQuality) - }, //当前通话相关的统计信息回调。 onRtcStats: async (_connection: RtcConnection, stats: RtcStats) => { await onRtcStats?.(stats) diff --git a/vite.config.ts b/vite.config.ts index e3110f4..b086ef7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -64,7 +64,6 @@ export default defineConfig({ AudioAinsMode, SimulcastStreamMode, VideoStreamType, - QualityType, RtcConnection, RtcStats, AudioVolumeInfo, @@ -90,7 +89,6 @@ export default defineConfig({ AudioAinsMode, SimulcastStreamMode, VideoStreamType, - QualityType, RtcConnection, RtcStats, AudioVolumeInfo,