This commit is contained in:
yj 2024-07-15 09:41:03 +08:00
parent e531e71f4f
commit b4e92c0004
3 changed files with 63 additions and 77 deletions

View File

@ -34,6 +34,7 @@ const Meeting: React.FC = () => {
const [isSharedFilesModel, setIsSharedFilesModel] = useState(false);
const [sharedScreenList, setSharedScreenList] = useState<any>([]);
const [sharedScreenItem, setSharedScreenItem] = useState<any>('');
const [textMsg, setTextMsg] = useState('');
const [footerList, setFooterList] = useState([
[
{
@ -130,6 +131,18 @@ const Meeting: React.FC = () => {
};
}, [fileList.pageIndex]);
useEffect(() => {
roomUserList.forEach((item: any) => {
let dom = document.getElementById(`video-${item.account}`) as HTMLElement
if (!dom.hasChildNodes()) {
agora.setVideo({
account: Number(item.account),
view: dom,
channelId: state.channelId,
})
}
});
}, [roomUserList]);
// 操作按钮
const changeStatusList = async (row: any, itemIndex: number, rowIndex: number): Promise<void> => {
const footerListTemplate = [...footerList]
@ -257,11 +270,10 @@ const Meeting: React.FC = () => {
}
// 获取房间用户
const getRoomUser = async (callBack: Function): Promise<void> => {
const getRoomUser = async (): Promise<void> => {
await GetRoomUser(state.channelId).then(res => {
if (res.code === 200) {
setRoomUserList(res.data)
callBack(res.data)
}
})
}
@ -271,35 +283,14 @@ const Meeting: React.FC = () => {
onInvoke('joinChannel', {
roomNum: state.channelId
})
getRoomUser((data: any) => {
setTimeout(() => {
data.forEach((item: any) => {
agora.setVideo({
account: Number(item.account),
view: document.getElementById(`video-${item.account}`),
channelId: state.channelId
})
})
}, 1000)
})
getRoomUser()
} else {
onInvoke('levelChannel', {
roomNum: state.channelId
})
}
} else if (e.key === 'isRemotJoin') {
getRoomUser((data: any) => {
setTimeout(() => {
data.forEach((item: any) => {
agora.setVideo({
account: Number(item.account),
view: document.getElementById(`video-${item.account}`),
channelId: state.channelId,
isRemotJoin: e.value
})
})
}, 1000)
})
getRoomUser()
}
};
return (
@ -413,8 +404,15 @@ const Meeting: React.FC = () => {
)}
</div>
<div className={`${styles.meetingUserChatInput} drag`}>
<Input.TextArea placeholder="请输入消息" style={{ flexGrow: 1 }}></Input.TextArea>
<Button type="primary" className='m-ant-btn' style={{ flexShrink: 0, marginTop: '4px' }}></Button>
<Input.TextArea placeholder="请输入消息" style={{ flexGrow: 1 }} onChange={(e) => {
setTextMsg(e.target.value)
}}></Input.TextArea>
<Button type="primary" className='m-ant-btn' style={{ flexShrink: 0, marginTop: '4px' }} onClick={() => {
onInvoke('senChannelMsg', {
roomNum: state.channelId,
msg: textMsg,
})
}}></Button>
</div>
</div>
}

View File

@ -30,7 +30,7 @@ const agora = {
});
rtcEngine.registerEventHandler({
// 监听本地用户加入频道事件
onJoinChannelSuccess: (info: any, elapsed: any) => {
onJoinChannelSuccess: async (info: any, elapsed: any) => {
storage.setItem('isJoin', true)
},
// 监听远端用户加入频道事件
@ -41,6 +41,15 @@ const agora = {
onUserOffline: (info: any, remoteUid: any, reason: any) => {
// 远端用户离开频道后,关闭远端视频窗口
storage.setItem('isRemotJoin', false)
rtcEngine.setupRemoteVideo(
{
renderMode: RenderModeType.RenderModeFit,
sourceType: VideoSourceType.VideoSourceRemote,
uid: Number(info.localUid),
view: document.getElementById(`video-${info.localUid}`),
setupMode: VideoViewSetupMode.VideoViewSetupRemove,
},
);
},
// 视频发布状态改变回调
onVideoPublishStateChanged: (source: any, channel: any, oldState: any, newState: any, elapseSinceLastState: any) => {
@ -64,60 +73,36 @@ const agora = {
}
});
},
// 渲染视频
setVideo: (item: any) => {
console.log(item);
// 本地加入
function setupLocalVideo() {
rtcEngine.setupLocalVideo({
// 本地加入
setupLocalVideo: (item: any) => {
rtcEngine.setupLocalVideo({
renderMode: RenderModeType.RenderModeFit,
// sourceType: VideoSourceType.VideoSourceScreen,
sourceType: VideoSourceType.VideoSourceCameraPrimary,
uid: item.account,
view: item.view,
setupMode: VideoViewSetupMode.VideoViewSetupAdd,
});
},
// 远端加入
setupRemoteVideoJoin: (item: any) => {
rtcEngine.setupRemoteVideo(
{
renderMode: RenderModeType.RenderModeFit,
// sourceType: VideoSourceType.VideoSourceScreen,
sourceType: VideoSourceType.VideoSourceCameraPrimary,
sourceType: VideoSourceType.VideoSourceRemote,
uid: item.account,
view: item.view,
setupMode: VideoViewSetupMode.VideoViewSetupAdd,
});
}
// 远端加入
function setupRemoteVideoJoin() {
rtcEngine.setupRemoteVideo(
{
renderMode: RenderModeType.RenderModeFit,
sourceType: VideoSourceType.VideoSourceRemote,
uid: item.account,
view: item.view,
setupMode: VideoViewSetupMode.VideoViewSetupAdd,
},
{ channelId: item.channelId },
);
}
// 远端退出
function setupRemoteVideoLeave() {
rtcEngine.setupRemoteVideo(
{
renderMode: RenderModeType.RenderModeFit,
sourceType: VideoSourceType.VideoSourceRemote,
uid: item.account,
view: item.view,
setupMode: VideoViewSetupMode.VideoViewSetupRemove,
},
);
}
if (typeof item.isRemotJoin === 'boolean') {
if (option.userid != item.account) {
if (item.isRemotJoin) {
setupRemoteVideoJoin()
} else {
setupRemoteVideoLeave()
}
}
},
{ channelId: item.channelId },
);
},
// 渲染视频
setVideo: (item: any) => {
if (option.userid === item.account) {
agora.setupLocalVideo(item)
} else {
if (option.userid === item.account) {
setupLocalVideo()
} else {
setupRemoteVideoJoin()
}
agora.setupRemoteVideoJoin(item)
}
},
// 离开频道

View File

@ -27,6 +27,9 @@ export const onInvoke = (str: string, data: any) => {
case 'levelChannel':
connection.invoke(str, data.roomNum)
break;
case 'senChannelMsg':
connection.invoke(str, data.roomNum, data.msg)
break;
}
}