Cómo instalar Nginx con el módulo RTMP en CentOS 7
RTMP (Real Time Messaging Protocol) es un protocolo de alto rendimiento para la transmisión de datos, audio y vídeo a través de Internet entre tecnologías de plataformas basadas en flash. Originalmente fue desarrollado por Macromedia, y ahora es propiedad de Adobe.
Nginx RTMP es un streamer de medios basado en nginx con RTMP, HLS y MPEG-DASH en directo. El módulo RTMP de Nginx tiene muchas características, incluyendo soporte H264/AAC, soporte de devolución de llamadas HTTP, módulo de control HTTP para grabar el audio/vídeo, etc.
En este tutorial, te mostraré cómo instalar y configurar el servidor web Nginx con el módulo RTMP. Utilizaremos el último servidor CentOS 7, y esta guía incluirá la configuración de nginx y el módulo rtmp y la creación de la transmisión en directo RTMP y el vídeo bajo demanda.
Requisitos previos
- Servidor CentOS 7
- Privilegios de root
¿Qué vamos a hacer?
- Instalar las dependencias
- Descarga Nginx con el paquete adicional y el módulo RTMP
- Compilar Nginx e instalar desde el código fuente
- Configurar Nginx como servicio
- Configurar el módulo RTMP de Nginx
- Configurar el primer flujo en directo RTMP
- Prueba de
Paso 1 – Instalar las dependencias
En este tutorial, construiremos el servidor web Nginx desde el código fuente. Necesitamos instalar todas las dependencias de los paquetes necesarios, incluyendo las herramientas de desarrollo, el repositorio EPEL y otros paquetes.
Instala las ‘Herramientas de Desarrollo’ de CentOS.
sudo yum -y groupinstall 'Development Tools'
Añade el repositorio EPEL.
sudo yum -y install epel-release
Instala las dependencias de 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
Espera a que se instalen todos los paquetes.
Paso 2 – Descargar Nginx con el paquete adicional y el módulo RTMP
En este paso, descargaremos el código fuente de nginx con las dependencias adicionales que incluyen pcre, zlib y el OpenSSL.
Ve al directorio ‘/usr/local/src’.
cd /usr/local/src
Descarga Nginx 1.14.0 y extráelo.
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz
Descarga el paquete pcre y extráelo.
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
unzip pcre-8.42.zip
Descarga el paquete zlib y extráelo.
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
Descarga el paquete OpenSSL y extráelo.
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gz
A continuación, clona el código fuente del Módulo RTMP de Nginx utilizando el comando git.
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
Y elimina todos los archivos tar.gz y .zip comprimidos.
rm -f *.tar.gz *.zip
A continuación, los detalles del directorio que tenemos.
ls -lah
Y ya estamos listos para compilar e instalar.
Paso 3 – Compilar Nginx e instalar desde el código fuente
Ve al directorio ‘nginx-1.14.0’.
cd nginx-1.14.0/
Configura el nginx 1.14.0 utilizando los parámetros que aparecen a continuación.
./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
Compila e instala Nginx con el módulo RTMP ejecutando los siguientes comandos.
sudo make
sudo make install
Una vez completada la instalación, tenemos que crear un nuevo directorio de módulos symlink, crear un nuevo usuario y grupo nginx, y crear un nuevo directorio de caché nginx.
Crea un módulo nginx symlink al directorio de configuración ‘/etc/nginx’.
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Crea un nuevo usuario y grupo del sistema ‘nginx’.
sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx
Ahora crea un nuevo directorio de caché de Nginx ‘/var/cache/nginx’ y cambia el propietario del directorio al usuario y grupo ‘nginx’.
mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/
Prueba la configuración de nginx y la versión de nginx instalada.
nginx -t
nginx -V
Y el resultado es el siguiente
El servidor web Nginx ha sido instalado en CentOS 7 con el módulo RTMP activado.
Paso 4 – Configurar Nginx como servicio
En este tutorial, vamos a ejecutar nginx como un servicio y necesitamos crear un nuevo archivo de servicio nginx en el directorio de servicios systemd.
Ve al directorio ‘/lib/systemd/system’ y crea un nuevo archivo ‘nginx.service’ utilizando vim.
cd /lib/systemd/system/
vim nginx.service
pega la configuración de abajo.
[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
Guarda y sal.
Ahora vuelve a cargar el sistema systemd.
systemctl daemon-reload
Inicia el servicio nginx y habilítalo para que se inicie siempre al arrancar el sistema.
systemctl start nginx
systemctl enable nginx
El servidor web Nginx está funcionando como servicio en el sistema CentOS 7.
Paso 5 – Configurar el módulo RTMP de Nginx
En este paso, crearemos una nueva configuración personalizada de Nginx para el módulo RTMP.
Ve al directorio de configuración ‘/etc/nginx’ y haz una copia de seguridad del archivo original ‘nginx.conf’.
cd /etc/nginx/
mv nginx.conf nginx.conf.asli
Ahora crea una configuración personalizada ‘nginx.conf’.
vim nginx.conf
Pega la configuración de Nginx RTMP a continuación.
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/; } } }
Guarda y sal.
A continuación, tenemos que crear un nuevo directorio para la configuración HLS y hemos definido que el directorio raíz de la web está en el directorio ‘/mnt’.
Crea el directorio ‘hls’ bajo el directorio ‘/mnt’ y cambia el propietario del directorio al usuario y grupo nginx.
mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hls
Prueba la configuración y reinicia el servicio nginx.
nginx -t
systemctl restart nginx
Paso 6 – Configurar la primera transmisión en directo RTMP
En este tutorial, crearemos un nuevo flujo RTMP de vídeo bajo demanda utilizando los vídeos mp4 del servidor, y crearemos un nuevo flujo RTMP en directo que se emitirá desde el ordenador local utilizando el software OBS.
Ve al directorio de configuración ‘/etc/nginx’ y edita el archivo ‘nginx.conf’.
cd /etc/nginx/
vim nginx.conf
Pega las configuraciones siguientes en el paréntesis ‘rtmp { … }’.
# RTMP video on demand for mp4 files application vod { play /mnt/mp4s; } # RTMP stream using OBS application stream { live on; }
Guarda y sal.
Ahora crea un nuevo directorio ‘mp4s’ para almacenar todos los vídeos vod, y cambia el propietario al grupo de usuarios de nginx.
mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4s
Prueba la configuración de nginx y asegúrate de que no hay ningún error, luego reinicia el servicio nginx.
nginx -t
systemctl restart nginx
La configuración de nginx para el flujo en directo RTMP y el flujo vod se ha completado.
Paso 7 – Prueba
Prueba el flujo en directo RTMP y el flujo vod utilizando el reproductor VLC.
Flujo de vídeo bajo demanda
Abre la aplicación VLC en tu ordenador.
Haz clic en el menú «Archivo» y elige la opción «Abrir red».
Ahora escribe la URL RTMP para nuestro flujo vod.
rtmp://192.168.1.10:1935/vod/file.mp4
Haz clic en el botón «Abrir».
Y los siguientes son los resultados del flujo de vídeo.
Transmisión en directo con OBS (Open Broadcaster Software)
En este tutorial, probaremos la transmisión en directo RTMP utilizando el software obs, y el reproductor vlc.
Transmitiremos sólo la ventana del terminal utilizando el software open broadcaster, e intentaremos ver la transmisión en directo RTMP utilizando el reproductor VLC.
A continuación se muestra mi configuración para el software obs.
Abre la aplicación VLC en tu ordenador.
Haz clic en el menú «Archivo» y elige la opción «Abrir red».
Ahora escribe la URL RTMP para nuestra transmisión en directo.
rtmp://192.168.1.10:1935/stream/
Haz clic en el botón «Abrir».
Y el siguiente es el resultado de la transmisión en directo utilizando open broadcaster a través del módulo rtmp de nginx.
La instalación del servidor web Nginx con el módulo RTMP en CentOS 7 se ha completado con éxito.