From 43e41f4cb094a3d158541d85dfed5d9088e32336 Mon Sep 17 00:00:00 2001 From: Hyeona01 Date: Sun, 8 Dec 2024 13:42:48 +0900 Subject: [PATCH] =?UTF-8?q?FE:=20[fix]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20state=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20api=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20#53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/eyesee-user/src/apis/video.ts | 18 ++++++++++++++++++ .../eyesee-user/src/app/exam-room/page.tsx | 9 +++------ 2 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 src/frontend/eyesee-user/src/apis/video.ts diff --git a/src/frontend/eyesee-user/src/apis/video.ts b/src/frontend/eyesee-user/src/apis/video.ts new file mode 100644 index 0000000..537b6ce --- /dev/null +++ b/src/frontend/eyesee-user/src/apis/video.ts @@ -0,0 +1,18 @@ +import { api } from "."; + +export const videoPost = async ( + userId: number, + startTime: string, + endTime: string, + video: File +) => { + const formData = new FormData(); + + formData.append("userId", userId.toString()); + formData.append("startOffset", new Date(startTime).toISOString()); + formData.append("endOffset", new Date(endTime).toISOString()); + formData.append("video", video); + + const response = await api.post(`/cheatings/video`, formData); + return response.data; +}; diff --git a/src/frontend/eyesee-user/src/app/exam-room/page.tsx b/src/frontend/eyesee-user/src/app/exam-room/page.tsx index 30a12a8..8973158 100644 --- a/src/frontend/eyesee-user/src/app/exam-room/page.tsx +++ b/src/frontend/eyesee-user/src/app/exam-room/page.tsx @@ -8,13 +8,16 @@ import { useStore } from "@/store/useStore"; const RealTimeVideoPage = () => { // 수험자 실시간 화면이 담기는 공간 const videoRef = useRef(null); + // 캠버스에서 프레임을 캡쳐 const canvasRef = useRef(null); // 웹소켓 연결 관리 const socketRef = useRef(null); + // 실시간 비디오 녹화 const mediaRecorderRef = useRef(null); + // 미디어 스트림을 저장 const streamRef = useRef(null); @@ -22,8 +25,6 @@ const RealTimeVideoPage = () => { const recordedChunksRef = useRef([]); const captureIntervalRef = useRef(null); - const [isProcessing, setIsProcessing] = useState(false); - const userId = useStore(useUserStore, (state) => state.userId); const examId = useStore(useUserStore, (state) => state.examId); @@ -120,8 +121,6 @@ const RealTimeVideoPage = () => { const startRecordingForCheating = async () => { try { - setIsProcessing(true); - // 이미 녹화 중이면 기존 녹화 중지 if (mediaRecorderRef.current) { mediaRecorderRef.current.stop(); @@ -138,11 +137,9 @@ const RealTimeVideoPage = () => { if (mediaRecorderRef.current) { mediaRecorderRef.current.stop(); } - setIsProcessing(false); }, 5000); } catch (error) { console.error("부정행위 이벤트 처리 중 오류", error); - setIsProcessing(false); } };