RTMP (Real Time Messaging Protocol) je vysoce výkonný protokol pro přenos dat, zvuku a videa přes internet mezi platformami založenými na technologii flash. Původně vyvinutý společností Macromedia a nyní ve vlastnictví společnosti Adobe.
Nginx RTMP je streamer médií založený na nginx s živým streamováním RTMP, HLS a MPEG-DASH. Modul Nginx RTMP má mnoho funkcí, včetně podpory H264/AAC, podpory zpětného volání HTTP, ovládacího modulu HTTP pro nahrávání zvuku/videa atd.
V tomto tutoriálu vám ukážu, jak nainstalovat a nakonfigurovat webový server Nginx s modulem RTMP. Budeme používat nejnovější server CentOS 7 a tato příručka bude zahrnovat konfiguraci modulu nginx a rtmp a vytvoření živého přenosu RTMP a videa na vyžádání.
Předpoklady
- Server CentOS 7
- Oprávnění uživatele root
Co uděláme?
- Instalovat závislosti
- Stáhněte si Nginx s dalším balíčkem a modulem RTMP
- Zkompilujte Nginx a nainstalujte ze zdroje
- Nakonfigurujte Nginx jako službu
- Nakonfigurujte modul Nginx RTMP
- Nastavení prvního živého přenosu RTMP
- Testování
Krok 1 – Instalace závislostí
V tomto tutoriálu vytvoříme webový server Nginx ze zdroje. Musíme nainstalovat všechny potřebné závislosti balíčků, včetně vývojových nástrojů, úložiště EPEL a dalších balíčků.
Nainstalujte CentOS 'Development Tools'.
sudo yum -y groupinstall 'Development Tools'
Přidejte úložiště EPEL.
sudo yum -y install epel-release
Nainstalujte závislosti 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
Počkejte, až se nainstalují všechny balíčky.

Krok 2 – Stáhnout Nginx s dalším balíčkem a modulem RTMP
V tomto kroku si stáhneme zdrojový kód nginx s dalšími závislostmi včetně pcre, zlib a OpenSSL.
Přejděte do adresáře '/usr/local/src'.
cd /usr/local/src
Stáhněte si Nginx 1.14.0 a rozbalte jej.
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz
Stáhněte si balíček pcre a extrahujte jej.
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
unzip pcre-8.42.zip
Stáhněte si balíček zlib a rozbalte jej.
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
Stáhněte si balíček OpenSSL a rozbalte jej.
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gz
Dále naklonujte zdrojový kód modulu Nginx RTMP pomocí příkazu git.
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
A odstraňte všechny komprimované soubory tar.gz a .zip.
rm -f *.tar.gz *.zip
Níže jsou uvedeny podrobnosti o adresáři.
ls -lah

A jsme připraveni ke kompilaci a instalaci.
Krok 3 – Kompilace Nginx a instalace ze zdroje
Přejděte do adresáře 'nginx-1.14.0'.
cd nginx-1.14.0/
Nakonfigurujte nginx 1.14.0 pomocí těchto parametrů níže.
./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

Zkompilujte a nainstalujte Nginx s modulem RTMP spuštěním následujících příkazů.
sudo make
sudo make install
Po dokončení instalace musíme vytvořit nový adresář modulu symbolických odkazů, vytvořit nového uživatele a skupinu nginx a vytvořit nový adresář mezipaměti nginx.
Vytvořte modul symbolického odkazu nginx do konfiguračního adresáře '/etc/nginx'.
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Vytvořte nového uživatele a skupinu systému 'nginx'.
sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx
Nyní vytvořte nový adresář mezipaměti Nginx '/var/cache/nginx' a změňte vlastníka adresáře na uživatele a skupinu 'nginx'.
mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/
Otestujte konfiguraci nginx a nainstalovanou verzi nginx.
nginx -t
nginx -V
A výsledek je následující.

Webový server Nginx byl nainstalován na CentOS 7 s povoleným modulem RTMP.
Krok 4 – Konfigurace Nginx jako služby
V tomto tutoriálu budeme provozovat nginx jako službu a potřebujeme vytvořit nový soubor služby nginx do adresáře služeb systemd.
Přejděte do adresáře '/lib/systemd/system' a vytvořte nový soubor 'nginx.service' pomocí vim.
cd /lib/systemd/system/
vim nginx.service
vložte konfiguraci níže.
[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
Uložte a ukončete.
Nyní znovu načtěte systémový systém.
systemctl daemon-reload
Spusťte službu nginx a povolte její spuštění při každém spuštění systému.
systemctl start nginx
systemctl enable nginx
Webový server Nginx je spuštěn a běží jako služba na systému CentOS 7.

Krok 5 – Konfigurace modulu Nginx RTMP
V tomto kroku vytvoříme novou vlastní konfiguraci Nginx pro modul RTMP.
Přejděte do konfiguračního adresáře '/etc/nginx' a zálohujte původní soubor 'nginx.conf'.
cd /etc/nginx/
mv nginx.conf nginx.conf.asli
Nyní vytvořte vlastní konfiguraci 'nginx.conf'.
vim nginx.conf
Níže vložte konfiguraci Nginx RTMP.
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/;
}
}
} Uložte a ukončete.
Dále musíme vytvořit nový adresář pro konfiguraci HLS a definovali jsme, že webový kořenový adresář je v adresáři '/mnt'.
Vytvořte adresář 'hls' v adresáři '/mnt' a změňte vlastníka adresáře na uživatele a skupinu nginx.
mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hls
Otestujte konfiguraci a restartujte službu nginx.
nginx -t
systemctl restart nginx

Krok 6 – Nastavení prvního živého přenosu RTMP
V tomto tutoriálu vytvoříme nové streamované video RTMP na vyžádání pomocí videí mp4 na serveru a vytvoříme nový živý stream RTMP, který bude vysílán z místního počítače pomocí softwaru OBS.
Přejděte do konfiguračního adresáře '/etc/nginx' a upravte soubor 'nginx.conf'.
cd /etc/nginx/
vim nginx.conf
Vložte konfigurace níže do závorky 'rtmp { ... }'.
# RTMP video on demand for mp4 files
application vod {
play /mnt/mp4s;
}
# RTMP stream using OBS
application stream {
live on;
} Uložte a ukončete.
Nyní vytvořte nový adresář 'mp4s' pro ukládání všech vod videí a změňte vlastníka na uživatelskou skupinu nginx.
mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4s
Otestujte konfiguraci nginx a ujistěte se, že nedošlo k chybě, poté restartujte službu nginx.
nginx -t
systemctl restart nginx
Konfigurace Nginx pro živý stream RTMP a vod stream byla dokončena.

Krok 7 – Testování
Otestujte živé vysílání RTMP a vodový stream pomocí přehrávače VLC.
Stream videa na vyžádání
Otevřete v počítači aplikaci VLC.
Klikněte na nabídku 'Soubor' a vyberte možnost 'Otevřít síť'.
Nyní zadejte adresu URL RTMP pro náš proud vod.
rtmp://192.168.1.10:1935/vod/file.mp4
Klikněte na tlačítko 'Otevřít'.

A následující jsou výsledky video streamu.

Živý přenos pomocí softwaru OBS (Open Broadcaster Software)
V tomto tutoriálu otestujeme živý přenos RTMP pomocí softwaru obs a přehrávače vlc.
Budeme streamovat pouze okno terminálu pomocí softwaru otevřeného vysílání a pokusíme se sledovat živý přenos RTMP pomocí přehrávače VLC.
Následuje moje konfigurace pro software obs.

Otevřete v počítači aplikaci VLC.
Klikněte na nabídku 'Soubor', vyberte možnost 'Otevřít síť'.
Nyní zadejte adresu URL RTMP pro náš živý přenos.
rtmp://192.168.1.10:1935/stream/
Klikněte na tlačítko 'Otevřít'.

A následující je výsledek živého přenosu pomocí otevřeného vysílacího programu prostřednictvím modulu nginx rtmp.

Instalace webového serveru Nginx s modulem RTMP na CentOS 7 byla úspěšně dokončena.