Crea tu servidor RTMP para streaming con nginx

22
99981

En este tutorial vamos a ver cómo puedes crear tu propio servidor RTMP. Con él podrás realizar streaming de vídeo con tu propio servicio sin ser limitado por las especificaciones que te imponen servicios como Youtube o Twitch.

Índice de contenidos

1. Introducción

La mayoría nos hemos topado ya con algún streaming en directo en servicios como Youtube o Twitch. En este caso veremos cómo hacer lo mismo sin depender de alguna de estas plataformas. Para ello utilizaremos nginx.

Nginx es un servidor web/proxy multiplataforma que trabaja con los protocolos HTTP, HTTPS, SMTP, IMAP, POP3. En este caso le añadiremos un módulo para poder tener nuestro servidor RTMP (Real-Time Messaging Protocol). Gracias a este complemento podremos empezar a emitir en nuestra pantalla, juegos o incluso lo que obtengamos desde un dispositivo externo como una cámara de vídeo.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core I7, 8GB DDR3).
  • Sistema Operativo: macOS Sierra 10.12.4
  • Entorno de desarrollo: NetBeans IDE 8.0.2
  • Servidor: Nginx 1.12.0
  • Streaming Software: OBS 18.0.1

3. Dónde alojarlo

Una de las ventajas de nginx es lo realmente ligero que puede llegar a ser y su capacidad de balancear la carga. Actualmente lo estoy utilizando desde una VPN que corre Ubuntu y he comprobado que una Raspberry Pi 3 Model B con Raspbian puede soportar varias peticiones al servidor sin problemas. En este caso, alojaré el servidor en el ordenador descrito en el punto anterior.

Como vemos, el hardware no es un punto muy importante. Lo que sí debemos tener en cuenta es la conexión a internet que tendrá la máquina que aloje el servidor RTMP y la máquina que se utilizara para realizar el streaming. Se debe tener una buena conexión tanto de subida como de bajada. Pero la velocidad mínima que debes de tener dependerá de variables como la resolución de imagen, calidad de imagen/audio y el número de peticiones simultáneas máximas que deseas tener.

4. NGINX

En los siguientes puntos aprenderemos cómo instalar nginx junto con su módulo rtmp. Además, veremos cómo realizar una configuración básica para poder empezar a testear el servicio en unos minutos.

4.1. Instalación de nginx con el módulo RTMP

Para su descarga podemos acceder al directorio de nginx desde aquí.Y el módulo rtmp desde tu Github aquí.

En este caso utilizaremos Homebrew.

$ brew tap homebrew/nginx

Agregamos el repositorio nginx a nuestra lista de fórmulas.

$ brew options nginx-full

Podemos visualizar la lista de complementos de los que disponemos en el repositorio agregado anteriormente. En este caso solo utilizaremos rtmp-module.

$ brew install nginx-full --with-rtmp-module

Después de instalar nginx deberíamos ver la siguiente salida en la consola.

instalación nginx

Entre otros, nos encontramos la siguiente información:

  • Origen de nuestro http: /usr/local/var/www
  • Puerto de nginx: 80
  • Localización de nuestro archivo nginx.conf, el cual configuraremos en el siguiente paso: /usr/local/etc/nginx/nginx.conf
  • Comando para iniciar nginx: nginx
  • Comando para detener nginx: nginx -s quit

4.2. Configuración de nuestro RTMP

Lo que haremos en este paso será agregar nuestro servidor RTMP dentro del archivo de nginx.conf. Agregaremos nuestro rtmp justo antes del http. Debería quedarnos algo como esto.

events {
    ...
}
rtmp {
    server {
        listen 1935;
        application adictos {
            live on;
            record off;
        }
    }
}

http {
    ...
}

Con esta configuración tan simple ya podemos empezar a poner a prueba nuestro servidor. Vamos a explicar qué significan estas líneas. Dentro de elemento raíz describiremos el server. Con “listen 1935” agregaremos el socket de escucha para las conexiones RTMP. Después, con las siguientes líneas describimos una aplicación dentro de nuestro servidor RTMP.

application adictos {
    live on;
    record off;
}

En este caso solo tenemos una application pero podríamos tener tantos como queramos. Creando varios podemos configurar cada uno con unas características específicas dentro del mismo servidor.

Con live on; dejamos activado el stream. Y con record off; desactivamos que nuestro directo quede grabado. Para este caso tenemos las siguientes opciones [off|all|audio|vídeo|keyframes|manual].

Como podéis ver, hacer una setup básica para empezar a emitir en unos minutos es muy fácil. Pero si queréis aprovechar toda la funcionalidad del módulo RTMP de nginx os recomiendo visitar este enlace con las directivas de configuración.

5. Empezar a emitir

Una vez establecido nuestro servidor, toca ponerse a stremear, ¿no? Para ello existen muchos programas como XSplit, OBS, Evolve, Kazam… Por experiencia propia recomiendo OBS (Open Broadcaster Software) debido a lo ligero y fácil que resulta configurarlo.

En este caso me saltaré la explicación de este software ya que mi compañera Leti hizo un tutorial explicando cómo Capturar pantalla y retransmitir en directo con OBS.

5.1. Configurar la ip de nuestro servidor

Nos disponemos a configurar el servidor que utilizaremos. Normalmente, los programas de streaming traen pre-configurados algunas plataformas como Twitch o Youtube. Pero en este caso seleccionaremos la opción de utilizar un servicio personalizado.

configuración observar

Como vemos, la URL sigue este formato:

rtmp://[IP o dominio del servidor]/[Nombre del application]

En mi caso, al utilizar un servidor alojado en mi propia máquina, utilizaré localhost. El nombre del application debe ser el que hemos configurado en nginx.conf. La clave de retransmisión es una cadena de caracteres de control. Esto se utilizará más adelante para poder ver el streaming que quieras. Los servicios mencionados antes te proveen de dicha clave.

En este punto, deberíamos poder empezar a transmitir sin problemas.

obs emitiendo

6. Visualiza tu emisión

Entraremos en cualquiera de nuestros reproductores de vídeo, en mi caso VLC. Y agregamos la dirección de red de nuestro servidor.

Esta dirección consta del siguiente formato:

rtmp://[IP o dominio del servidor]/[Nombre del application]/[Clave de retransmisión]

configuración vlc

Una vez agregada la dirección podremos observar nuestro directo.

vlc recibiendo

7. Conclusiones

Hemos visto cómo en unos minutos hemos sido capaces de levantar un servidor que será capaz de retransmitir la señal de vídeo que queramos. Las plataformas que he mencionado antes son buenas, pero desde un principio nos imponen diferentes limitaciones. De esta forma, seremos capaces de transmitir cuando y lo que queramos, restringir el acceso, y mucho más.

8. Referencias

22 COMENTARIOS

  1. Hola Ayrton, excelente aporte. Voy a probar haciendo la instalación desde un pequeño VPS que tengo. Hay opción de hacer un variable bitrate por si la persona que va a ver nuestra transmision no se congele el video? en caso de no tener un buen ancho de banda en su casa o movil.

    Muchas gracias.

  2. Amigo, no se absolutamente nada de sistemas operativos Linux; y no se si sea una burrada la solicitud que le hago, pero ¿podría ser posible que se realice este montaje para sistemas operativos Windows? En mi caso Windows 10 Pro. Espero su respuesta, gracias de antemano.

  3. hola actualmente estoy usando ant-media server y su sdk …. para aplicaciones moviles…. el proceso es el mismo se pone la URL RTMP y jala… no se si con NGINX funciones igual..

  4. si bien el obs puede enviar a una dirección
    como puedo hacer para que reciba dos señales diferentes y emita en otras dos señales diferentes
    Gracias.

  5. y como lo configuro si quiero compartirlo en la red, ya logre que funcione de modo local, tengo una ip fija y un puerto abierto, cual seria la programacion de nginx para esto?

  6. Hola, me podrías decir cuantos usuarios puede soportar un server de 16gb de ram de EC2 Amazon O como puedo calcularlo ?

    Gracias muy interesante el artículo

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad