RTMP also called “real-time messaging protocol” is a data transmission technology that supports live online video streaming. It is used to transmit video files from an encoder to an online video hosting platform. RTMP uses TCP to travel and uses a three-way handshake when transporting data. RTMP is used with many different types of media including live television broadcasts, streaming video, and internet phone services.

Features

  • Produce high-quality live videos without buffering
  • Easy to install and configure.
  • Compatible with most live streaming software and video services.

This tutorial will show you how to set up a video streaming server using the Nginx-RTMP on Ubuntu 22.04 server.

Requirements

  • A server running Ubuntu 22.04.
  • A root password is set up for your server.

Install Nginx Web Server

Before starting, the Nginx web server must be installed on your server. If not installed, you can install it with the following command.

apt install nginx -y

After installing the Nginx package, start the Nginx service and enable it to start at system reboot.

systemctl start nginx

systemctl enable nginx

You can verify the Nginx service status with the following command.

systemctl status nginx

You will get the following output.

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-01-09 14:54:55 UTC; 28s ago
       Docs: man:nginx(8)
    Process: 43294 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
   Main PID: 43005 (nginx)
      Tasks: 3 (limit: 4575)
     Memory: 8.5M
        CPU: 35ms
     CGroup: /system.slice/nginx.service
             ??43005 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??43295 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??43296 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Jan 09 14:54:55 vultr systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 09 14:54:55 vultr systemd[1]: Started A high performance web server and a reverse proxy server.
Jan 09 14:55:04 vultr systemd[1]: Reloading A high performance web server and a reverse proxy server...
Jan 09 14:55:04 vultr systemd[1]: Reloaded A high performance web server and a reverse proxy server.

Install and Configure Nginx-RTMP

By default, the Nginx-RTMP package is included in the Ubuntu default repository. You can install it with the following command.

apt install libnginx-mod-rtmp -y

Once Nginx-RTMP package is installed, edit the Nginx main configuration file and define your stream.

nano /etc/nginx/nginx.conf

Add the following lines at the end of the file:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish all;               

                application live {
                        live on;
                        record off;
                }
        }
}

Save and close the file then verify the Nginx for any configuration error using the following command.

nginx -t

You should see the following output.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Finally, restart the Nginx service to apply the changes.

systemctl restart nginx

At this point, Nginx-RTMP is installed and listens on port 1935. You can check it with the following command.

ss -antpl | grep 1935

You should see the following output.

LISTEN 0      511          0.0.0.0:1935      0.0.0.0:*    users:(("nginx",pid=43388,fd=8),("nginx",pid=43387,fd=8),("nginx",pid=43386,fd=8))

Send Video to RTMP Server

Next, you will need to download a sample video from YouTube and send it to your RTMP server using FFmpeg.

First, install youtube-dl ad FFmpeg package with the following command.

apt install python3-pip ffmpeg -y

pip install youtube-dl

Next, download any video from YouTube using the youtube-dl command line tool.

youtube-dl https://www.youtube.com/watch?v=oNEwEQ0uU1Y

Once the video is downloaded to your system, you can send the downloaded video to the RTMP server using the FFmpeg command.

ffmpeg -re -i "How to Install Ubuntu 22.04 LTS-oNEwEQ0uU1Y.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://your-server-ip/live/stream &

At this point, your downloaded video is sent to rtmp://your-server-ip/live/stream

Stream Video to VLC Player

In this section, we will show you how to stream your video from the RTMP server on VLC player software.

First, log in to your desktop system and open the VLC player. Then, click on Media => Open Network Stream. You should see the following screen.

<img alt="" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/01/echo/p2.png63c18c130f327.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="435" loading="lazy" src="data:image/svg xml,” width=”522″>

Define your RTMP server URL and click on the Play button. If everything works, you should see your video on the following screen.

<img alt="" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/01/echo/p1.png63c18c135ba71.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="436" loading="lazy" src="data:image/svg xml,” width=”750″>

Configure RTMP Statistics for Monitoring

At this point, your RTMP server is installed and working. Now, you will need to configure the RTMP statistics page to monitor your streaming.

First, create a directory to save the RTMP stat file using the following command.

mkdir /var/www/html/rtmp

Next, copy the RTMP stat file to the created directory.

cp /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl /var/www/html/rtmp/stat.xsl

Next, edit the Nginx default virtual host configuration file.

nano /etc/nginx/sites-available/default

Remove all default lines and add the following lines:

server {
    listen 8080;
    server_name  _;

    # rtmp stat
    location /stat {
        rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl {
        root /var/www/html/rtmp;
    }

    # rtmp control
    location /control {
        rtmp_control all;
    }
}

Save and close the file when you are done. Then, restart the Nginx service to apply the changes.

systemctl restart nginx

Access RTMP Stat Page

Now, open your web browser and access the RTMP stat page using the URL http://your-server-ip:8080/stat. You should see the RTMP Statistics on the following screen.

<img alt="" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/01/echo/p3.png63c18c138bbb9.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="213" loading="lazy" src="data:image/svg xml,” width=”750″>

You will need to refresh the page every time when you stream a video and watch as the stream statistics change.

Conclusion

This post explained how to set up a video streaming server using the Nginx-RTMP on Ubuntu 22.04. We also test the RTMP server via VLC player. You can now stream any video to the RTMP server and access it from any supported media player. Feel free to ask me if you have any questions.