📦 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.