This commit is contained in:
yj 2024-09-23 11:05:31 +08:00
parent fc50a28504
commit e2615f846f
2 changed files with 104 additions and 2 deletions

59
main.js
View File

@ -12,6 +12,7 @@ const {
} = require('electron');
const path = require('node:path')
const fs = require('fs');
const https = require('https');
const { autoUpdater, CancellationToken } = require('electron-updater');
const cancellationToken = new CancellationToken()
app.allowRendererProcessReuse = false;
@ -271,6 +272,25 @@ app.on('ready', () => {
const y = Math.round((display.workArea.height - mainWindow.getSize()[1]) / 2);
mainWindow.setPosition(x, y);
});
// 监听渲染进程请求应用数据目录
ipcMain.handle('get-user-data-path', () => {
return app.getPath('userData');
});
// 用户数据目录路径
global.userDataPath = app.getPath('userData'); // 全局变量
console.log('User Data Path:', global.userDataPath);
// 检查并下载 ffmpeg
checkAndDownloadFFmpeg(userDataPath)
.then(() => {
console.log('FFmpeg is ready for use.');
// 在这里执行任何依赖于 ffmpeg 的操作
})
.catch(error => {
console.error('Failed to ensure ffmpeg is available:', error);
app.quit();
});
}
});
// 检测更新在你想要检查更新的时候执行renderer事件触发后的操作自行编写
@ -339,3 +359,42 @@ function cancleDownloadUpdate() {
function quitAndInstall() {
autoUpdater.quitAndInstall();
}
// 下载文件
function downloadFile(url, dest) {
return new Promise((resolve, reject) => {
const file = fs.createWriteStream(dest);
https.get(url, function (response) {
response.pipe(file);
file.on('finish', function () {
file.close(resolve);
});
}).on('error', function (err) {
fs.unlink(dest, () => reject(err));
});
});
}
// 检查并下载ffmpeg
function checkAndDownloadFFmpeg(appPath) {
const ffmpegPath = path.join(appPath, 'ffmpeg.exe');
return new Promise((resolve, reject) => {
if (!fs.existsSync(ffmpegPath)) {
console.log(`ffmpeg.exe not found at ${ffmpegPath}, downloading...`);
downloadFile('https://meeting-api.23544.com/meeting/update/ffmpeg.exe', ffmpegPath)
.then(() => {
console.log('ffmpeg.exe downloaded successfully.');
resolve();
})
.catch(error => {
console.error('Error downloading ffmpeg.exe:', error);
reject(error);
});
} else {
console.log(`ffmpeg.exe found at ${ffmpegPath}.`);
resolve();
}
});
}

View File

@ -21,7 +21,9 @@ import StupWizard from '@/components/StupWizard';
import EquipmentManagement from '@/components/EquipmentManagement';
import UserVideo from '@/components/UserVideo';
import { role } from '@/config/role';
import path from 'path';
const { confirm } = Modal;
const { ipcRenderer } = require('electron');
const { exec } = require('child_process');
const fs = require('fs').promises;
dayjs.extend(durationPlugin);
@ -541,13 +543,54 @@ const Meeting: React.FC = () => {
recorder.start();
recorder.ondataavailable = (event: any) => {
const blob = new Blob([event.data], {
type: 'video/mp4',
type: 'video/webm',
});
const reader = new FileReader() as any;
reader.onload = async () => {
// const setting = await JSON.parse(storage.getItem('setting') as string)
// const buffer = Buffer.from(reader.result);
// await fs.writeFile(`${setting.recordingFilesPath}会议录制_${state.roomName}_${state.channelId}_${+new Date()}.mp4`, buffer, {});
// 获取当前日期并格式化
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1; // JavaScript月份从0开始
const day = date.getDate();
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);
await fs.writeFile(`${setting.recordingFilesPath}会议录制_${state.roomName}_${state.channelId}_${+new Date()}.mp4`, buffer, {});
const mp4Path = `${setting.recordingFilesPath}会议录制_${state.roomName}_${state.channelId}_${formattedDate}_beforehanlder.mp4`;
await fs.writeFile(mp4Path, buffer);
const userDataPath = await ipcRenderer.invoke('get-user-data-path');
// 获取应用程序安装路径
const ffmpegPath = path.join(userDataPath, "ffmpeg.exe");
const inputFilePath = mp4Path; // 输入文件路径
const outputFilePath = mp4Path.replace('_beforehanlder', ''); // 输出文件路径
const command = `${ffmpegPath} -i "${inputFilePath}" -vcodec copy -acodec copy "${outputFilePath}"`;
exec(command, (error, stdout, stderr) => {
if (error) {
console.error('Error executing ffmpeg command:', error);
return;
}
// 删除输入文件
fs.unlink(inputFilePath, (err) => {
if (err) {
console.error('Error deleting input file:', err);
} else {
console.log('Input file deleted successfully.');
}
});
})
confirm({
title: '提示',
icon: <ExclamationCircleFilled />,