Plan du tutoriel

Streaming HLS — service Windows, FFMPEG & diffusion web

Une architecture simple pour décoder, segmenter et diffuser un flux vidéo compatible navigateur.

Service Windows + décodage MP4 + diffusion HLS vers une page web HTTPS

Ce tutoriel présente une architecture simple et modulable pour lire un film au format MP4, le décoder, le ré-encoder en H.264/HLS avec FFMPEG, puis le diffuser dans un navigateur web. L’objectif est de proposer une base robuste pour du streaming personnalisé, avec possibilité de paralléliser la lecture des fichiers et d’ouvrir la voie à une future couche analytics.

Windows Service FFMPEG HLS & HTTPS NGROK
Architecture HLS Streaming
Table des matières

Structure du tutoriel

Une vue rapide du contenu du projet pour cadrer les besoins, les composants et le résultat attendu.

  1. Contexte
  2. Expression de besoin
  3. Pré-requis
  4. Livrable
  5. Back-end
  6. Front-end
  7. Détails des prestations
  8. Conclusion
Contexte

Pourquoi ce projet HLS Streaming ?

Plusieurs interlocuteurs souhaitent pouvoir streamer leur webcam ou un film sur une page personnelle. Ce document formalise une réponse technique claire, réutilisable et industrialisable.

Je rencontre beaucoup de personnes me demandant de streamer leur webcam sur une page personnelle. Voici un petit tutoriel permettant de réaliser cela. Par notre expérience dans l’ingénierie informatique et l’IA, la société IALAB propose des solutions sur mesure pour concevoir ce type de service.

Back-end / service Windows Encodage et diffusion HLS Affichage navigateur
Expression de besoin

Objectifs fonctionnels du service

Le besoin porte sur un service Windows capable de lire un média, le transformer et le publier de manière compatible web.

Service Windows

Le projet consiste à réaliser un service s’exécutant sous Windows afin de décoder et streamer un film.

Diffusion HTTPS via HLS

Le fichier .mp4 décodé est ensuite envoyé vers un site HTTPS via un flux HLS, lisible depuis un navigateur moderne.

Parallélisation

Il est nécessaire de prévoir la parallélisation de la lecture des fichiers .mp4 pour pouvoir étendre la solution à plusieurs flux ou plusieurs contenus.

Solution modulable

L’objectif est de proposer une architecture adaptée et modulable pour lire le film au format Prysm tout en gardant une chaîne de traitement claire et maintenable.

Pré-requis

Éléments nécessaires avant de démarrer

Ces composants forment la base minimale du tutoriel et de l’architecture cible.

Pré-requis 1
Back-end
Machine Windows
Héberge le service et la lecture locale du média.

Une machine Windows capable d’exécuter un service système, avec accès au film source.

Pré-requis 2
Streaming
FFMPEG
Décodage et ré-encodage vidéo.

FFMPEG est utilisé pour transformer la vidéo vers un format H.264 encapsulé en HLS.

Pré-requis 3
Front-end
Page web HTTPS
Consommation du flux HLS côté client.

Une page web personnelle capable d’intégrer un lecteur vidéo ou hls.js.

Pré-requis 4
Tunnel
NGROK
Exposition de la machine locale.

NGROK sert à relier la machine locale au site distant pour exposer les flux de manière sécurisée.

Livrable

Ce que doit produire la prestation

Le livrable attendu couvre autant la partie technique que le résultat visible dans le navigateur.

  • Un service Windows opérationnel pour lire et streamer un film.
  • Une chaîne de décodage puis de ré-encodage H.264/HLS avec FFMPEG.
  • Une exposition HTTPS du flux via NGROK ou un équivalent.
  • Une page web affichant correctement le film dans le navigateur.
  • Une base extensible pour la future partie analytics.
Détails des prestations

Découpage technique par module

Chaque carte décrit une partie du système, son rôle et son articulation avec le reste du flux.

Étape 1
Back-end
Lecture du film sur le V1
Point d’entrée du pipeline.

Le navigateur ou l’utilisateur demande un film. Le média est localisé puis lu sur le V1, qui sert de point de traitement principal.

Entrée : demande browser Source : fichier film
Étape 2
Back-end
Décodage du film
Préparation du média pour diffusion.

Le film est décodé afin d’être exploité par la chaîne de transformation vidéo. Cette étape permet aussi de préparer la parallélisation pour plusieurs fichiers MP4.

Entrée : .mp4 Sortie : flux décodé
Étape 3
FFMPEG
Ré-encodage H.264 + génération HLS
Adaptation du film au web streaming.

FFMPEG ré-encode le contenu en H.264 puis produit les segments HLS et le manifeste nécessaires à la lecture web côté client.

Codec : H.264 Sortie : .m3u8 + .ts
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f hls \
  -hls_time 4 \
  -hls_playlist_type event \
  stream.m3u8
Étape 4
NGROK
Exposition HTTPS du service
Connexion entre la machine locale et le site distant.

NGROK sert à passer de la machine locale vers le site distant en exposant le flux sur une URL HTTPS publique utilisable dans la page web.

Tunnel sécurisé Accès externe
ngrok http 8080
Étape 5
Front-end
Affichage dans le navigateur
Restitution du flux côté utilisateur final.

L’affichage et le streaming se font ensuite dans le browser web, soit via un lecteur natif, soit via une bibliothèque JavaScript compatible HLS.

Browser Page personnelle
<video controls autoplay width="720">
  <source src="https://mon-url-ngrok/stream.m3u8" type="application/x-mpegURL" />
</video>
Étape 6
Scalabilité
Parallélisation des lectures MP4
Préparation à l’extension multi-flux.

La solution doit permettre de lancer plusieurs lectures de fichiers MP4 en parallèle, avec une organisation par file d’attente, workers ou processus dédiés.

Multi-flux Architecture modulable
Back-end

Organisation recommandée

Le cœur du système réside dans le service Windows, l’orchestrateur de lecture et le pipeline FFMPEG.

  • Un service Windows supervise le lancement et l’état du streaming.
  • Un module de lecture ouvre les médias demandés.
  • Un orchestrateur route les flux vers les jobs FFMPEG.
  • Chaque job produit un manifeste HLS et des segments.
  • Un dossier ou serveur local sert les artefacts à NGROK.
Front-end

Page de diffusion web

La partie front-end reste volontairement simple : une page HTTPS, un lecteur vidéo et une URL HLS.

Intégration minimale

Une balise <video> peut suffire si le navigateur prend en charge HLS en natif.

Compatibilité élargie

Pour une meilleure compatibilité, on peut intégrer hls.js afin de charger le fichier .m3u8 dans plus de navigateurs.

Affichage final

Le résultat attendu est un affichage fluide du film ou de la webcam dans le browser web, accessible depuis une page personnelle.

Conclusion

Résultat et prochaine étape

L’architecture est en place : acquisition, traitement, exposition et lecture web sont couverts.

Avec cette architecture, le browser demande le film, le média est lu puis décodé, ré-encodé via FFMPEG en H.264/HLS, exposé grâce à NGROK et enfin affiché dans le navigateur. Il ne nous reste plus qu’à brancher la partie analytics ;)