How can we transcode live rtmp stream to live hls stream using ffmpeg?

This is a short guide for HLS streaming with any input file or stream:

I am following user1390208’s approach, so I use FFMPEG only to produce the rtmp stream which my server then receives to provide HLS. Instead of Unreal/Wowza/Adobe, I use the free server nginx with the rtmp module, which is quite easy to setup. This is how I do it in short: Any input file or stream -> ffmpeg -> rtmp -> nginx server -> HLS -> Client or more detailed:

input video file or stream (http, rtmp, whatever) –> ffmpeg transcodes live to x.264 + aac, outputs to rtmp –> nginx takes the rtmp and serves a HLS to the user (client).
So on the client side you can use VLC or whatever and connect to the .m3u8 file which is provided by nginx.

  • I followed this setup guide for nginx.
  • This is my nginx config file.
  • This is how I use ffmpeg to transcode my input file to 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;
    

    (the .mkv is 1080p with 5.1 sound, depending on your input, you should use lower bitrates!)

Where do you get the rtmp stream from?

  • A file? Then you can use exactly my approach.
  • Any server X with a stream Y? Then you have to change the ffmpeg command to:

    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;
    

    or if your rtmp stream is already h.264/aac encoded, you could try to use the copy option in ffmpeg to stream the content directly to nginx.

As you see in my nginx config file:

  • My rtmp server has an “application” called “hls”. That’s the part that describes where nginx listens to ffmpeg’s rtmp stream and that’s why ffmpeg streams to rtmp://localhost:12345/hls/mystream;
  • My http server has the location /hls. This means in VLC I can connect to http://myServer:80/hls/mystream.m3u8 to access the HLS stream.

Is everything clear? Happy streaming!

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)