This commit is contained in:
yj 2024-07-11 10:57:06 +08:00
parent c5086bcf1a
commit 0df7896ee5
2 changed files with 70 additions and 74 deletions

View File

@ -14,6 +14,7 @@ import { storage } from '@/utils';
import { GetRoomFile, PostRoomFile, DeleteRoomFile, GetRoomUpFileurl, GetRoomFileDwUrl } from '@/api/Meeting'; import { GetRoomFile, PostRoomFile, DeleteRoomFile, GetRoomUpFileurl, GetRoomFileDwUrl } from '@/api/Meeting';
import axios from 'axios'; import axios from 'axios';
import ImageUrl from '@/utils/package/imageUrl' import ImageUrl from '@/utils/package/imageUrl'
import agora from '@/utils/package/agora'
const { Column } = Table const { Column } = Table
const Meeting: React.FC = () => { const Meeting: React.FC = () => {
const navigate = useNavigate(); const navigate = useNavigate();
@ -118,7 +119,7 @@ const Meeting: React.FC = () => {
useEffect(() => { useEffect(() => {
if (isInit) { if (isInit) {
setUser(JSON.parse(storage.getItem('user') as string)) setUser(JSON.parse(storage.getItem('user') as string))
// window.agora.setJoinChannel({ // agora.setJoinChannel({
// channelId: state.channelId, // channelId: state.channelId,
// userid: user.userName, // userid: user.userName,
// token: state.token, // token: state.token,
@ -153,49 +154,49 @@ const Meeting: React.FC = () => {
setIsSharedScreenModal(true) setIsSharedScreenModal(true)
break; break;
case '停止共享': case '停止共享':
window.agora.stopScreenCapture() agora.stopScreenCapture()
footerListTemplate[itemIndex][rowIndex].title = '共享屏幕' footerListTemplate[itemIndex][rowIndex].title = '共享屏幕'
break; break;
case '关闭声音': case '关闭声音':
footerListTemplate[itemIndex][rowIndex].title = '开启声音' footerListTemplate[itemIndex][rowIndex].title = '开启声音'
footerListTemplate[itemIndex][rowIndex].active = true footerListTemplate[itemIndex][rowIndex].active = true
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.agora.muteLocalAudioStream(true) agora.muteLocalAudioStream(true)
break; break;
case '开启声音': case '开启声音':
footerListTemplate[itemIndex][rowIndex].title = '关闭声音' footerListTemplate[itemIndex][rowIndex].title = '关闭声音'
footerListTemplate[itemIndex][rowIndex].active = false footerListTemplate[itemIndex][rowIndex].active = false
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.agora.muteLocalAudioStream(false) agora.muteLocalAudioStream(false)
break; break;
case '关闭视频': case '关闭视频':
footerListTemplate[itemIndex][rowIndex].title = '开启视频' footerListTemplate[itemIndex][rowIndex].title = '开启视频'
footerListTemplate[itemIndex][rowIndex].active = true footerListTemplate[itemIndex][rowIndex].active = true
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.agora.muteLocalVideoStream(true) agora.muteLocalVideoStream(true)
break; break;
case '开启视频': case '开启视频':
footerListTemplate[itemIndex][rowIndex].title = '关闭视频' footerListTemplate[itemIndex][rowIndex].title = '关闭视频'
footerListTemplate[itemIndex][rowIndex].active = false footerListTemplate[itemIndex][rowIndex].active = false
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.agora.muteLocalVideoStream(false) agora.muteLocalVideoStream(false)
break; break;
case '设置向导': case '设置向导':
getAudioMediaList() getAudioMediaList()
window.agora.startRecordingDeviceTest(200) agora.startRecordingDeviceTest(200)
setIsStupWizard(true) setIsStupWizard(true)
break; break;
case '录制': case '录制':
footerListTemplate[itemIndex][rowIndex].title = '录制中' footerListTemplate[itemIndex][rowIndex].title = '录制中'
footerListTemplate[itemIndex][rowIndex].active = true footerListTemplate[itemIndex][rowIndex].active = true
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.agora.startRecording() agora.startRecording()
break; break;
case '录制中': case '录制中':
footerListTemplate[itemIndex][rowIndex].title = '录制' footerListTemplate[itemIndex][rowIndex].title = '录制'
footerListTemplate[itemIndex][rowIndex].active = false footerListTemplate[itemIndex][rowIndex].active = false
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
window.agora.stopRecording() agora.stopRecording()
break; break;
case '共享文件': case '共享文件':
await getRoomFile() await getRoomFile()
@ -213,8 +214,8 @@ const Meeting: React.FC = () => {
const footerListTemplate = [...footerList] const footerListTemplate = [...footerList]
footerListTemplate[footerListIndex.itemIndex][footerListIndex.rowIndex].title = '停止共享' footerListTemplate[footerListIndex.itemIndex][footerListIndex.rowIndex].title = '停止共享'
setIsSharedScreenModal(false) setIsSharedScreenModal(false)
window.agora.setDesktopCapturerVideo(sharedScreenItem) agora.setDesktopCapturerVideo(sharedScreenItem)
setVideoID(window.agora.getVideoId()) setVideoID(agora.getVideoId())
} else { } else {
message.error('请选择应用!') message.error('请选择应用!')
} }
@ -222,7 +223,7 @@ const Meeting: React.FC = () => {
} }
const getDesktopCapturerVideo = (): void => { const getDesktopCapturerVideo = (): void => {
window.agora.getDesktopCapturerVideo().then((res: any) => { agora.getDesktopCapturerVideo().then((res: any) => {
if (sharedScreenList.length !== res.length) { if (sharedScreenList.length !== res.length) {
res.forEach((item: any) => { res.forEach((item: any) => {
if (item.thumbImage.buffer) { if (item.thumbImage.buffer) {
@ -238,7 +239,7 @@ const Meeting: React.FC = () => {
}; };
const getAudioMediaList = (): void => { const getAudioMediaList = (): void => {
const { currentDevices, currentDevice, currentVolume } = window.agora.getAudioMediaList(); const { currentDevices, currentDevice, currentVolume } = agora.getAudioMediaList();
setAudioDeviceManager({ setAudioDeviceManager({
currentDevices: currentDevices.map((row: any) => { currentDevices: currentDevices.map((row: any) => {
return { return {
@ -404,13 +405,13 @@ const Meeting: React.FC = () => {
content={ content={
<div className='meetingContentFooterPopover'> <div className='meetingContentFooterPopover'>
<div onClick={() => { <div onClick={() => {
window.agora.leaveChannel() agora.leaveChannel()
window.agora.stopScreenCapture() agora.stopScreenCapture()
navigate(-1) navigate(-1)
}}></div> }}></div>
<div onClick={() => { <div onClick={() => {
window.agora.leaveChannel() agora.leaveChannel()
window.agora.stopScreenCapture() agora.stopScreenCapture()
navigate(-1) navigate(-1)
}}></div> }}></div>
<div onClick={() => { setOpen(false) }}></div> <div onClick={() => { setOpen(false) }}></div>
@ -481,7 +482,7 @@ const Meeting: React.FC = () => {
...audioDeviceManager, ...audioDeviceManager,
currentDevice: e currentDevice: e
}) })
window.agora.setRecordingDevice(e); agora.setRecordingDevice(e);
getAudioMediaList() getAudioMediaList()
}} />; }} />;
<audio src="" id='startAudio'></audio> <audio src="" id='startAudio'></audio>
@ -493,7 +494,7 @@ const Meeting: React.FC = () => {
...audioDeviceManager, ...audioDeviceManager,
currentVolume: e currentVolume: e
}) })
window.agora.setRecordingDeviceVolume(e) agora.setRecordingDeviceVolume(e)
}} style={{ flexGrow: 1 }} /> }} style={{ flexGrow: 1 }} />
</div> : </div> :
<div> <div>
@ -530,7 +531,7 @@ const Meeting: React.FC = () => {
audio.srcObject = null; audio.srcObject = null;
} }
setStepsStatus(false) setStepsStatus(false)
window.agora.startPreview().then((res: boolean) => { agora.startPreview().then((res: boolean) => {
setIsVideoLoad(res) setIsVideoLoad(res)
}) })
}}></Button> }}></Button>
@ -542,9 +543,9 @@ const Meeting: React.FC = () => {
onClick={() => { onClick={() => {
if (isVideoLoad) { if (isVideoLoad) {
setIsVideoLoad(false) setIsVideoLoad(false)
window.agora.stopAudioDeviceLoopbackTest() agora.stopAudioDeviceLoopbackTest()
setStepsStatus(true) setStepsStatus(true)
window.agora.startRecordingDeviceTest(200) agora.startRecordingDeviceTest(200)
} else { } else {
message.error('视频加载中!') message.error('视频加载中!')
} }
@ -555,8 +556,8 @@ const Meeting: React.FC = () => {
className='m-ant-btn' className='m-ant-btn'
onClick={() => { onClick={() => {
if (isVideoLoad) { if (isVideoLoad) {
window.agora.stopAudioDeviceLoopbackTest() agora.stopAudioDeviceLoopbackTest()
window.agora.setRecordingDeviceVolume(audioDeviceManager.currentVolume) agora.setRecordingDeviceVolume(audioDeviceManager.currentVolume)
setIsStupWizard(false) setIsStupWizard(false)
setStepsStatus(true) setStepsStatus(true)
setIsVideoLoad(false) setIsVideoLoad(false)

View File

@ -11,7 +11,7 @@ const {
} = require("agora-electron-sdk"); } = require("agora-electron-sdk");
const { message } = require('antd'); const { message } = require('antd');
const rtcEngine = createAgoraRtcEngine(); const rtcEngine = createAgoraRtcEngine();
const option = { const option: any = {
appId: 'dcfc466a6ecb4a1f972630065dfb1e75', appId: 'dcfc466a6ecb4a1f972630065dfb1e75',
token: '', token: '',
channelId: '', channelId: '',
@ -23,7 +23,7 @@ rtcEngine.initialize({
rtcEngine.registerEventHandler({ rtcEngine.registerEventHandler({
// 监听本地用户加入频道事件 // 监听本地用户加入频道事件
onJoinChannelSuccess: ({ channelId, localUid }, elapsed) => { onJoinChannelSuccess: ({ channelId, localUid }: any, elapsed: any) => {
console.log({ channelId, localUid }, elapsed, '加入房间'); console.log({ channelId, localUid }, elapsed, '加入房间');
// 本地用户加入频道后,设置本地视频窗口 // 本地用户加入频道后,设置本地视频窗口
rtcEngine.setupLocalVideo({ rtcEngine.setupLocalVideo({
@ -31,61 +31,64 @@ rtcEngine.registerEventHandler({
// sourceType: VideoSourceType.VideoSourceScreen, // sourceType: VideoSourceType.VideoSourceScreen,
sourceType: VideoSourceType.VideoSourceCameraPrimary, sourceType: VideoSourceType.VideoSourceCameraPrimary,
uid: localUid, uid: localUid,
view: getDom(), view: agora.getDom(),
setupMode: VideoViewSetupMode.VideoViewSetupAdd, setupMode: VideoViewSetupMode.VideoViewSetupAdd,
}); });
}, },
// 监听远端用户加入频道事件 // 监听远端用户加入频道事件
onUserJoined: ({ channelId, localUid }, remoteUid, elapsed) => { onUserJoined: ({ channelId, localUid }: any, remoteUid: any, elapsed: any) => {
console.log({ channelId, localUid }, remoteUid, '远端加入频道');
// 远端用户加入频道后,设置远端视频窗口 // 远端用户加入频道后,设置远端视频窗口
rtcEngine.setupRemoteVideo( rtcEngine.setupRemoteVideo(
{ {
renderMode: RenderModeType.RenderModeFit, renderMode: RenderModeType.RenderModeFit,
sourceType: VideoSourceType.VideoSourceRemote, sourceType: VideoSourceType.VideoSourceRemote,
uid: remoteUid, uid: remoteUid,
view: getDom(), view: agora.getDom(),
setupMode: VideoViewSetupMode.VideoViewSetupAdd, setupMode: VideoViewSetupMode.VideoViewSetupAdd,
}, },
{ channelId }, { 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( rtcEngine.setupRemoteVideo(
{ {
renderMode: RenderModeType.RenderModeFit, renderMode: RenderModeType.RenderModeFit,
sourceType: VideoSourceType.VideoSourceRemote, sourceType: VideoSourceType.VideoSourceRemote,
uid: remoteUid, uid: remoteUid,
view: getDom(), view: agora.getDom(),
setupMode: VideoViewSetupMode.VideoViewSetupRemove, 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 const percentage = (totalVolume / 255) * 100
if (document.getElementById('recordingDeviceTest')) { const dom = document.getElementById('recordingDeviceTest') as any;
document.getElementById('recordingDeviceTest').style.width = `${percentage}%` if (dom) {
dom.style.width = `${percentage}%`
} }
} }
}); });
let videoID = ''; let videoID: string = '';
let iMediaRecorder = ''; let iMediaRecorder: any = '';
const agora = { const agora = {
getDom: () => { getDom: () => {
@ -100,7 +103,7 @@ const agora = {
}) })
}, },
// 加入频道 // 加入频道
joinChannel: (bool) => { joinChannel: (bool: boolean) => {
if (bool) { if (bool) {
rtcEngine.joinChannel(option.token, option.channelId, option.userid, { rtcEngine.joinChannel(option.token, option.channelId, option.userid, {
channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, //设置频道场景为直播场景 channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, //设置频道场景为直播场景
@ -137,11 +140,11 @@ const agora = {
}) })
iMediaRecorder.setMediaRecorderObserver({ iMediaRecorder.setMediaRecorderObserver({
// 录制状态发生改变回调。 // 录制状态发生改变回调。
onRecorderStateChanged: (channelId, uid, state, reason) => { onRecorderStateChanged: (channelId: any, uid: any, state: any, reason: any) => {
console.log(channelId, uid, state, reason, '录制状态发生改变回调。'); console.log(channelId, uid, state, reason, '录制状态发生改变回调。');
}, },
// 录制信息更新回调。 // 录制信息更新回调。
onRecorderInfoUpdated: (channelId, uid, info) => { onRecorderInfoUpdated: (channelId: any, uid: any, info: any) => {
console.log(channelId, uid, info, '录制信息更新回调。'); console.log(channelId, uid, info, '录制信息更新回调。');
}, },
}) })
@ -157,13 +160,13 @@ const agora = {
rtcEngine.stopScreenCapture(); rtcEngine.stopScreenCapture();
}, },
// 开启本地视频预览 // 开启本地视频预览
startPreview: async () => { startPreview: async (): Promise<boolean> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
navigator.mediaDevices.getUserMedia({ navigator.mediaDevices.getUserMedia({
video: true, video: true,
audio: true, audio: true,
}).then((stream) => { }).then((stream) => {
let dom = document.getElementById('startPreview'); let dom = document.getElementById('startPreview') as any;
dom.srcObject = stream; dom.srcObject = stream;
dom.play() dom.play()
resolve(true) resolve(true)
@ -177,29 +180,29 @@ const agora = {
stopAudioDeviceLoopbackTest: () => { stopAudioDeviceLoopbackTest: () => {
rtcEngine.getAudioDeviceManager().stopAudioDeviceLoopbackTest() rtcEngine.getAudioDeviceManager().stopAudioDeviceLoopbackTest()
rtcEngine.getAudioDeviceManager().stopRecordingDeviceTest() rtcEngine.getAudioDeviceManager().stopRecordingDeviceTest()
let video = document.getElementById('startPreview'); let video = document.getElementById('startPreview') as any;
if (video.srcObject) { if (video.srcObject) {
const tracks = video.srcObject.getTracks(); const tracks = video.srcObject.getTracks();
tracks.forEach((track) => { tracks.forEach((track: any) => {
track.stop(); track.stop();
}); });
video.srcObject = null; video.srcObject = null;
} }
let audio = document.getElementById('startAudio'); let audio = document.getElementById('startAudio') as any;
if (audio.srcObject) { if (audio.srcObject) {
const tracks = audio.srcObject.getTracks(); const tracks = audio.srcObject.getTracks();
tracks.forEach((track) => { tracks.forEach((track: any) => {
track.stop(); track.stop();
}); });
audio.srcObject = null; audio.srcObject = null;
} }
}, },
// 启动音频采集设备测试 // 启动音频采集设备测试
startRecordingDeviceTest: (indicationInterval) => { startRecordingDeviceTest: (indicationInterval: number) => {
rtcEngine.getAudioDeviceManager().startRecordingDeviceTest(indicationInterval) rtcEngine.getAudioDeviceManager().startRecordingDeviceTest(indicationInterval)
navigator.mediaDevices.getUserMedia({ audio: true }) navigator.mediaDevices.getUserMedia({ audio: true })
.then((stream) => { .then((stream) => {
let dom = document.getElementById('startAudio'); let dom = document.getElementById('startAudio') as any;
dom.srcObject = stream; dom.srcObject = stream;
dom.play() dom.play()
}) })
@ -216,11 +219,11 @@ const agora = {
} }
}, },
// 设置音频设备音量 // 设置音频设备音量
setRecordingDeviceVolume: (volume) => { setRecordingDeviceVolume: (volume: number) => {
rtcEngine.getAudioDeviceManager().setRecordingDeviceVolume(volume) rtcEngine.getAudioDeviceManager().setRecordingDeviceVolume(volume)
}, },
// 设置音频采集设备 // 设置音频采集设备
setRecordingDevice: (deviceId) => { setRecordingDevice: (deviceId: string) => {
rtcEngine.getAudioDeviceManager().setRecordingDevice(deviceId) rtcEngine.getAudioDeviceManager().setRecordingDevice(deviceId)
}, },
// 摄像头采集 // 摄像头采集
@ -229,27 +232,19 @@ const agora = {
// joinChannel(false) // joinChannel(false)
}, },
// 加入频道 // 加入频道
setJoinChannel: (data) => { setJoinChannel: (data: any) => {
option.token = data.token; option.token = data.token;
option.channelId = data.channelId; option.channelId = data.channelId;
option.userid = Number(data.userid); option.userid = Number(data.userid);
rtcEngine.startCameraCapture(VideoSourceType.VideoSourceCamera, {}) rtcEngine.startCameraCapture(VideoSourceType.VideoSourceCamera, {})
// joinChannel(false) // joinChannel(false)
}, },
// 离开频道
leaveChannel: () => {
// leaveChannel()
},
// 停止共享屏幕
stopScreenCapture: () => {
// stopScreenCapture()
},
// 取消或恢复发布本地音频流 // 取消或恢复发布本地音频流
muteLocalAudioStream: (mute) => { muteLocalAudioStream: (mute: any) => {
rtcEngine.muteLocalAudioStream(mute) rtcEngine.muteLocalAudioStream(mute)
}, },
// 取消或恢复发布本地视频流 // 取消或恢复发布本地视频流
muteLocalVideoStream: (mute) => { muteLocalVideoStream: (mute: any) => {
rtcEngine.muteLocalVideoStream(mute) rtcEngine.muteLocalVideoStream(mute)
}, },
// 获取当前生成的视频id // 获取当前生成的视频id
@ -262,7 +257,7 @@ const agora = {
}, },
// 共享屏幕采集 // 共享屏幕采集
setDesktopCapturerVideo: (targetSource) => { setDesktopCapturerVideo: (targetSource: any) => {
// stopScreenCapture() // stopScreenCapture()
if ( if (
targetSource.type === targetSource.type ===
@ -292,4 +287,4 @@ const agora = {
}, },
} }
window.agora = agora; export default agora;