Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

hls

  • HLS Streaming Tips

    Il y a quelques temps que je n'avais pas posté ici. Mais je vous avais déjà fait un petit article à propos du streaming/VOD avec nginx et ffmpeg, nous allons donc dans ce petit post parler de la même chose.

    Imaginez que vous désiriez faire une petite infrastructure capable de streamer du HLS pour pas mal de client.

    Vous allez donc avoir une configuration nginx de ce type sur vos serveurs de réception client :

    application hls {
    allow publish x.x.x.x;
    deny publish all;
    allow play all;
    live on;
    hls on;
    hls_path /tmp/hls;
    }

    Seulement vous avez un petit problème : la source est un produit d'automation qui ne vous envoie que ... du MP3. Je vous laisse tester, mais au final vous n'aurez que de la vidéo, le son ne sera pas là, et oui HLS ne prend pas de MP3 !

    Il faut donc mettre votre flux en AAC.

    Les plus habitués d'entre vous l'auront deviner il faut déjà préparer un peu de ffmpeg. Nous savons donc qu'il faut garder la vidéo et transformer le son en AAC. La commande sera donc quelque chose de ce type :

    ffmpeg -i source -c:v copy -c:a libfdk_aac -f format destination

    Donc comment faire : nous allons déjà recevoir notre flux via une application RTMP classique.

            application rtmp {
                live on;
                allow publish x.x.x.x;
                deny publish all;
                allow play all;
            }

    On va ensuite faire du ffmpeg :

    ffmpeg -i rtmp://127.0.0.1/rtmp/stream -c:v copy -c:a libfdk_aac -f flv rtmp://127.0.0.1/hls/live

    Nous pouvons maintenant configurer notre application HLS comme suit :

    application hls {
    allow publish 127.0.0.1;
    deny publish all;
    allow play all;
    live on;
    hls on;
    hls_path /tmp/hls;
    }

    Attention ne faites pas ça sur une machine "faible" ffmpeg ça peut demander de la puissance de calcul.

    Et pour finaliser le tout on automatise de ffmpeg avec exec (moi je préfère en faire un service mais bon on peut faire comme ça aussi), et on push l'application HLS vers nos serveurs de restream ce qui donne :

            application rtmp {
                live on;
                allow publish x.x.x.x;
                deny publish all;
                allow play all;

                exec ffmpeg -i rtmp://127.0.0.1/rtmp/stream -c:v copy -c:a libfdk_aac -f flv rtmp://127.0.0.1/hls/live;
            }

           application hls {
                allow publish 127.0.0.1;
                deny publish all;
                allow play all;
                live on;
                hls on;
                hls_path /tmp/hls;

                push ip_restream_1;

                push ip_restream_2;
    }

    Et sur vos serveurs de restream :

           application hls {
                allow publish IP_server_source;
                deny publish all;
                allow play all;
                live on;
                hls on;
                hls_path /tmp/hls;

    }

    Et tout est bon, enfin n'oubliez pas la configuration du serveur HTTP et voilà tout sera bon vous retrouverez votre live.m3u8 prêt à lire pour vos clients :).

     

    Voilà j'espère que ça vous sera utile.

    Have Fun !