mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-11 17:30:00 +02:00
Chaque enregistrement arrivé au bout de sa fenêtre était marqué « Échoué / Interruption inattendue du serveur » alors que le fichier était bien sur le disque : le tick lisait la base AVANT d'arrêter les captures terminées, si bien que l'instantané annonçait encore « recording » pour un enregistrement déjà retiré de la table des processus actifs — la détection d'orphelin le requalifiait aussitôt en échec. La base est désormais lue après les arrêts, et la requalification revérifie le statut courant. Deux autres façons de perdre un enregistrement sont corrigées au passage : - FFmpeg livre encore des morceaux de stderr après la résolution de `exitCode` ; écrire sur l'`IOSink` déjà fermé levait une `StateError` depuis un callback de stream, donc une erreur asynchrone non rattrapée qui tue l'isolate — et avec lui le serveur et toutes les captures en cours. Le log passe par un écrivain tolérant et n'est fermé qu'une fois stdout et stderr drainés. - Une coupure amont terminait la capture définitivement. FFmpeg reçoit maintenant les options de reconnexion (comme le proxy live), et le planificateur relance la capture sur la fin de fenêtre quand le process sort trop tôt (backoff 3→30 s, quota remis à zéro après une capture saine). Les parties issues des relances sont recollées dans le fichier principal via le demuxer `concat`, la lecture reste donc un seul fichier. Également : - reprise des captures interrompues par un redémarrage du conteneur tant que la fenêtre est ouverte, au lieu d'un échec sec ; fichier partiel conservé (statut « terminé ») quand la fenêtre est passée - `-t` calculé sur le temps restant jusqu'à la fin programmée : un démarrage tardif ne rogne plus la fin du programme - `-hide_banner -nostats` : le log d'enregistrement redevient lisible (et ne pèse plus des mégaoctets, il est relu en entier par l'API) - `RECORDINGS_DIR` et `FFMPEG_PATH` surchargeables, et le motif d'erreur est effacé au (re)démarrage d'une capture Vérifié avec un faux ffmpeg sur un planificateur réel : avant correctif, un enregistrement mené jusqu'à la fin de fenêtre ressort « failed / Interruption inattendue du serveur » ; après, « completed » — de même que la reprise après interruption, la relance après coupure et la fusion des parties. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E5xWYTbtZwJuYB3E51K243