J'essaie de convertir un flux rtmp en direct en flux hls en temps réel.
J'ai une idée après avoir lu
je suis capable de convertir le flux rtmp en direct en hls mais pas au moment de l'exécution. lorsque j'exécute la commande et teste les fichiers hsl (.m3u8 et .ts), je ne peux pas voir, mais lorsque j'interromps la commande et que je vérifie, j'obtiens les fichiers hls comme requis.
J'ai recherché une solution sur google, mais je n'ai pas pu obtenir de réponse correcte.
Un corps peut-il m'aider?
Merci d'avance...
Voici un petit guide pour la diffusion HLS avec n'importe quel fichier ou flux d'entrée:
Je suis l'approche de user1390208, donc j'utilise FFMPEG uniquement pour produire le flux rtmp que mon serveur reçoit ensuite pour fournir HLS. Au lieu d'Unreal/Wowza/Adobe, j'utilise le serveur gratuit nginx avec le module rtmp, qui est assez facile à configurer. Voici comment je le fais en bref: Any input file or stream -> ffmpeg -> rtmp -> nginx server -> HLS -> Client
ou plus détaillé:
fichier ou flux vidéo d'entrée (http, rtmp, peu importe) -> ffmpeg transcode en direct vers x.264 + aac, sorties vers rtmp -> nginx prend le rtmp et sert un HLS à l'utilisateur (client). Donc, côté client, vous pouvez utiliser VLC ou autre et vous connecter au fichier .m3u8 fourni par nginx.
Voici comment j'utilise ffmpeg pour transcoder mon fichier d'entrée en rtmp:
ffmpeg -re -i mydirectory/myfile.mkv -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;
(Le .mkv est 1080p avec un son 5.1, selon votre entrée, vous devez utiliser des débits inférieurs!)
D'où obtenez-vous le flux rtmp?
Un serveur X avec un flux Y? Ensuite, vous devez modifier la commande ffmpeg pour:
ffmpeg -re -i rtmp://theServerX/yourStreamY -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;
ou si votre flux rtmp est déjà encodé en h.264/aac, vous pouvez essayer d'utiliser l'option copy
dans ffmpeg pour diffuser le contenu directement vers nginx.
Comme vous le voyez dans mon fichier de configuration nginx:
rtmp://localhost:12345/hls/mystream;
location /hls
. Cela signifie que dans VLC, je peux me connecter à http://myServer:80/hls/mystream.m3u8
pour accéder au flux HLS.Tout est-il clair? Bonne diffusion!
Essayez ces paramètres de ligne de commande RTMP vers HLS:
ffmpeg -v verbose -i rtmp://<Host>:<port>/<stream> -c:v libx264 -c:a aac -ac 1 -strict -2 -crf 18 -profile:v baseline -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 <pathToFolderYouWantTo>/<streamName>.m3u8
Il peut y avoir un certain retard dans le flux HLS. Cependant, cela fonctionnera.
Comme mise à jour de cette question, j'ai réussi à terminer le transcodage en direct de RTMP vers HLS sans utiliser ffmpeg, comment?
Eh bien juste en utilisant exactement le même fichier de configuration nginx partagé par user3069376 et en faisant très attention aux chemins que vous générez le manifeste .m3uh, l'option hls dans le module RTMP devrait s'en occuper.
Quant au lecteur vidéo, le Video.Js a fonctionné comme un charme o