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 de nginx y el módulo rtmp y la creación de transmisión en vivo RTMP y video a pedido.
Requisitos
- Servidor CentOS 7
- Privilegios de raíz
¿Qué haremos?
- Instalar dependencias
- Descargar Nginx con paquete adicional y módulo RTMP
- Compila Nginx e instala desde la fuente
- Configurar Nginx como servicio
- Configurar el módulo Nginx RTMP
- Configurar la primera transmisión en vivo RTMP
- 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.
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
A continuación, clone el código fuente del módulo RTMP de Nginx con 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
Y estamos listos para compilar e instalar.
Paso 3:compilar Nginx e instalar 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
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 un 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é Nginx '/var/cache/nginx' y cambie el propietario del directorio a 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.
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.
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
Paso 6:configurar 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.
Paso 7 - Prueba
Pruebe la transmisión en vivo RTMP y la transmisión de vod con el reproductor VLC.
Transmisión de video a pedido
Abre la aplicación VLC en tu computadora.
Haga clic en el menú 'Archivo' y seleccione la opción 'Abrir red'.
Ahora escriba la URL RTMP para nuestra transmisión de vod.
rtmp://192.168.1.10:1935/vod/file.mp4
Haga clic en el botón 'Abrir'.
Y los siguientes son los resultados de la transmisión de video.
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 abierta e intentaremos ver la transmisión en vivo RTMP usando el reproductor VLC.
La siguiente es mi configuración para el software obs.
Abre la aplicación VLC en tu computadora.
Haga clic en el menú 'Archivo', elija la opción 'Abrir red'.
Ahora escriba la URL de RTMP para nuestra transmisión en vivo.
rtmp://192.168.1.10:1935/stream/
Haga clic en el botón 'Abrir'.
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 instalación del servidor web Nginx con módulo RTMP en CentOS 7 se completó con éxito.