yangjie #47

Merged
yangqiang merged 49 commits from yangjie into master 2025-01-24 13:43:09 +08:00
2 changed files with 70 additions and 62 deletions
Showing only changes of commit 1887bb39bc - Show all commits

View File

@ -189,7 +189,6 @@ const Meeting: React.FC = () => {
const [_isNetworkDisconnected, setIsNetworkDisconnected] = useState(false) const [_isNetworkDisconnected, setIsNetworkDisconnected] = useState(false)
const [isShareUser, setIsShareUser] = useState<any>(null) const [isShareUser, setIsShareUser] = useState<any>(null)
const [currentLookUserStatus, setCurrentLookUserStatus] = useState<0 | 1 | 2 | 3 | 4>(1) const [currentLookUserStatus, setCurrentLookUserStatus] = useState<0 | 1 | 2 | 3 | 4>(1)
const [clickCurrentLookUserStatus, setClickCurrentLookUserStatus] = useState<boolean>(true)
const [commonlyChatList] = useState<any>([ const [commonlyChatList] = useState<any>([
'能听到我说话吗?', '能听到我说话吗?',
'听得到', '听得到',
@ -972,6 +971,47 @@ const Meeting: React.FC = () => {
return () => clearTimeout(timer); return () => clearTimeout(timer);
}, [isClicked]); }, [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(() => { useEffect(() => {
let timer: NodeJS.Timeout; let timer: NodeJS.Timeout;
@ -1382,13 +1422,18 @@ const Meeting: React.FC = () => {
// 渲染视频 // 渲染视频
const renderVideo = async (uid: string = ''): Promise<void> => { const renderVideo = async (uid: string = ''): Promise<void> => {
if (uid) { if (uid) {
if (currentVideoId === uid || clickCurrentLookUserStatus === false) { if (currentVideoId === uid) {
return return
} }
} else { } else {
uid = userInfo.uid 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) setCurrentLookUserStatus(0)
setRoomUserList((res: any) => { setRoomUserList((res: any) => {
let item = res.find((item: any) => item.uid === uid || item.screenShareId === uid) let item = res.find((item: any) => item.uid === uid || item.screenShareId === uid)
@ -1397,59 +1442,23 @@ const Meeting: React.FC = () => {
} }
return res return res
}) })
setTimeout(() => { if (uid === userInfo.uid || uid === userInfo.screenShareId) {
if (uid === userInfo.uid || uid === userInfo.screenShareId) { if (String(uid).length === 9) {
if (String(uid).length === 9) { // 共享屏幕
// 共享屏幕 setCurrentLookUserStatus(2)
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);
}
} else { } else {
if (String(uid).length === 9) { // 摄像头
// 共享屏幕 setCurrentLookUserStatus(1)
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);
}
} }
}, 1000) } else {
if (String(uid).length === 9) {
// 共享屏幕
setCurrentLookUserStatus(3)
} else {
// 摄像头
setCurrentLookUserStatus(4)
}
}
} }
// 全员观看 // 全员观看
const getShowUser = async (): Promise<void> => { const getShowUser = async (): Promise<void> => {
@ -1840,7 +1849,6 @@ const Meeting: React.FC = () => {
const footerListTemplate = [...footerList] const footerListTemplate = [...footerList]
await agora.leaveChannelEx(userInfo.screenShareId) await agora.leaveChannelEx(userInfo.screenShareId)
agora.stopScreenCapture() agora.stopScreenCapture()
await agora.destroyRendererByViewScreenCapture()
footerListTemplate[1][0].title = '共享屏幕' footerListTemplate[1][0].title = '共享屏幕'
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.electron.createChildWindow('stop') window.electron.createChildWindow('stop')
@ -2445,7 +2453,7 @@ const Meeting: React.FC = () => {
</div> : null) </div> : null)
} }
)} )}
{currentLookUserStatus === 0 && currentLookUserAccount ? {currentLookUserStatus === 0 ?
<div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}> <div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}>
<div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-camera-primary'> <div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-camera-primary'>
{<div className={styles.meetingContentSwiperCardVdeioLoading}> {<div className={styles.meetingContentSwiperCardVdeioLoading}>
@ -2456,7 +2464,7 @@ const Meeting: React.FC = () => {
<FullscreenOutlined className={styles.meetingContentSwiperCardFullScreenIcon} title='全屏' onClick={() => setIsVideoFullScreen(true)} />} <FullscreenOutlined className={styles.meetingContentSwiperCardFullScreenIcon} title='全屏' onClick={() => setIsVideoFullScreen(true)} />}
{meetingContentUser(currentLookUserAccount, true)} {meetingContentUser(currentLookUserAccount, true)}
</div> : null} </div> : null}
{currentLookUserStatus === 1 && currentLookUserAccount ? {currentLookUserStatus === 1 ?
<div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}> <div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}>
<div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-camera-primary'> <div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-camera-primary'>
{<div className={styles.meetingContentSwiperCardVdeioLoading}> {<div className={styles.meetingContentSwiperCardVdeioLoading}>
@ -2468,7 +2476,7 @@ const Meeting: React.FC = () => {
{meetingContentUser(currentLookUserAccount, true)} {meetingContentUser(currentLookUserAccount, true)}
{currentLookUserAccount.enableCamera ? null : meetingContentError(currentLookUserAccount)} {currentLookUserAccount.enableCamera ? null : meetingContentError(currentLookUserAccount)}
</div> : null} </div> : null}
{currentLookUserStatus === 2 && currentLookUserAccount ? {currentLookUserStatus === 2 ?
<div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}> <div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}>
<div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-screen'> <div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-screen'>
<div className={styles.meetingContentSwiperCardVdeioLoading}> <div className={styles.meetingContentSwiperCardVdeioLoading}>
@ -2479,7 +2487,7 @@ const Meeting: React.FC = () => {
<FullscreenOutlined className={styles.meetingContentSwiperCardFullScreenIcon} title='全屏' onClick={() => setIsVideoFullScreen(true)} />} <FullscreenOutlined className={styles.meetingContentSwiperCardFullScreenIcon} title='全屏' onClick={() => setIsVideoFullScreen(true)} />}
{meetingContentUser(currentLookUserAccount, true)} {meetingContentUser(currentLookUserAccount, true)}
</div> : null} </div> : null}
{currentLookUserStatus === 3 && currentLookUserAccount ? {currentLookUserStatus === 3 ?
<div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}> <div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}>
<div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-remote-screen'> <div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-remote-screen'>
<div className={styles.meetingContentSwiperCardVdeioLoading}> <div className={styles.meetingContentSwiperCardVdeioLoading}>
@ -2490,7 +2498,7 @@ const Meeting: React.FC = () => {
<FullscreenOutlined className={styles.meetingContentSwiperCardFullScreenIcon} title='全屏' onClick={() => setIsVideoFullScreen(true)} />} <FullscreenOutlined className={styles.meetingContentSwiperCardFullScreenIcon} title='全屏' onClick={() => setIsVideoFullScreen(true)} />}
{meetingContentUser(currentLookUserAccount, true)} {meetingContentUser(currentLookUserAccount, true)}
</div> : null} </div> : null}
{currentLookUserStatus === 4 && currentLookUserAccount ? {currentLookUserStatus === 4 ?
<div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}> <div className={`${styles.meetingContentSwiperCard} ${setMeetingContentSwiperCardClass()} ${setMeetingContentSwiperCardFullScreenClass()}`}>
<div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-remote-camera'> <div className={`${styles.meetingContentSwiperCardVdeio}`} id='video-source-remote-camera'>
<div className={styles.meetingContentSwiperCardVdeioLoading}> <div className={styles.meetingContentSwiperCardVdeioLoading}>

View File

@ -393,8 +393,8 @@ export const agora = {
destroyRendererByConfig: async (uid: number, channelId?: string) => { destroyRendererByConfig: async (uid: number, channelId?: string) => {
await rtcEngine.destroyRendererByConfig(option.uid === uid ? VideoSourceType.VideoSourceCameraPrimary : VideoSourceType.VideoSourceRemote, channelId, uid); await rtcEngine.destroyRendererByConfig(option.uid === uid ? VideoSourceType.VideoSourceCameraPrimary : VideoSourceType.VideoSourceRemote, channelId, uid);
}, },
destroyRendererByViewScreenCapture: async () => { destroyRendererByView: async (key: string) => {
let dom = document.getElementById(`meetingAbsoluteVideo`); let dom = document.getElementById(key);
if (dom) { if (dom) {
await rtcEngine.destroyRendererByView(dom); await rtcEngine.destroyRendererByView(dom);
} }