Compare commits

..

No commits in common. "9c7f5cd59b4fc41bc92721301efbb77fa39b9b54" and "2777fad3ee5e8bf2cfd6927280ceeeec08f15e0f" have entirely different histories.

4 changed files with 118 additions and 97 deletions

View File

@ -153,7 +153,7 @@ const Index: React.FC = () => {
<Operation></Operation>
</div>
<div className={styles.indexBtns}>
{user?.roleId === '1' ? <Button type="primary"
{user.roleId === '1' ? <Button type="primary"
icon={<img src={ImageUrl.icon8} alt="" />}
className='m-ant-btn drag'
onClick={() => {

View File

@ -91,9 +91,9 @@ const Home: React.FC = () => {
<div className={styles.homeLeft}>
<div className='drag'>
<div>
<Avatar name={userInfo?.userName} />
<Avatar name={userInfo.userName} />
</div>
<span>{userInfo?.userName}</span>
<span>{userInfo.userName}</span>
</div>
<div>
<img src={ImageUrl.icon14} alt="" />

View File

@ -550,6 +550,7 @@ const Meeting: React.FC = () => {
reader.onload = async () => {
try {
const userDataPath = await ipcRenderer.invoke('get-user-data-path');
// 获取当前日期并格式化
const date = new Date();
const year = date.getFullYear();
@ -558,21 +559,36 @@ const Meeting: React.FC = () => {
const hours = date.getHours();
const minutes = date.getMinutes();
const formattedDate = `${year}${month}${day}${hours}${minutes}`;
const setting = await JSON.parse(storage.getItem('setting') as string)
const buffer = Buffer.from(reader.result);
const mp4Path = `${setting.recordingFilesPath}会议录制_${state.roomName}_${state.channelId}_${formattedDate}_beforehanlder.mp4`;
const mp4Path=`${setting.recordingFilesPath}会议录制_${state.roomName}_${state.channelId}_${formattedDate}_beforehanlder.mp4`;
await fs.writeFile(mp4Path, buffer);
// 获取应用程序安装路径
const ffmpegPath = path.join(userDataPath, "ffmpeg.exe");
const inputFilePath = mp4Path; // 输入文件路径
const outputFilePath = mp4Path.replace('_beforehanlder', ''); // 输出文件路径
const outputFilePath = mp4Path.replace('_beforehanlder',''); // 输出文件路径
const command = `${ffmpegPath} -i "${inputFilePath}" -vcodec copy -acodec copy "${outputFilePath}"`;
exec(command, (error: any, _stdout: any, _stderr: any) => {
exec(command, (error:any, stdout:any, stderr:any) => {
if (error) {
console.error('Error executing ffmpeg command:', error);
return;
}
// 删除输入文件
fs.unlink(inputFilePath);
fs.unlink(inputFilePath, (err:any) => {
if (err) {
console.error('Error deleting input file:', err);
} else {
console.log('Input file deleted successfully.');
}
});
confirm({
title: '提示',
icon: <ExclamationCircleFilled />,
@ -591,11 +607,14 @@ const Meeting: React.FC = () => {
onCancel() {
}
})
});
} catch (err) {
console.error('处理录制时出错:', err);
}
}
}
reader.readAsArrayBuffer(blob);
}
};
@ -621,6 +640,8 @@ const Meeting: React.FC = () => {
});
const observerObject = new IntersectionObserver(async (entries: IntersectionObserverEntry[], _observer: IntersectionObserver) => {
entries.forEach(async (entry) => {
console.log(entry.isIntersecting,entry.target.id);
if (entry.target.id !== user.uid) {
await agora.muteRemoteVideoStreamEx(Number(entry.target.id), !entry.isIntersecting)
}
@ -638,7 +659,7 @@ const Meeting: React.FC = () => {
});
observer?.disconnect();
}
}, [roomUserList, currentVideoId, footerList]);
}, [roomUserList, currentVideoId,footerList]);
// 声网初始化
const agoraInit = async () => {
@ -730,11 +751,11 @@ const Meeting: React.FC = () => {
if (res.list.length) {
footerListTemplate[0][1].title = item.enableCamera ? '关闭视频' : '开启视频'
footerListTemplate[0][1].active = !item.enableCamera
await agora.muteLocalVideoStream(r, item.enableMicr, item.enableCamera)
await agora.muteLocalVideoStream(r, item.enableMicr,item.enableCamera)
} else {
footerListTemplate[0][1].title = '开启视频'
footerListTemplate[0][1].active = true
await agora.muteLocalVideoStream(r, item.enableMicr, false)
await agora.muteLocalVideoStream(r, item.enableMicr,false)
}
})
})
@ -743,11 +764,11 @@ const Meeting: React.FC = () => {
if (res.ecordingList.length) {
footerListTemplate[0][0].title = item.enableMicr ? '静音' : '解除静音'
footerListTemplate[0][0].active = !item.enableMicr
await agora.muteLocalAudioStream(r, item.enableMicr, item.enableCamera)
await agora.muteLocalAudioStream(r, item.enableMicr,item.enableCamera)
} else {
footerListTemplate[0][0].title = '解除静音'
footerListTemplate[0][0].active = true
await agora.muteLocalAudioStream(r, false, item.enableCamera)
await agora.muteLocalAudioStream(r, false,item.enableCamera)
}
})
})

View File

@ -321,7 +321,7 @@ export const agora = {
rtcEngine.enableLoopbackRecording(false)
},
// 取消或恢复发布本地音频流
muteLocalAudioStream: async (data: any, publishMicrophoneTrack: boolean, publishCameraTrack: boolean) => {
muteLocalAudioStream: async (data: any, publishMicrophoneTrack: boolean,publishCameraTrack:boolean) => {
// await rtcEngine.muteLocalAudioStream(mute)
await rtcEngine.updateChannelMediaOptions({
clientRoleType: data ? ClientRoleType.ClientRoleBroadcaster : ClientRoleType.ClientRoleAudience, //用户角色 ClientRoleBroadcaster 主播 ClientRoleAudience 观众
@ -333,7 +333,7 @@ export const agora = {
})
},
// 取消或恢复发布本地视频流
muteLocalVideoStream: async (data: any, publishMicrophoneTrack: boolean, publishCameraTrack: boolean) => {
muteLocalVideoStream: async (data: any, publishMicrophoneTrack: boolean,publishCameraTrack:boolean) => {
// await rtcEngine.muteLocalVideoStream(mute)
await rtcEngine.updateChannelMediaOptions({
clientRoleType: data ? ClientRoleType.ClientRoleBroadcaster : ClientRoleType.ClientRoleAudience, //用户角色 ClientRoleBroadcaster 主播 ClientRoleAudience 观众