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.