Aller au contenu principal
Please wait...
Image

Streaming comme dans un blockbuster : Laravel-HLS entre en scène

Chez OBI Partner, on a l’habitude de sauver des projets comme Tom Cruise sauve le monde dans Mission Impossible. Mais cette fois, la mission est différente : streamer des vidéos sans que tout parte en fumée.

Parce que soyons clairs :

  • Les vidéos qui chargent en boucle, c’est comme un générique qui ne finit jamais.

  • Les bases de données qui pleurent, c’est digne d’un épisode de Dark.

  • Et les devs qui jurent “¡pero en mi máquina sí funciona!”, ça ressemble à une parodie mal doublée sur Netflix.

C’est là qu’apparaît notre héros : laravel-hls.

🎥 Le pitch

Laravel-HLS, c’est un package open source qui fait le job de producteur vidéo dans ton app Laravel :

  • Il convertit tes fichiers en flux HLS adaptatif grâce à ffmpeg.

  • Il ajoute du chiffrement AES-128, histoire que tes vidéos ne se baladent pas nues sur Internet.

  • Il bosse en queues Laravel, comme une équipe de montage qui ne bloque pas le tournage principal.

  • Et il te fournit directement la playlist .m3u8 pour diffuser ton film en streaming.

Bref : tu uploades une vidéo, et ça sort prêt pour Netflix (bon… en version artisanale 😅).

🎬 Acte I : Installation

  1. Tu appelles le renfort via Composer :

    composer require achyutn/laravel-hls
  2. Tu balances la config dans ton projet :

    php artisan vendor:publish --provider="AchyutN\LaravelHLS\HLSProvider" --tag="hls-config" 
  3. Dans config/hls.php, tu règles le scénario : résolutions, bitrates, chiffrement, file d’attente, stockage…

  4. Tu ajoutes le trait à ton modèle vidéo :

    use AchyutN\LaravelHLS\Traits\ConvertsToHls; class Video extends Model {    use ConvertsToHls; }
  5. Et BOOM : tu récupères ta playlist avec une simple route /hls/{id}/playlist.

🎬 Acte II : Les coulisses

💣 Le chiffrement : comme dans tout bon thriller, il y a une clé secrète. Ici, AES-128 protège tes segments vidéo. Sans la clé → pas de lecture → pas de spoil.

Le montage parallèle : la conversion se fait en arrière-plan avec les jobs Laravel. Ton serveur web n’a donc pas besoin d’être Rambo pour gérer le rendu vidéo.

🚀 Le déploiement : tu peux intégrer ça dans ton pipeline CI/CD, pour lancer automatiquement les conversions dès qu’un fichier atterrit dans ton projet.

🎬 Acte III : Le plan d’action CI/CD

Exemple avec GitLab CI :

stages: [test, convert, deploy]

test:
  stage: test
  image: php:8.3-cli
  script:
    - composer install --no-dev
    - vendor/bin/phpunit

convert:
  stage: convert
  image: php:8.3-cli
  script:
    - php artisan queue:work --once --queue=hls
  only:
    - main

deploy:
  stage: deploy
  script:
    - php artisan migrate --force
    - php artisan hls:generate

Ici, c’est comme une mission commando :

  • test vérifie que l’équipe est prête,

  • convert s’occupe du montage,

  • deploy diffuse le film à l’affiche 🎞️.

🎬 Bonus : Les spin-offs possibles

  • E-learning : tes cours passent en streaming sécurisé, plus de fuite de contenu.

  • VOD interne : tu deviens le Netflix du comité d’entreprise.

  • Événements live : conférences, concerts ou lotos en ligne (oui oui 👀).

🎬 La suite de la saga

Laravel-HLS fonctionne déjà très bien, mais la suite pourrait inclure :

  • CMAF pour plus de compatibilité,

  • DRM niveau “Hollywood”,

  • Scalabilité avec workers distribués,

  • Tableau de bord style IMDB pour suivre les conversions.

🎬 Conclusion

➡️ Si tu veux une forge CI/CD qui déploie tes apps comme un buffet, on a GitLab.
➡️ Si tu veux du modulaire façon food-truck, tu prends Gitea + Woodpecker.
➡️ Et si tu veux diffuser des vidéos façon Netflix, laravel-hls est ton acteur principal.

Chez OBI Partner, on aime dire :
“Pas besoin d’Hollywood, tant que ta vidéo sort en streaming, sans spoilers et sans écrans noirs.” 🍿

👉 Alors, prêt à tourner ton premier blockbuster en Laravel ?

Ajouter un commentaire

HTML restreint

  • Vous pouvez aligner les images (data-align="center"), mais également les vidéos, citations, etc.
  • Vous pouvez légender les images (data-align="center"), mais également les vidéos, citations, etc.