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?

  1. Instalar las dependencias
  2. Descarga Nginx con el paquete adicional y el módulo RTMP
  3. Compilar Nginx e instalar desde el código fuente
  4. Configurar Nginx como servicio
  5. Configurar el módulo RTMP de Nginx
  6. Configurar el primer flujo en directo RTMP
  7. 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.

Instalar las dependencias de Nginx y RTMP

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

Fuentes de Nginx descargadas

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

Compilar nginx

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

Nginx compilado con éxito

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.

Servicio systemd de Nginx

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

Configurar Nginx para RTMP

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.

Configurar la transmisión en directo RTMP

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».

Configuración del cliente RTMP

Y los siguientes son los resultados del flujo de vídeo.

Flujo de vídeo RTMP

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.

Transmisión en directo con OBS (Open Broadcaster Software)

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».

Configuración de la transmisión en directo

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 transmisión en directo se reproduce en el cliente Media

La instalación del servidor web Nginx con el módulo RTMP en CentOS 7 se ha completado con éxito.

Referencia

También te podría gustar...