From 16ae51d86ca47d96ca7afaa1a155d2c02686f4a5 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Sun, 22 Sep 2024 11:59:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5=E6=96=B0=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=A7=86=E9=A2=91=E4=BF=9D=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 65 ++++++++++++++++++++++++++++++++++-- package.json | 7 ++-- src/page/Home/User/index.tsx | 4 ++- src/page/Meeting/index.tsx | 13 ++++---- 4 files changed, 75 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index ba578fd..7753fb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "WGShare.Metting", - "version": "0.0.1", + "version": "0.1.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "WGShare.Metting", - "version": "0.0.1", + "version": "0.1.14", "dependencies": { "@ant-design/icons": "^5.3.7", "@microsoft/signalr": "^8.0.0", @@ -28,7 +28,8 @@ "react-redux": "^9.1.2", "react-router-dom": "^6.23.1", "sass": "^1.77.5", - "tldraw": "^2.2.0" + "tldraw": "^2.2.0", + "webm-duration-fix-buffer": "^1.0.0" }, "devDependencies": { "@types/react": "^17.0.33", @@ -5043,6 +5044,11 @@ "node": ">=0.10.0" } }, + "node_modules/ebml-block": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/ebml-block/-/ebml-block-1.1.2.tgz", + "integrity": "sha512-HgNlIsRFP6D9VKU5atCeHRJY7XkJP8bOe8yEhd8NB7B3b4++VWTyauz6g650iiPmLfPLGlVpoJmGSgMfXDYusg==" + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz", @@ -5823,6 +5829,14 @@ "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/eventsource": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz", @@ -7329,6 +7343,14 @@ "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/int64-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/int64-buffer/-/int64-buffer-1.0.1.tgz", + "integrity": "sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw==", + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/into-stream": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/into-stream/-/into-stream-3.1.0.tgz", @@ -11977,6 +11999,17 @@ "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/webm-duration-fix-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/webm-duration-fix-buffer/-/webm-duration-fix-buffer-1.0.0.tgz", + "integrity": "sha512-y6+5MJxduGp8uoclwzbnCEpNtO9gscj39BSQwdyqDk66q9a+vb5fWhxwR5JmMhWCGlZLbP4O/p29mxjbMGPt+A==", + "dependencies": { + "buffer": "^6.0.3", + "ebml-block": "^1.1.2", + "events": "^3.3.0", + "int64-buffer": "^1.0.1" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -15743,6 +15776,11 @@ } } }, + "ebml-block": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/ebml-block/-/ebml-block-1.1.2.tgz", + "integrity": "sha512-HgNlIsRFP6D9VKU5atCeHRJY7XkJP8bOe8yEhd8NB7B3b4++VWTyauz6g650iiPmLfPLGlVpoJmGSgMfXDYusg==" + }, "ejs": { "version": "3.1.10", "resolved": "https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz", @@ -16265,6 +16303,11 @@ "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, "eventsource": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz", @@ -17425,6 +17468,11 @@ "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "int64-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/int64-buffer/-/int64-buffer-1.0.1.tgz", + "integrity": "sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw==" + }, "into-stream": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/into-stream/-/into-stream-3.1.0.tgz", @@ -20902,6 +20950,17 @@ "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "webm-duration-fix-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/webm-duration-fix-buffer/-/webm-duration-fix-buffer-1.0.0.tgz", + "integrity": "sha512-y6+5MJxduGp8uoclwzbnCEpNtO9gscj39BSQwdyqDk66q9a+vb5fWhxwR5JmMhWCGlZLbP4O/p29mxjbMGPt+A==", + "requires": { + "buffer": "^6.0.3", + "ebml-block": "^1.1.2", + "events": "^3.3.0", + "int64-buffer": "^1.0.1" + } + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 9f08de0..e74a0f8 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "react-redux": "^9.1.2", "react-router-dom": "^6.23.1", "sass": "^1.77.5", - "tldraw": "^2.2.0" + "tldraw": "^2.2.0", + "webm-duration-fix-buffer": "^1.0.0" }, "devDependencies": { "@types/react": "^17.0.33", @@ -102,7 +103,7 @@ "deleteAppDataOnUninstall": true, "shortcutName": "智汇享", "allowElevation": true, - "perMachine":true + "perMachine": true } } -} \ No newline at end of file +} diff --git a/src/page/Home/User/index.tsx b/src/page/Home/User/index.tsx index 22534fc..fff39c1 100644 --- a/src/page/Home/User/index.tsx +++ b/src/page/Home/User/index.tsx @@ -472,10 +472,12 @@ const User: React.FC = () => { onClick={() => { const file = document.createElement("input") as any; file.type = "file"; - file.accept = ".xls,.xlsx"; + // file.accept = ".xls,.xlsx"; file.onchange = async () => { const setting = await JSON.parse(storage.getItem('setting') as string) const fileInfo = file.files[0]; + console.log(fileInfo); + return const formData = new FormData(); formData.append("file", fileInfo); await PostUserImport(formData).then(res => { diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index c251213..6e95d93 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -21,6 +21,7 @@ import StupWizard from '@/components/StupWizard'; import EquipmentManagement from '@/components/EquipmentManagement'; import UserVideo from '@/components/UserVideo'; import { role } from '@/config/role'; +import { fixWebmDuration } from "webm-duration-fix-buffer"; const { confirm } = Modal; const { exec } = require('child_process'); const fs = require('fs').promises; @@ -539,15 +540,13 @@ const Meeting: React.FC = () => { useEffect(() => { if (recorder) { recorder.start(); - recorder.ondataavailable = (event: any) => { - const blob = new Blob([event.data], { - type: 'video/mp4', - }); + recorder.ondataavailable = async (event: any) => { + const blob = await fixWebmDuration(event.data); 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, {}); + await fs.writeFile(`${setting.recordingFilesPath}会议录制_${state.roomName}_${state.channelId}_${+new Date()}.webm`, buffer, {}); confirm({ title: '提示', icon: , @@ -1060,12 +1059,12 @@ const Meeting: React.FC = () => { // 合并音频流与视频流 const combinedSource = new MediaStream([...stream.getVideoTracks(), ...systemSoundDestination.stream.getAudioTracks()]); // 开始录制 - const recorder = new MediaRecorder(combinedSource, { + const mediaRecorder = new MediaRecorder(combinedSource, { mimeType: 'video/webm;codecs=vp9,opus', videoBitsPerSecond: 1.5e6, }); setMediaStream(combinedSource); - setRecorder(recorder); + setRecorder(mediaRecorder); }); } catch (error: any) { if (error.code === 'ENOENT') {