Cómo instalar Nginx con módulo RTMP en CentOS 7

Instale las dependencias de Nginx y RTMP

RTMP (Protocolo de mensajería en tiempo real) es un protocolo de alto rendimiento para la transmisión de datos, audio y video a través de Internet entre tecnologías de plataforma basadas en flash. Originalmente desarrollado por Macromedia y ahora propiedad de Adobe.

Nginx RTMP es un transmisor de medios basado en nginx con transmisión en vivo RTMP, HLS y MPEG-DASH. El módulo Nginx RTMP tiene muchas funciones, incluida la compatibilidad con H264/AAC, compatibilidad con devolución de llamada HTTP, módulo de control HTTP para grabar audio/video, etc.

En este tutorial, le mostraré cómo instalar y configurar el servidor web Nginx con el módulo RTMP. Usaremos el último servidor CentOS 7, y esta guía incluirá la configuración del módulo nginx y rtmp y la creación de transmisión en vivo RTMP y video a pedido.

requisitos previos

  • Servidor CentOS 7
  • Privilegios de raíz

¿Lo que haremos?

  1. Instalar dependencias
  2. Descargar Nginx con paquete adicional y módulo RTMP
  3. Compile Nginx e instale desde la fuente
  4. Configurar Nginx como servicio
  5. Configurar el módulo RTMP de Nginx
  6. Configurar la primera transmisión en vivo RTMP
  7. Pruebas

Paso 1 – Instalar dependencias

En este tutorial, construiremos el servidor web Nginx desde la fuente. Necesitamos instalar todas las dependencias de paquetes necesarias, incluidas las herramientas de desarrollo, el repositorio EPEL y otros paquetes.

Instale las ‘Herramientas de desarrollo’ de CentOS.

sudo yum -y groupinstall 'Development Tools'

Agregue el repositorio EPEL.

sudo yum -y install epel-release

Instale 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

Espere a que se instalen todos los paquetes.

Instale las dependencias de Nginx y RTMP

Paso 2: descargue Nginx con paquete adicional y módulo RTMP

En este paso, descargaremos el código fuente de nginx con las dependencias adicionales, incluidas pcre, zlib y OpenSSL.

Vaya 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

Descargue el paquete pcre y extráigalo.

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

Descargue el paquete zlib y extráigalo.

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

Descargue el paquete OpenSSL y extráigalo.

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

Luego, clone el código fuente del módulo Nginx RTMP usando el comando git.

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

Y elimine todos los archivos comprimidos tar.gz y .zip.

rm -f *.tar.gz *.zip

Los siguientes son los detalles del directorio que tenemos.

ls -lah

Fuentes Nginx descargadas

Y estamos listos para compilar e instalar.

Paso 3: compilar Nginx e instalarlo desde el origen

Vaya al directorio ‘nginx-1.14.0’.

cd nginx-1.14.0/

Configure el nginx 1.14.0 usando los parámetros 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

Compile e instale Nginx con el módulo RTMP ejecutando los siguientes comandos.

sudo make
sudo make install

Cuando se complete la instalación, debemos crear un nuevo directorio de módulo de enlace simbólico, crear un nuevo usuario y grupo de nginx y crear un nuevo directorio de caché de nginx.

Cree el módulo de enlace simbólico nginx en el directorio de configuración ‘/etc/nginx’.

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

Cree un nuevo usuario y grupo del sistema ‘nginx’.

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

Ahora cree un nuevo directorio de caché de Nginx ‘/var/cache/nginx’ y cambie el propietario del directorio al usuario y grupo ‘nginx’.

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

Pruebe la configuración de nginx y la versión de nginx instalada.

nginx -t
nginx -V

Y el siguiente es el resultado.

Nginx compilado con éxito

El servidor web Nginx se instaló en CentOS 7 con el módulo RTMP habilitado.

Paso 4: configurar Nginx como servicio

En este tutorial, ejecutaremos nginx como un servicio y necesitamos crear un nuevo archivo de servicio nginx en el directorio de servicio systemd.

Vaya al directorio ‘/lib/systemd/system’ y cree un nuevo archivo ‘nginx.service’ usando vim.

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

pegue la configuración a continuación.

[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

Guardar y Salir.

Ahora recarga el sistema systemd.

systemctl daemon-reload

Inicie el servicio nginx y permita que se inicie cada vez que se inicie el sistema.

systemctl start nginx
systemctl enable nginx

El servidor web Nginx está funcionando como un servicio en el sistema CentOS 7.

Servicio del sistema Nginx

Paso 5: configurar el módulo Nginx RTMP

En este paso, crearemos una nueva configuración personalizada de Nginx para el módulo RTMP.

Vaya al directorio de configuración ‘/etc/nginx’ y haga una copia de seguridad del archivo ‘nginx.conf’ original.

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

Ahora cree una configuración personalizada ‘nginx.conf’.

vim nginx.conf

Pegue la configuración RTMP de Nginx 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/;
        }
    }
}

Guardar y Salir.

A continuación, necesitamos crear un nuevo directorio para la configuración de HLS y hemos definido que el directorio raíz web está en el directorio ‘/mnt’.

Cree el directorio ‘hls’ en el directorio ‘/mnt’ y cambie el propietario del directorio al usuario y grupo nginx.

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

Pruebe la configuración y reinicie el servicio nginx.

nginx -t
systemctl restart nginx

Configurar Nginx para RTMP

Paso 6: configure la primera transmisión en vivo RTMP

En este tutorial, crearemos una nueva transmisión de video RTMP a pedido usando los videos mp4 en el servidor y crearemos una nueva transmisión RTMP en vivo que se transmitirá desde la computadora local usando el software OBS.

Vaya al directorio de configuración ‘/etc/nginx’ y edite el archivo ‘nginx.conf’.

cd /etc/nginx/
vim nginx.conf

Pegue las configuraciones a continuación en el corchete ‘rtmp { … }’.

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

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

Guardar y Salir.

Ahora cree un nuevo directorio ‘mp4s’ para almacenar todos los videos vod y cambie el propietario al grupo de usuarios nginx.

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

Pruebe la configuración de nginx y asegúrese de que no haya ningún error, luego reinicie el servicio de nginx.

nginx -t
systemctl restart nginx

Se completó la configuración de Nginx para la transmisión en vivo RTMP y la transmisión vod.

Configurar transmisión en vivo RTMP

Paso 7 – Prueba

Pruebe la transmisión en vivo RTMP y la transmisión vod con el reproductor VLC.

Transmisión de video a pedido

Abra la aplicación VLC en su computadora.

Haga clic en el menú ‘Archivo’ y elija la opción ‘Abrir red’.

Ahora escriba la URL de RTMP para nuestra transmisión de vod.

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

Haga clic en el botón ‘Abrir’.

Configuración del cliente RTMP

Y los siguientes son los resultados de la transmisión de video.

Transmisión de vídeo RTMP

Transmisión en vivo usando OBS (Open Broadcaster Software)

En este tutorial, probaremos la transmisión en vivo RTMP usando el software obs y el reproductor vlc.

Transmitiremos solo la ventana de la terminal usando el software de transmisión abierto e intentaremos ver la transmisión en vivo RTMP usando el reproductor VLC.

La siguiente es mi configuración para el software obs.

Transmisión en vivo usando OBS (Open Broadcaster Software)

Abra la aplicación VLC en su computadora.

Haga clic en el menú ‘Archivo’, elija la opción ‘Abrir red’.

Ahora escriba la URL RTMP para nuestra transmisión en vivo.

rtmp://192.168.1.10:1935/corriente/

Haga clic en el botón ‘Abrir’.

Configuración de transmisión en vivo

Y el siguiente es el resultado de la transmisión en vivo usando una emisora ​​abierta a través del módulo nginx rtmp.

La transmisión en vivo aparece en el cliente multimedia

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

Referencia

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *