📦 Changelog 8.4.0

MAJOR 2025-11-24

Nino — HLS & Rage Quit Avoidance Update

HLS

  • Passage 100% en HLS natif (suppression MP4/MKV).
  • Master playlist généré automatiquement pour chaque encodage.
  • Support multi-résolutions 480p → 4K selon la source.
  • Sélection automatique de la meilleure variante lisible.
  • Stabilisation complète du chargement automatique (plus de 1440p forcé).

Éditeur

  • Aperçu en temps réel avec /api/nino/stream-editor/:id.
  • Chargement automatique de la résolution la plus basse disponible.
  • Overlay propre si l’encodage n’a pas encore démarré.
  • Réécriture automatique des paths dans les manifests.
  • Plus de placeholder gris : vrai flux HLS affiché en direct.

API

  • Nouvelle route publique : /api/nino/stream/:id.
  • Nouvelle route privée : /api/nino/hls-editor/:id/...
  • Serveur HLS sécurisé : /api/nino/hls/:video/:variant/...
  • MIME types HLS/TS/M3U8 envoyés proprement.

UI / UX

  • Intégration complète de HLS.js dans le player.
  • Loader intelligent lors du switch de qualité.
  • Le player se met à jour dès que la première résolution est disponible.
  • Refonte du menu qualité (480p – 30 FPS, 720p – 60 FPS, etc.).
  • Auto-resume propre après changement de résolution.

Worker HLS V2

  • Refactor complet : CRUD.v3, logs propres, atomicité garantie.
  • Running-lock interne pour empêcher les doubles encodages.
  • États normalisés : pending → encoding → done/error.
  • Mise à jour progressive : encoding_progress_global + ready_streams.
  • Reconstruction dynamique du master.m3u8 à chaque étape.
  • Heartbeat périodique visible dans l’administration.

Base de données

  • Ajout de encoding_status, encoding_progress_global, ready_streams, total_streams dans nino_videos.
  • Migration corrigée pour queue + workers (CRUD.v3).
  • Suppression de l’ancien champ 'where' hérité de CRUD.v2 (cause de crash).
  • Sécurisation stricte des where dans les updates.

Player & JS

  • Découpage total du code : api.js, hls.js, loader.js, utils.js, interactions.js, overlay.js, watchInit.js.
  • Menu qualité auto-généré depuis la BDD via /api/nino/videos/:id.
  • Fix complet du bug opt is not defined.
  • Fix du double initPlayer (cause de perte du player).
  • Refonte du loader : activation/désactivation cohérente.
  • Suppression des anciens appels hls.currentLevel inutiles.

Sécurité & Routing

  • Séparation propre : /stream (public) vs /stream-editor (interne).
  • ACL obligatoire pour toutes les routes éditeur.
  • Protection stricte : seul public/unlisted peut être streamé publiquement.
  • Correction 404 des segments HLS avec mapping clair.
  • Zero-copy streaming via file.pipe().

Sous-titres

  • Sous-titres désactivés proprement (sans casser le player).
  • Code prêt pour future activation automatique.
  • Support prévu dans HLS pour future intégration Harmonix.