From 1887bb39bc081af45120b08041ae4ab610f47426 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 20 Jan 2025 10:26:31 +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 | 128 ++++++++++++++++++++----------------- src/utils/package/agora.ts | 4 +- 2 files changed, 70 insertions(+), 62 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index d866487..6f358cc 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -189,7 +189,6 @@ const Meeting: React.FC = () => { const [_isNetworkDisconnected, setIsNetworkDisconnected] = useState(false) const [isShareUser, setIsShareUser] = useState(null) const [currentLookUserStatus, setCurrentLookUserStatus] = useState<0 | 1 | 2 | 3 | 4>(1) - const [clickCurrentLookUserStatus, setClickCurrentLookUserStatus] = useState(true) const [commonlyChatList] = useState([ '能听到我说话吗?', '听得到', @@ -972,6 +971,47 @@ const Meeting: React.FC = () => { return () => clearTimeout(timer); }, [isClicked]); + useEffect(() => { + async function setView() { + let uid = currentVideoId || userInfo.uid + switch (currentLookUserStatus) { + case 1: + await agora.setupLocalVideo({ + uid: Number(uid), + view: document.getElementById(`video-source-camera-primary`) as HTMLElement, + channelId: state.channelId, + sourceType: VideoSourceType.VideoSourceCameraPrimary, + }) + break; + case 2: + await agora.setupLocalVideo({ + uid: Number(uid), + view: document.getElementById(`video-source-screen`) as HTMLElement, + channelId: state.channelId, + sourceType: VideoSourceType.VideoSourceScreen, + }) + break; + case 3: + await agora.setupRemoteVideoJoin({ + uid: Number(uid), + view: document.getElementById(`video-source-remote-screen`) as HTMLElement, + channelId: state.channelId, + }) + break; + case 4: + await agora.setupRemoteVideoJoin({ + uid: Number(uid), + view: document.getElementById(`video-source-remote-camera`) as HTMLElement, + channelId: state.channelId, + }) + break; + } + } + setTimeout(() => { + setView() + }, currentVideoId ? 0 : 1500); + }, [currentLookUserStatus]); + useEffect(() => { let timer: NodeJS.Timeout; @@ -1382,13 +1422,18 @@ const Meeting: React.FC = () => { // 渲染视频 const renderVideo = async (uid: string = ''): Promise => { if (uid) { - if (currentVideoId === uid || clickCurrentLookUserStatus === false) { + if (currentVideoId === uid) { return } } else { uid = userInfo.uid } - setClickCurrentLookUserStatus(false) + if (currentVideoId) { + await agora.destroyRendererByView(`video-source-camera-primary`) + await agora.destroyRendererByView(`video-source-screen`) + await agora.destroyRendererByView(`video-source-remote-screen`) + await agora.destroyRendererByView(`video-source-remote-camera`) + } setCurrentLookUserStatus(0) setRoomUserList((res: any) => { let item = res.find((item: any) => item.uid === uid || item.screenShareId === uid) @@ -1397,59 +1442,23 @@ const Meeting: React.FC = () => { } return res }) - setTimeout(() => { - if (uid === userInfo.uid || uid === userInfo.screenShareId) { - if (String(uid).length === 9) { - // 共享屏幕 - setCurrentLookUserStatus(2) - setTimeout(async () => { - await agora.setupLocalVideo({ - uid: Number(uid), - view: document.getElementById(`video-source-screen`) as HTMLElement, - channelId: state.channelId, - sourceType: VideoSourceType.VideoSourceScreen, - }) - setClickCurrentLookUserStatus(true) - }, 1500); - } else { - // 摄像头 - setCurrentLookUserStatus(1) - setTimeout(async () => { - await agora.setupLocalVideo({ - uid: Number(uid), - view: document.getElementById(`video-source-camera-primary`) as HTMLElement, - channelId: state.channelId, - sourceType: VideoSourceType.VideoSourceCameraPrimary, - }) - setClickCurrentLookUserStatus(true) - }, 1500); - } + if (uid === userInfo.uid || uid === userInfo.screenShareId) { + if (String(uid).length === 9) { + // 共享屏幕 + setCurrentLookUserStatus(2) } else { - if (String(uid).length === 9) { - // 共享屏幕 - setCurrentLookUserStatus(3) - setTimeout(async () => { - await agora.setupRemoteVideoJoin({ - uid: Number(uid), - view: document.getElementById(`video-source-remote-screen`) as HTMLElement, - channelId: state.channelId, - }) - setClickCurrentLookUserStatus(true) - }, 1500); - } else { - // 摄像头 - setCurrentLookUserStatus(4) - setTimeout(async () => { - await agora.setupRemoteVideoJoin({ - uid: Number(uid), - view: document.getElementById(`video-source-remote-camera`) as HTMLElement, - channelId: state.channelId, - }) - setClickCurrentLookUserStatus(true) - }, 1500); - } + // 摄像头 + setCurrentLookUserStatus(1) } - }, 1000) + } else { + if (String(uid).length === 9) { + // 共享屏幕 + setCurrentLookUserStatus(3) + } else { + // 摄像头 + setCurrentLookUserStatus(4) + } + } } // 全员观看 const getShowUser = async (): Promise => { @@ -1840,7 +1849,6 @@ const Meeting: React.FC = () => { const footerListTemplate = [...footerList] await agora.leaveChannelEx(userInfo.screenShareId) agora.stopScreenCapture() - await agora.destroyRendererByViewScreenCapture() footerListTemplate[1][0].title = '共享屏幕' setFooterList(footerListTemplate) window.electron.createChildWindow('stop') @@ -2445,7 +2453,7 @@ const Meeting: React.FC = () => { : null) } )} - {currentLookUserStatus === 0 && currentLookUserAccount ? + {currentLookUserStatus === 0 ?
{
@@ -2456,7 +2464,7 @@ const Meeting: React.FC = () => { setIsVideoFullScreen(true)} />} {meetingContentUser(currentLookUserAccount, true)}
: null} - {currentLookUserStatus === 1 && currentLookUserAccount ? + {currentLookUserStatus === 1 ?
{
@@ -2468,7 +2476,7 @@ const Meeting: React.FC = () => { {meetingContentUser(currentLookUserAccount, true)} {currentLookUserAccount.enableCamera ? null : meetingContentError(currentLookUserAccount)}
: null} - {currentLookUserStatus === 2 && currentLookUserAccount ? + {currentLookUserStatus === 2 ?
@@ -2479,7 +2487,7 @@ const Meeting: React.FC = () => { setIsVideoFullScreen(true)} />} {meetingContentUser(currentLookUserAccount, true)}
: null} - {currentLookUserStatus === 3 && currentLookUserAccount ? + {currentLookUserStatus === 3 ?
@@ -2490,7 +2498,7 @@ const Meeting: React.FC = () => { setIsVideoFullScreen(true)} />} {meetingContentUser(currentLookUserAccount, true)}
: null} - {currentLookUserStatus === 4 && currentLookUserAccount ? + {currentLookUserStatus === 4 ?
diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts index 3c780ea..55adcfe 100644 --- a/src/utils/package/agora.ts +++ b/src/utils/package/agora.ts @@ -393,8 +393,8 @@ export const agora = { destroyRendererByConfig: async (uid: number, channelId?: string) => { await rtcEngine.destroyRendererByConfig(option.uid === uid ? VideoSourceType.VideoSourceCameraPrimary : VideoSourceType.VideoSourceRemote, channelId, uid); }, - destroyRendererByViewScreenCapture: async () => { - let dom = document.getElementById(`meetingAbsoluteVideo`); + destroyRendererByView: async (key: string) => { + let dom = document.getElementById(key); if (dom) { await rtcEngine.destroyRendererByView(dom); }