GroovyMorning_RLAC

RLAC Java Server

Système de Programmation des Chroniques

Ce document décrit le fonctionnement du système de programmation et d’enregistrement des chroniques radio pour les utilisateurs.

1. Vue d’ensemble

Le système permet aux utilisateurs de programmer l’enregistrement de leurs chroniques favorites. Chaque chronique est définie par un nom, une heure de début et une heure de fin (en secondes depuis le début du programme). Le système utilise Quartz Scheduler pour planifier des jobs d’enregistrement qui, à leur tour, utilisent FFmpeg pour enregistrer le flux audio et le segmenter en fichiers M3U8.

2. Composants Clés

3. Flux de Travail pour la Programmation des Chroniques

  1. Ajout de chroniques à un utilisateur (optionnel): Un utilisateur peut ajouter des chroniques personnalisées via l’endpoint POST /api/addChronicle. Ces chroniques sont stockées dans ChroniclesManagerService.
  2. Déclenchement de la programmation: L’utilisateur appelle l’endpoint POST /api/scheduleAllUserChronicles avec son userId.
  3. Récupération des chroniques: RLACService récupère la liste des chroniques pour cet userId depuis ChroniclesManagerService.
  4. Planification des jobs: RLACService passe cette liste à RecordingScheduler.scheduleChronicles.
  5. Calcul des heures de début: RecordingScheduler itère sur chaque chronique :
    • Il calcule l’heure de début absolue de chaque chronique en ajoutant son startTime (offset en secondes) à l’heure de référence 07:00.
    • Il détermine la durée de l’enregistrement (endTime - startTime).
    • Il génère un nom de dossier de session unique (session_YYYYMMDD_HHmmss) pour regrouper tous les enregistrements de cette session de planification.
  6. Création et planification du Job Quartz: Pour chaque chronique, un JobDetail de type RadioRecordingJob est créé et configuré avec les données de la chronique (userID, nomDeChronique, heure, minute, durée, nom du dossier de session). Un CronTrigger est créé pour déclencher le job à l’heure calculée.
  7. Exécution du Job RadioRecordingJob: À l’heure prévue, RadioRecordingJob.execute() est appelé :
    • Il crée le répertoire media/userID_[userID]/[sessionFolderName].
    • Il construit et exécute la commande FFmpeg pour enregistrer le flux.
    • Le fichier M3U8 et les segments HLS sont nommés en utilisant le chronicleName extrait du JobDataMap, assurant que playlist.m3u8 et les fichiers .mp4/.m4s portent le nom de la chronique.
    • Les enregistrements sont stockés dans le répertoire media/userID_[userID]/[sessionFolderName].

4. Exemple d’utilisation

  1. Ajouter des chroniques (si non déjà définies ou pour personnaliser):
    curl -X POST "http://localhost:8000/api/addChronicle?userId=testUser&nomDeChroniques=MonEmissionTest&chroniqueRealTimecode=0&endTime=600"
    curl -X POST "http://localhost:8000/api/addChronicle?userId=testUser&nomDeChroniques=MaSecondeChronique&chroniqueRealTimecode=600&endTime=1200"
    

    (Note: endTime n’est pas utilisé dans addChronicle pour l’instant, mais il est dans l’objet Chronicle.)

  2. Programmer toutes les chroniques pour l’utilisateur testUser:
    curl -X POST "http://localhost:8000/api/scheduleAllUserChronicles?userId=testUser"
    

Ceci planifiera les enregistrements en respectant l’ordre et les durées définies dans les chroniques de l’utilisateur testUser, en commençant à 7h00. Chaque enregistrement sera nommé d’après la chronique correspondante.

5.Lancer l’app

gradle run

Attention, si on veut utiliser le workflow avec Python, il faut lancer le serveur Java avant le serveur Python.