From 0df7896ee5745d5794acffdbc997971124583b87 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 11 Jul 2024 10:57:06 +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 | 49 ++++++------ src/utils/package/{agora.js => agora.ts} | 95 +++++++++++------------- 2 files changed, 70 insertions(+), 74 deletions(-) rename src/utils/package/{agora.js => agora.ts} (80%) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 15ad22e..0b16456 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -14,6 +14,7 @@ import { storage } from '@/utils'; import { GetRoomFile, PostRoomFile, DeleteRoomFile, GetRoomUpFileurl, GetRoomFileDwUrl } from '@/api/Meeting'; import axios from 'axios'; import ImageUrl from '@/utils/package/imageUrl' +import agora from '@/utils/package/agora' const { Column } = Table const Meeting: React.FC = () => { const navigate = useNavigate(); @@ -118,7 +119,7 @@ const Meeting: React.FC = () => { useEffect(() => { if (isInit) { setUser(JSON.parse(storage.getItem('user') as string)) - // window.agora.setJoinChannel({ + // agora.setJoinChannel({ // channelId: state.channelId, // userid: user.userName, // token: state.token, @@ -153,49 +154,49 @@ const Meeting: React.FC = () => { setIsSharedScreenModal(true) break; case '停止共享': - window.agora.stopScreenCapture() + agora.stopScreenCapture() footerListTemplate[itemIndex][rowIndex].title = '共享屏幕' break; case '关闭声音': footerListTemplate[itemIndex][rowIndex].title = '开启声音' footerListTemplate[itemIndex][rowIndex].active = true setFooterList(footerListTemplate) - window.agora.muteLocalAudioStream(true) + agora.muteLocalAudioStream(true) break; case '开启声音': footerListTemplate[itemIndex][rowIndex].title = '关闭声音' footerListTemplate[itemIndex][rowIndex].active = false setFooterList(footerListTemplate) - window.agora.muteLocalAudioStream(false) + agora.muteLocalAudioStream(false) break; case '关闭视频': footerListTemplate[itemIndex][rowIndex].title = '开启视频' footerListTemplate[itemIndex][rowIndex].active = true setFooterList(footerListTemplate) - window.agora.muteLocalVideoStream(true) + agora.muteLocalVideoStream(true) break; case '开启视频': footerListTemplate[itemIndex][rowIndex].title = '关闭视频' footerListTemplate[itemIndex][rowIndex].active = false setFooterList(footerListTemplate) - window.agora.muteLocalVideoStream(false) + agora.muteLocalVideoStream(false) break; case '设置向导': getAudioMediaList() - window.agora.startRecordingDeviceTest(200) + agora.startRecordingDeviceTest(200) setIsStupWizard(true) break; case '录制': footerListTemplate[itemIndex][rowIndex].title = '录制中' footerListTemplate[itemIndex][rowIndex].active = true setFooterList(footerListTemplate) - window.agora.startRecording() + agora.startRecording() break; case '录制中': footerListTemplate[itemIndex][rowIndex].title = '录制' footerListTemplate[itemIndex][rowIndex].active = false setFooterList(footerListTemplate) - window.agora.stopRecording() + agora.stopRecording() break; case '共享文件': await getRoomFile() @@ -213,8 +214,8 @@ const Meeting: React.FC = () => { const footerListTemplate = [...footerList] footerListTemplate[footerListIndex.itemIndex][footerListIndex.rowIndex].title = '停止共享' setIsSharedScreenModal(false) - window.agora.setDesktopCapturerVideo(sharedScreenItem) - setVideoID(window.agora.getVideoId()) + agora.setDesktopCapturerVideo(sharedScreenItem) + setVideoID(agora.getVideoId()) } else { message.error('请选择应用!') } @@ -222,7 +223,7 @@ const Meeting: React.FC = () => { } const getDesktopCapturerVideo = (): void => { - window.agora.getDesktopCapturerVideo().then((res: any) => { + agora.getDesktopCapturerVideo().then((res: any) => { if (sharedScreenList.length !== res.length) { res.forEach((item: any) => { if (item.thumbImage.buffer) { @@ -238,7 +239,7 @@ const Meeting: React.FC = () => { }; const getAudioMediaList = (): void => { - const { currentDevices, currentDevice, currentVolume } = window.agora.getAudioMediaList(); + const { currentDevices, currentDevice, currentVolume } = agora.getAudioMediaList(); setAudioDeviceManager({ currentDevices: currentDevices.map((row: any) => { return { @@ -404,13 +405,13 @@ const Meeting: React.FC = () => { content={
{ - window.agora.leaveChannel() - window.agora.stopScreenCapture() + agora.leaveChannel() + agora.stopScreenCapture() navigate(-1) }}>全员结束会议
{ - window.agora.leaveChannel() - window.agora.stopScreenCapture() + agora.leaveChannel() + agora.stopScreenCapture() navigate(-1) }}>仅自己离开
{ setOpen(false) }}>取消
@@ -481,7 +482,7 @@ const Meeting: React.FC = () => { ...audioDeviceManager, currentDevice: e }) - window.agora.setRecordingDevice(e); + agora.setRecordingDevice(e); getAudioMediaList() }} />; @@ -493,7 +494,7 @@ const Meeting: React.FC = () => { ...audioDeviceManager, currentVolume: e }) - window.agora.setRecordingDeviceVolume(e) + agora.setRecordingDeviceVolume(e) }} style={{ flexGrow: 1 }} />
:
@@ -530,7 +531,7 @@ const Meeting: React.FC = () => { audio.srcObject = null; } setStepsStatus(false) - window.agora.startPreview().then((res: boolean) => { + agora.startPreview().then((res: boolean) => { setIsVideoLoad(res) }) }}>下一步 @@ -542,9 +543,9 @@ const Meeting: React.FC = () => { onClick={() => { if (isVideoLoad) { setIsVideoLoad(false) - window.agora.stopAudioDeviceLoopbackTest() + agora.stopAudioDeviceLoopbackTest() setStepsStatus(true) - window.agora.startRecordingDeviceTest(200) + agora.startRecordingDeviceTest(200) } else { message.error('视频加载中!') } @@ -555,8 +556,8 @@ const Meeting: React.FC = () => { className='m-ant-btn' onClick={() => { if (isVideoLoad) { - window.agora.stopAudioDeviceLoopbackTest() - window.agora.setRecordingDeviceVolume(audioDeviceManager.currentVolume) + agora.stopAudioDeviceLoopbackTest() + agora.setRecordingDeviceVolume(audioDeviceManager.currentVolume) setIsStupWizard(false) setStepsStatus(true) setIsVideoLoad(false) diff --git a/src/utils/package/agora.js b/src/utils/package/agora.ts similarity index 80% rename from src/utils/package/agora.js rename to src/utils/package/agora.ts index 2e07b48..d642857 100644 --- a/src/utils/package/agora.js +++ b/src/utils/package/agora.ts @@ -11,7 +11,7 @@ const { } = require("agora-electron-sdk"); const { message } = require('antd'); const rtcEngine = createAgoraRtcEngine(); -const option = { +const option: any = { appId: 'dcfc466a6ecb4a1f972630065dfb1e75', token: '', channelId: '', @@ -23,7 +23,7 @@ rtcEngine.initialize({ rtcEngine.registerEventHandler({ // 监听本地用户加入频道事件 - onJoinChannelSuccess: ({ channelId, localUid }, elapsed) => { + onJoinChannelSuccess: ({ channelId, localUid }: any, elapsed: any) => { console.log({ channelId, localUid }, elapsed, '加入房间'); // 本地用户加入频道后,设置本地视频窗口 rtcEngine.setupLocalVideo({ @@ -31,61 +31,64 @@ rtcEngine.registerEventHandler({ // sourceType: VideoSourceType.VideoSourceScreen, sourceType: VideoSourceType.VideoSourceCameraPrimary, uid: localUid, - view: getDom(), + view: agora.getDom(), setupMode: VideoViewSetupMode.VideoViewSetupAdd, }); }, // 监听远端用户加入频道事件 - onUserJoined: ({ channelId, localUid }, remoteUid, elapsed) => { + onUserJoined: ({ channelId, localUid }: any, remoteUid: any, elapsed: any) => { + console.log({ channelId, localUid }, remoteUid, '远端加入频道'); // 远端用户加入频道后,设置远端视频窗口 rtcEngine.setupRemoteVideo( { renderMode: RenderModeType.RenderModeFit, sourceType: VideoSourceType.VideoSourceRemote, uid: remoteUid, - view: getDom(), + view: agora.getDom(), setupMode: VideoViewSetupMode.VideoViewSetupAdd, }, { channelId }, ); }, - // 视频发布状态改变回调 - onVideoPublishStateChanged: (source, channel, oldState, newState, elapseSinceLastState) => { - if (newState === 1) { - - } - }, - // 音频发布状态改变回调 - onAudioPublishStateChanged: (channel, oldState, newState, elapseSinceLastState) => { - if (newState === 1) { - - } - }, // 监听用户离开频道事件 - onUserOffline: ({ channelId, localUid }, remoteUid, reason) => { + onUserOffline: ({ channelId, localUid }: any, remoteUid: any, reason: any) => { // 远端用户离开频道后,关闭远端视频窗口 + console.log({ channelId, localUid }, remoteUid, '离开频道'); rtcEngine.setupRemoteVideo( { renderMode: RenderModeType.RenderModeFit, sourceType: VideoSourceType.VideoSourceRemote, uid: remoteUid, - view: getDom(), + view: agora.getDom(), setupMode: VideoViewSetupMode.VideoViewSetupRemove, }, ); }, + // 视频发布状态改变回调 + onVideoPublishStateChanged: (source: any, channel: any, oldState: any, newState: any, elapseSinceLastState: any) => { + if (newState === 1) { + + } + }, + // 音频发布状态改变回调 + onAudioPublishStateChanged: (channel: any, oldState: any, newState: any, elapseSinceLastState: any) => { + if (newState === 1) { + + } + }, // 用户音量提示回调。 - onAudioVolumeIndication: (connection, speakers, speakerNumber, totalVolume) => { + onAudioVolumeIndication: (connection: any, speakers: any, speakerNumber: any, totalVolume: any,) => { const percentage = (totalVolume / 255) * 100 - if (document.getElementById('recordingDeviceTest')) { - document.getElementById('recordingDeviceTest').style.width = `${percentage}%` + const dom = document.getElementById('recordingDeviceTest') as any; + if (dom) { + dom.style.width = `${percentage}%` } } }); -let videoID = ''; -let iMediaRecorder = ''; +let videoID: string = ''; +let iMediaRecorder: any = ''; const agora = { getDom: () => { @@ -100,7 +103,7 @@ const agora = { }) }, // 加入频道 - joinChannel: (bool) => { + joinChannel: (bool: boolean) => { if (bool) { rtcEngine.joinChannel(option.token, option.channelId, option.userid, { channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, //设置频道场景为直播场景 @@ -137,11 +140,11 @@ const agora = { }) iMediaRecorder.setMediaRecorderObserver({ // 录制状态发生改变回调。 - onRecorderStateChanged: (channelId, uid, state, reason) => { + onRecorderStateChanged: (channelId: any, uid: any, state: any, reason: any) => { console.log(channelId, uid, state, reason, '录制状态发生改变回调。'); }, // 录制信息更新回调。 - onRecorderInfoUpdated: (channelId, uid, info) => { + onRecorderInfoUpdated: (channelId: any, uid: any, info: any) => { console.log(channelId, uid, info, '录制信息更新回调。'); }, }) @@ -157,13 +160,13 @@ const agora = { rtcEngine.stopScreenCapture(); }, // 开启本地视频预览 - startPreview: async () => { + startPreview: async (): Promise => { return new Promise((resolve, reject) => { navigator.mediaDevices.getUserMedia({ video: true, audio: true, }).then((stream) => { - let dom = document.getElementById('startPreview'); + let dom = document.getElementById('startPreview') as any; dom.srcObject = stream; dom.play() resolve(true) @@ -177,29 +180,29 @@ const agora = { stopAudioDeviceLoopbackTest: () => { rtcEngine.getAudioDeviceManager().stopAudioDeviceLoopbackTest() rtcEngine.getAudioDeviceManager().stopRecordingDeviceTest() - let video = document.getElementById('startPreview'); + let video = document.getElementById('startPreview') as any; if (video.srcObject) { const tracks = video.srcObject.getTracks(); - tracks.forEach((track) => { + tracks.forEach((track: any) => { track.stop(); }); video.srcObject = null; } - let audio = document.getElementById('startAudio'); + let audio = document.getElementById('startAudio') as any; if (audio.srcObject) { const tracks = audio.srcObject.getTracks(); - tracks.forEach((track) => { + tracks.forEach((track: any) => { track.stop(); }); audio.srcObject = null; } }, // 启动音频采集设备测试 - startRecordingDeviceTest: (indicationInterval) => { + startRecordingDeviceTest: (indicationInterval: number) => { rtcEngine.getAudioDeviceManager().startRecordingDeviceTest(indicationInterval) navigator.mediaDevices.getUserMedia({ audio: true }) .then((stream) => { - let dom = document.getElementById('startAudio'); + let dom = document.getElementById('startAudio') as any; dom.srcObject = stream; dom.play() }) @@ -216,11 +219,11 @@ const agora = { } }, // 设置音频设备音量 - setRecordingDeviceVolume: (volume) => { + setRecordingDeviceVolume: (volume: number) => { rtcEngine.getAudioDeviceManager().setRecordingDeviceVolume(volume) }, // 设置音频采集设备 - setRecordingDevice: (deviceId) => { + setRecordingDevice: (deviceId: string) => { rtcEngine.getAudioDeviceManager().setRecordingDevice(deviceId) }, // 摄像头采集 @@ -229,27 +232,19 @@ const agora = { // joinChannel(false) }, // 加入频道 - setJoinChannel: (data) => { + setJoinChannel: (data: any) => { option.token = data.token; option.channelId = data.channelId; option.userid = Number(data.userid); rtcEngine.startCameraCapture(VideoSourceType.VideoSourceCamera, {}) // joinChannel(false) }, - // 离开频道 - leaveChannel: () => { - // leaveChannel() - }, - // 停止共享屏幕 - stopScreenCapture: () => { - // stopScreenCapture() - }, // 取消或恢复发布本地音频流 - muteLocalAudioStream: (mute) => { + muteLocalAudioStream: (mute: any) => { rtcEngine.muteLocalAudioStream(mute) }, // 取消或恢复发布本地视频流 - muteLocalVideoStream: (mute) => { + muteLocalVideoStream: (mute: any) => { rtcEngine.muteLocalVideoStream(mute) }, // 获取当前生成的视频id @@ -262,7 +257,7 @@ const agora = { }, // 共享屏幕采集 - setDesktopCapturerVideo: (targetSource) => { + setDesktopCapturerVideo: (targetSource: any) => { // stopScreenCapture() if ( targetSource.type === @@ -292,4 +287,4 @@ const agora = { }, } -window.agora = agora; \ No newline at end of file +export default agora; \ No newline at end of file