Cómo configurar un servidor NGINX RTMP para transmisión

¿Tu transmisión en vivo se está cortando cada vez? Si es así, necesitarás encontrar una forma confiable de alojar tu transmisión. ¡Pero si no puedes permitirte opciones costosas, no te preocupes! NGINX RTMP vendrá al rescate. NGINX RTMP es un módulo de código abierto confiable, así que ya sabes lo que eso significa: ¡es GRATIS!

En este tutorial, aprenderás cómo configurar un servidor NGINX RTMP para que puedas establecer una transmisión en vivo confiable con tu sitio web.

¿Listo? ¡Sigue leyendo y comienza a configurar tu transmisión en vivo!

Requisitos previos

Este tutorial será una demostración práctica. Si deseas seguirlo, asegúrate de tener lo siguiente:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
  • NGINX instalado en el servidor Linux.
  • A non-root user with sudo privileges.
  • Recursos mínimos necesarios para ejecutar un servidor de transmisión en vivo: 2 GB de RAM, 2 núcleos de CPU y 20 GB de HDD.

Estos valores son solo sugerencias. Los valores exactos dependen de tus necesidades de tráfico reales. Cuanto más tráfico tengas, más potentes serán los servidores que necesitarás para alojar y transmitir tu video en vivo. En un entorno de desarrollo, un servidor NGINX RTMP con 2 CPU y 2 GB de RAM es suficiente para realizar pruebas.

Configurando un Servidor RTMP

Ahora que los requisitos previos están fuera del camino, puedes pasar a instalar y configurar tu servidor RTMP. Primero, instalarás un módulo NGINX para convertir tu servidor NGINX en un servidor RTMP, luego configurarás el archivo de configuración de NGINX para habilitar transmisiones en vivo para los usuarios.

1. Abre tu terminal y ejecuta el comando apt update para actualizar todos tus paquetes. Este comando sincroniza tu base de datos de paquetes con la última base de datos de Ubuntu.

sudo apt update -y
Updating all your packages

2. A continuación, ejecuta el siguiente comando para instalar un servidor RTMP en tu servidor Linux.

El módulo libnginx-mod-rtmp es un módulo NGINX que convierte tu servidor NGINX en un servidor RTMP. Este módulo permite que NGINX se comunique con el reproductor de Adobe Flash para que puedas transmitir tu video o audio en vivo, y es oficialmente compatible con su equipo de desarrollo.

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. Abre el archivo /etc/nginx/nginx.conf en tu editor favorito para configurar tu programa en vivo RTMP. El archivo nginx.conf es un archivo de configuración de NGINX, que contiene varias directivas o bloques para definir el comportamiento del servicio de NGINX.

4. Finalmente, llena el archivo nginx.conf con el siguiente código, guarda los cambios y sale del editor.

El código a continuación indica a NGINX que actúe como un servidor RTMP y habilite transmisiones en vivo para tus usuarios.

# Este bloque de código indica a NGINX que actúe como servidor RTMP. 
rtmp {
		server {
		# Establece el puerto en el que el servidor escuchará.
    listen 1935;
				# El tamaño de cada fragmento de datos que se enviará.
				# Flash Player se congelará si el fragmento es demasiado pequeño, 
				# lo que puede causar una condición de falta de búfer.
        chunk_size 4096;
				# Se permiten las direcciones IP para publicar contenido en el servidor.
				# Permitir solo localhost para publicar contenido en NGINX RTMP.
				allow publish 127.0.0.1;
				# Denegar la publicación para todos los demás.
				deny publish all;
				# Define una aplicación llamada "live"
        application live {
				# Indica a NGINX que habilite transmisiones en vivo para sus usuarios.
						live on;
				# Esta línea indica a NGINX que deshabilite la grabación. Si no se incluye esta línea, 
				# NGINX seguirá grabando y guardará su transmisión para siempre en su disco.
						record off;
				}
		}
}

Securizando la Red mediante la Configuración de un Cortafuegos

Ya has configurado tu servidor NGINX RTMP, pero necesitarás asegurar tu red y controlar el flujo de tráfico. ¿Cómo? Configurando un cortafuegos, Uncomplicated Firewall (UFW), que es el cortafuegos predeterminado en Ubuntu.

Si colocas tu servidor NGINX RTMP detrás de un cortafuegos, deberás permitir que el puerto del servidor NGINX RTMP esté abierto. Dado que has configurado tu servidor NGINX RTMP para escuchar en el puerto 1935, permitirás que este puerto esté accesible a través de tu cortafuegos.

1. Ejecuta el siguiente comando para agregar una regla de cortafuegos que abra el puerto 1935 en tu cortafuegos. Esta regla de cortafuegos permite que el puerto 1935 de tu servidor NGINX RTMP sea accesible para todas las solicitudes entrantes y salientes.

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. A continuación, ejecuta el siguiente comando para desactivar y volver a habilitar tu cortafuegos. Este comando reinicia básicamente el cortafuegos para que cualquier cambio surta efecto.

sudo ufw disable && sudo ufw enable

3. Finalmente, ejecuta el siguiente comando para verificar el estado de tu cortafuegos y comprobar si el puerto 1935 es accesible desde todas las direcciones IP (En cualquier lugar).

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

Transmisión de video usando FFmpeg

Tu servidor NFINX RTMP está listo, así que es hora de usar FFmpeg para crear un ejemplo de video y transmitirlo a través de tu servidor NGINX RTMP. FFmpeg es una solución completa para grabar, convertir y transmitir audio y video en muchas aplicaciones diferentes como VLC, OMXPlayer, VobSub, entre otras.

Estarás probando la transmisión de video en tu servidor, y puedes usar cualquier video que sea pequeño en tamaño para la transmisión.

1. Ejecute el comando apt install a continuación para instalar las dependencias necesarias para que FFmpeg funcione correctamente.

El siguiente comando instala lo siguiente:

  • libpcre3 – Una biblioteca de expresiones regulares utilizada por la caja de herramientas de ffmpeg para ayudar a analizar y compilar expresiones regulares.
  • libpcre3-dev – Este paquete contiene los encabezados de desarrollo del paquete libpcre3.
  • libssl-dev – La biblioteca criptográfica OpenSSL utilizada para crear conexiones SSL/TLS en su servidor RTMP.
  • zlib1g-dev: La biblioteca zlib es una biblioteca de compresión y descompresión que acelera la transferencia de archivos de audio y video a través de Internet.
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

2. A continuación, ejecute el siguiente comando para instalar ffmpeg en su servidor.

 sudo apt install ffmpeg -y 
Installing FFmpeg

3. Por último, ejecute el comando ffmpeg para realizar lo siguiente y crear un nuevo flujo en vivo:

  • Lea la entrada (re) del archivo fuente (i) a la velocidad de fotogramas original. Asegúrese de reemplazar video.mp4 con la ruta y el nombre de archivo de su video.
  • Copie el formato de video literalmente (c:v copy), y codifique el audio con el códec AAC (c:a aac).
  • Establezca la frecuencia de muestreo de audio en 44100 Hz (ar 44100). Si la frecuencia de muestreo de su video es menor que este valor (44100 Hz), FFmpeg realiza interpolación para aumentar la frecuencia de muestreo.
  • Establezca los canales de audio a un canal (mono) (ac 1), y el formato de video que FFmpeg transmitirá (-f flv).
  • Configure su programa en vivo RTMP (rtmp://localhost/live/streamname.flv) que configuró en la sección “Configuración de un servidor RTMP” (paso cuatro). Puede cambiar streamname.flv por el nombre que prefiera.
ffmpeg -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

Como se muestra a continuación, el comando ffmpeg imprime los cuadros por segundo que detecta, el bitrate, y los fps del flujo en vivo RTMP recién creado.

Viewing the RTMP Live Stream Data

Conclusión

En este tutorial, has aprendido cómo configurar tu servidor NGINX RTMP y habilitar transmisiones en vivo en tu servidor modificando el archivo de configuración de NGINX. También has abordado la configuración de una transmisión de video en vivo utilizando la herramienta FFmpeg a través de tu servidor NGINX RTMP.

Acabas de darte cuenta de que configurar una transmisión en vivo no tiene por qué costarte cada centavo. En este punto, ¿por qué no integrar tu transmisión en tu página web utilizando HTML5 y el elemento <video>? O configurar OBS Studio para tu transmisión RTMP?

Source:
https://adamtheautomator.com/nginx-rtmp/