Nginx met RTMP Module installeren op CentOS 7

RTMP (Real Time Messaging Protocol) is een krachtig protocol voor het overzenden van gegevens, audio en video over het internet tussen flash-gebaseerde platform-technologieën. Het werd oorspronkelijk ontwikkeld door Macromedia, en is nu eigendom van Adobe.

Nginx RTMP is een op nginx gebaseerde mediastreamer met RTMP, HLS, en MPEG-DASH live streaming. Nginx RTMP module heeft veel mogelijkheden, waaronder H264/AAC ondersteuning, HTTP callback ondersteuning, HTTP besturingsmodule voor het opnemen van de audio/video enz.

In deze handleiding laat ik je zien hoe je de Nginx webserver met de RTMP module installeert en configureert. We gebruiken de nieuwste CentOS 7 server, en deze handleiding omvat de configuratie van nginx en rtmp module en het maken van RTMP live stream en video on demand.

Vereisten

  • CentOS 7 server
  • Root voorrechten

Wat zullen we doen?

  1. Afhankelijkheden installeren
  2. Download Nginx met extra pakket en RTMP module
  3. Compileer Nginx en installeer vanaf broncode
  4. Configureer Nginx als een Service
  5. Configureer Nginx RTMP Module
  6. Stel de eerste RTMP Live Stream in
  7. Testen van

Stap 1 – Afhankelijkheden installeren

In deze handleiding bouwen we de Nginx webserver vanaf de broncode. We moeten alle benodigde afhankelijkheden van de pakketten installeren, waaronder ontwikkelgereedschappen, EPEL repository, en andere pakketten.

Installeer CentOS ‘Ontwikkelingsgereedschappen’.

sudo yum -y groupinstall 'Development Tools'

Voeg de EPEL repository toe.

sudo yum -y install epel-release

Installeer de afhankelijkheden van Nginx.

sudo yum install -y  wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-devel

Wacht tot alle pakketten geïnstalleerd zijn.

Installeer Nginx en RTMP afhankelijkheden

Stap 2 – Download Nginx met extra pakket en RTMP module

In deze stap downloaden we de broncode van nginx met de extra afhankelijkheden, waaronder pcre, zlib, en de OpenSSL.

Ga naar de ‘/usr/local/src’ directory.

cd /usr/local/src

Download Nginx 1.14.0 en pak het uit.

wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz

Download het pcre pakket en pak het uit.

wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
unzip pcre-8.42.zip

Download het zlib pakket en pak het uit.

wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz

Download het OpenSSL pakket en pak het uit.

wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gz

Kloon vervolgens de Nginx RTMP Module broncode met git commando.

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

En verwijder alle gecomprimeerde tar.gz en .zip bestanden.

rm -f *.tar.gz *.zip

Hieronder staan de directory gegevens die we hebben.

ls -lah

Nginx bronnen gedownload

En we zijn klaar om te compileren en te installeren.

Stap 3 – Compileer Nginx en installeer vanaf broncode

Ga naar de ‘nginx-1.14.0’ directory.

cd nginx-1.14.0/

Configureer nginx 1.14.0 met de onderstaande parameters.

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib64/nginx/modules \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --user=nginx \
            --group=nginx \
            --build=CentOS \
            --builddir=nginx-1.14.0 \
            --with-select_module \
            --with-poll_module \
            --with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
            --with-http_geoip_module=dynamic \
            --with-http_sub_module \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_mp4_module \
            --with-http_gunzip_module \
            --with-http_gzip_static_module \
            --with-http_auth_request_module \
            --with-http_random_index_module \
            --with-http_secure_link_module \
            --with-http_degradation_module \
            --with-http_slice_module \
            --with-http_stub_status_module \
            --http-log-path=/var/log/nginx/access.log \
            --http-client-body-temp-path=/var/cache/nginx/client_temp \
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
            --with-mail=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8.42 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.0h \
            --with-openssl-opt=no-nextprotoneg \
            --add-module=../nginx-rtmp-module \
            --with-debug

Compileer nginx

Compileer en installeer Nginx met RTMP module door de volgende commando’s uit te voeren.

sudo make
sudo make install

Als de installatie voltooid is, moeten we een nieuwe symlink module directory maken, een nieuwe nginx gebruiker en groep aanmaken, en een nieuwe nginx cache directory maken.

Maak nginx symlink module naar de ‘/etc/nginx’ configuratie directory.

sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules

Maak een nieuwe ‘nginx’ systeemgebruiker en groep.

sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx

Maak nu een nieuwe nginx cache directory ‘/var/cache/nginx’ en verander de eigenaar van de directory in ‘nginx’ gebruiker en groep.

mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/

Test de nginx configuratie en de geïnstalleerde nginx versie.

nginx -t
nginx -V

En het volgende is het resultaat.

Nginx met succes gecompileerd

De Nginx webserver is geïnstalleerd op CentOS 7 met de RTMP Module ingeschakeld.

Stap 4 – Configureer Nginx als een dienst

In deze handleiding zullen we nginx als een dienst draaien en we moeten een nieuw nginx dienst bestand aanmaken in de systemd dienst directory.

Ga naar de ‘/lib/systemd/system’ directory en maak met vim een nieuw ‘nginx.service’ bestand.

cd /lib/systemd/system/
vim nginx.service

Plak er de onderstaande configuratie in.

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

Sla op en sluit af.

Herlaad nu het systemd systeem.

systemctl daemon-reload

Start de nginx service en zet hem aan om telkens bij het opstarten van het systeem te starten.

systemctl start nginx
systemctl enable nginx

De Nginx webserver is in werking als dienst op CentOS 7 systeem.

Nginx systemd dienst

Stap 5 – Configureer Nginx RTMP Module

In deze stap maken we een nieuwe aangepaste Nginx configuratie voor de RTMP module.

Ga naar de ‘/etc/nginx’ configuratie directory en maak een backup van het oorspronkelijke ‘nginx.conf’ bestand.

cd /etc/nginx/
mv nginx.conf nginx.conf.asli

Maak nu een aangepaste configuratie ‘nginx.conf’.

vim nginx.conf

Plak de Nginx RTMP configuratie eronder.

worker_processes  auto;
events {
    worker_connections  1024;
}

# RTMP configuration
rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;

# Define the Application
        application show {
            live on;
            # Turn on HLS
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            # disable consuming the stream from nginx as rtmp
            deny play all;
        }

    }
}

http {
    sendfile off;
    tcp_nopush on;
    aio on;
    directio 512;
    default_type application/octet-stream;

    server {
        listen 8080;

        location / {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            root /mnt/;
        }
    }
}

Bewaar en sluit af.

Nu moeten we een nieuwe directory maken voor de HLS configuratie en we hebben bepaald dat de web root directory op de ‘/mnt’ directory staat.

Maak de ‘hls’ directory onder de ‘/mnt’ directory en verander de eigenaar van de directory in de nginx gebruiker en groep.

mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hls

Test de configuratie en herstart de nginx dienst.

nginx -t
systemctl restart nginx

Configureer Nginx voor RTMP

Stap 6 – Opzetten van de eerste RTMP Live Stream

In deze zelfstudie maken we een nieuwe RTMP stream video op aanvraag met de mp4 video’s op de server, en maken we een nieuwe live RTMP stream die vanaf de lokale computer met de OBS software uitgezonden wordt.

Ga naar de ‘/etc/nginx’ configuratie directory en bewerk het ‘nginx.conf’ bestand.

cd /etc/nginx/
vim nginx.conf

Plak onderstaande configuraties in de ‘rtmp { … }’ haakjes.

        # RTMP video on demand for mp4 files
        application vod {
            play /mnt/mp4s;
        }

        # RTMP stream using OBS
        application stream {
            live on;
        }

Bewaar en sluit af.

Maak nu een nieuwe directory ‘mp4s’ om alle vod video’s in op te slaan, en verander de eigenaar in de nginx gebruikersgroep.

mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4s

Test de nginx configuratie en controleer of er geen fout optreedt, start dan de nginx dienst opnieuw.

nginx -t
systemctl restart nginx

De nginx configuratie voor de RTMP live stream en de vod stream is nu voltooid.

RTMP live stream instellen

Stap 7 – Testen

Test de RTMP live stream en de vod stream met de VLC speler.

Video On Demand stroom

Open de VLC app op je computer.

Klik op het ‘File’ menu en kies de optie ‘Open Network’.

Typ nu de RTMP URL voor onze vod stream.

rtmp://192.168.1.10:1935/vod/file.mp4

Klik op de knop ‘Open’.

RTMP cliënt instellen

En dit zijn de resultaten van de video stream.

RTMP videostroom

Live Stream met OBS (Open Broadcaster Software)

In deze zelfstudie zullen we de RTMP live stream testen met de obs software, en de vlc speler.

We zullen alleen het terminal venster streamen met de open broadcaster software, en proberen de RTMP live stream te bekijken met de VLC speler.

Hieronder volgt mijn configuratie voor de obs software.

Live streamen met OBS (Open Broadcaster Software)

Open de VLC app op je computer.

Klik op het ‘File’ menu, kies de optie ‘Open Network’.

Typ nu de RTMP URL voor onze live stream.

rtmp://192.168.1.10:1935/stream/

Klik op de knop ‘Open’.

Live stream configuratie

En het volgende is het resultaat van de live stream met open broadcaster via de nginx rtmp module.

Live stream zaait op in Media client

De installatie van de Nginx webserver met RTMP module op CentOS 7 is met succes voltooid.

Referentie