From f16cedf5a55f8f13ab9f968848198b02e9a2d2d8 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Wed, 11 Sep 2024 20:03:35 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7(frontend)=20draft=20audio-only=20r?= =?UTF-8?q?oom=20recording=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (roomId is wrongly named, and designates room’s slug) Room’s slug are passed in filenames to simplify post-processing. Thus, from filename, we can retrieve the room being recorded. Current limitation: audio tracks are mixed, requiring diarization. Future plans include full audio + video recording for a more complete meeting experience. --- .../features/rooms/livekit/api/recordRoom.ts | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/frontend/src/features/rooms/livekit/api/recordRoom.ts diff --git a/src/frontend/src/features/rooms/livekit/api/recordRoom.ts b/src/frontend/src/features/rooms/livekit/api/recordRoom.ts new file mode 100644 index 00000000..6c405c4d --- /dev/null +++ b/src/frontend/src/features/rooms/livekit/api/recordRoom.ts @@ -0,0 +1,39 @@ +import { fetchServerApi } from './fetchServerApi' +import { buildServerApiUrl } from './buildServerApiUrl' +import { useRoomData } from '../hooks/useRoomData' +import { useParams } from 'wouter' + +export const useRecordRoom = () => { + const data = useRoomData() + const { roomId: roomSlug } = useParams() + + const recordRoom = () => { + if (!data || !data?.livekit) { + throw new Error('Room data is not available') + } + if (!roomSlug) { + throw new Error('Room ID is not available') + } + return fetchServerApi( + buildServerApiUrl( + data.livekit.url, + '/twirp/livekit.Egress/StartRoomCompositeEgress' + ), + data.livekit.token, + { + method: 'POST', + body: JSON.stringify({ + room_name: data.livekit.room, + audio_only: true, + file_outputs: [ + { + file_extension: 'ogg', + filepath: `{room_name}_{time}_${roomSlug}`, + }, + ], + }), + } + ) + } + return { recordRoom } +}