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
- 2. Entorno
- 3. Dónde alojarlo
- 4. NGINX
- 5. Empezar a emitir
- 6. Visualiza tu emisión
- 7. Conclusiones
- 8. Referencias
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.
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.
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.
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]
Una vez agregada la dirección podremos observar nuestro directo.
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.
muy bien el tutorial, peor te pregunto si puedes poner uno mismo pero convirtiendo el streaming a HLS usando ffmpeg y nginx
Los pasos a seguir son los mismos, simplemente debes modificar el fichero nginx.conf con la configuracion que quieres. En el enlace que puse de las directivas viene todas las posibilidades de configuracion. De todas formas, te lo dejo aqui ( https://github.com/arut/nginx-rtmp-module/wiki/Directives#hls ) . Un saludo!
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.
Hola ayrton que tal te conozco desde pequeño que buen aporte se de donde viene el talento 🙂 consulta y algo similar en windows?.
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.
el tipo esta en mac, no en linux, se puede seguir el tutorial y hacerlo en windows.
Genios y si lo convierten en una aplicacion de facil uso? Los no programadores queremos independencia de los rtmp de youtube y twich.
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..
¿Esto se esta en 2 equipos diferentes o en 1 ?, y si son dos no me queda claro como se comunican entre si
hola como instalo el nginx y el Y el módulo rtmp y como utilizo homebrew
de donde sacas la clave ? o como se configura en el nginx.config? gracias de antemano es el unico punto que no encajo entender
Hola yo uso Windows 10, como podría hacerle?
Muchas gracias
necesito configurar slingstudio para transmisión simultánea fb y youtube
como puedo conseguir este rtmp
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.
Intento algo parecido MArk, quisiera retransmitir a FB y Yutube al mismo tiempo…, no le estoy encontrando la vuelta…
¡Qué tal!
Además de video, ¿también se puede configurar el servidor para música?
Saludos.
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?
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
Aproximadamente 1000 usuarios
Hola, me gustaria saber como puedo configurar el servidor para agregarlo a mi pagina web
buenas una pregunta si uno quiere ver la trasmisión a través del internet como hago, esto es para una red intranet de lo q entiendo