Crea tu servidor RTMP para streaming con nginx

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.

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

Podemos visualizar la lista de complementos de los que disponemos en el repositorio agregado anteriormente. En este caso solo utilizaremos 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.

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.

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