import { type ChunkStorage, type ChunkRecordResult } from '../lib/chunk-storage'; /** Storage strategy pour la track audio quand `recordAudioSeparately=true`. */ export type AudioRecordStorage = 'memory' | 'indexeddb' | 'filesystem' | 'server'; /** v2.2+ — Layout du compositeur 3 sources. * - `split` : écran | flux distant 50/50 + webcam en incrustation. * - `screen` : écran en grand + flux distant & webcam en PiP. * - `sfu` : flux distant en grand + écran & webcam en PiP. * - `webcam` : webcam en grand + écran & flux distant en PiP. */ export type CompositeLayout = 'split' | 'screen' | 'sfu' | 'webcam'; export interface StartRecordingOptions { /** Stratégie de stockage des chunks vidéo. * - `memory` : accumule en RAM, blob final rendu à stopRecording. * - `indexeddb` (défaut) : streame dans IndexedDB — crash-safe, RAM * constante (cf. v1.11.9 — défaut changé pour éviter OOM sur longs records). * - `filesystem` : streame sur le disque via File System Access API * (Chrome/Edge ; non supporté Firefox/Safari). * - `server` : POST chaque chunk à `videoServerUrl`. */ videoStorage?: ChunkStorage; /** URL absolue ou relative qui reçoit les chunks vidéo en POST quand * `videoStorage='server'`. */ videoServerUrl?: string; /** Si true, un second MediaRecorder enregistre l'audio mixé en parallèle * et le résultat est exposé via `stopRecording()` (champ `audio`). */ recordAudioSeparately?: boolean; /** Stratégie de stockage des chunks audio (mêmes options que videoStorage). */ audioStorage?: AudioRecordStorage; /** URL absolue ou relative qui reçoit les chunks audio en POST quand * `audioStorage='server'`. */ audioServerUrl?: string; /** v1.11.10 — Si true, le record vidéo n'embed PAS l'audio (track audio * exclue du combinedStream). Force implicitement `recordAudioSeparately=true` * pour ne pas perdre l'audio. * Use case : "vraie séparation" — montage pro où on veut une vidéo pure * + un fichier audio dédié à mixer/cleaner indépendamment. */ videoOnly?: boolean; /** v2.0+ — Override l'identifiant baseId interne (par défaut auto-généré * `rec--`). Utilisé par `useMultiTakeSession` pour grouper les * takes d'une session sous un préfixe commun (`-take`), * ce qui permet la reconstruction L3 (cross-reload via IndexedDB). */ baseId?: string; } export interface AudioRecordResult { storage: AudioRecordStorage; /** MIME du record audio (audio/webm;codecs=opus en général). */ mimeType: string; /** Blob audio reconstitué (memory / indexeddb). null pour filesystem / server. */ blob: Blob | null; /** ObjectURL utilisable dans un