RTMP-HLS server
Última actualización
Última actualización
Para la práctica usaremos un servidor ubuntu con docker y crearemos un servidor de streaming en directo de vídeos con el objetivo de aprender el funcionamiento del protocolo RTMP y asentar los conocimiento sobre códecs y multimedia.
RTMP (Real-Time Messaging Protocol) es un protocolo desarrollado originalmente por Adobe para transmitir audio, video y datos entre un servidor y un cliente. Aunque nació para Flash, todavía se usa muchísimo, especialmente para la transmisión en vivo (streaming), por ejemplo, cuando alguien hace un directo en Twitch, YouTube o Facebook Live. RTMP trabaja principalmente en tres pasos:
1. Captura y codificación
Primero, el contenido (video y audio) es capturado desde una cámara o micrófono. Luego, un programa de codificación como VLC u OBS (Open Broadcaster Software) convierte ese contenido en un formato digital comprimido que RTMP puede transmitir.
2. Transmisión desde el cliente al servidor
El codificador se conecta a un servidor RTMP (contenedor de docker, nginx con el módulo RTMP, Wowza, etc.). Ahí comienza a enviar el flujo de datos en tiempo real a través del protocolo RTMP usando una URL como:
3. Distribución a los espectadores
El servidor recibe ese flujo y lo puede:
retransmitir a otras plataformas (como YouTube Live)
convertirlo a HLS o DASH, que sí son compatibles con navegadores y reproductores modernos.
RTMP no es compatible directamente con los navegadores modernos (porque Flash ya está muerto) por lo que hoy en día suele usarse solo para la subida (ingest) del stream al servidor, y luego se convierte a otros protocolos más compatibles como HLS o WebRTC para la visualización.
Visto esto, vayamos con la práctica!
En la documentación del hub puedes ver que también tienes la opción de descargar la imagen con alpine y una con el archivo de configuración de nginx personalizable.
Antes de empezar, deberemos tener en cuenta que el formato de salida FLV del comando para el contenedor solo es compatible con los siguientes códecs de vídeo:
H.264 (AVC o MPEG-4)
VP6
Sorenson Spark
H.263
En el caso de usar otro códec de vídeo puedes tener un error tal que este:
Para evitar este error, primeramente observa que códec de vídeo tiene el video descargado con:
Y luego, conviértelo:
Una vez tenemos el vídeo disponible, como ya hemos visto antes, deberemos enviar el flujo multimedia, para ello enviaremos el archivo con ffmpeg al formato de salida flv dentro del servidor.
Explicación de los parámetros utilizados:
-re
: Indica a ffmpeg
que lea la entrada a velocidad de reproducción en tiempo real.
-stream_loop -1
: continuará haciendo un bucle del archivo una vez que el flujo alcance el final. Si obvias este parámetro o lo pones a 0
, el video se reproducirá una sola vez.
-i /ruta/al/archivo_de_video.mp4
: Especifica la ruta al archivo de video que deseas transmitir.
-c:v libx264 -preset veryfast -tune zerolatency -pix_fmt yuv420p
: Configuración de video para codificar utilizando el códec H.264 con ajustes rápidos para baja latencia y formato de píxeles yuv420p.
-c:a aac -ar 44100 -ac 2
: Configuración de audio para codificar utilizando el códec AAC con frecuencia de muestreo de 44100 Hz y 2 canales de audio.
-f flv
: Especifica el formato de salida como FLV (Flash Video), que es compatible con la transmisión RTMP.
rtmp://localhost:1935/live/<clave>
: URL del servidor RTMP donde se enviará el flujo de video/audio. Para la <clave>
invéntate un nombre como identificación.
Pondremos el flujo a funcionar en modo local pero se podrá acceder desde el exterior a través de la IP del servidor. De hecho, este método es más rápido a nivel de red que usar la IP.
Por ejemplo:
Una vez instalado, accede a Medio> Abrir ubicación de red
La URL que deberás poner será la siguiente:
Puede tardar un tiempo en funcionar el vídeo, ten paciencia.
Adicionalmente, para revisar información sobre usuarios conectados en streaming:
(...)
Using provided web players:
The provided demo players assume the stream-key is called test
and the player is opened in localhost.
To play RTMP content (requires Flash): http://localhost:8080/players/rtmp.html
To play HLS content: http://localhost:8080/players/hls.html
To play HLS content using hls.js library: http://localhost:8080/players/hls_hlsjs.html
To play DASH content: http://localhost:8080/players/dash.html
To play RTMP and HLS contents on the same page: http://localhost:8080/players/rtmp_hls.html
Multiplataforma y muy potente
Captura fuentes de video y audio en tiempo real, compone escenas y añade filtros
Se conecta con plataformas de streaming (youtube, vimeo, twitch, etc)
A nivel de infraestructura:
Uso de ffmpeg con protocolos de streaming
Uso de plataforma web para streaming:
Uso de reproductor HLS (con javascript)
Almacena
Codifica
Reproduce
!!!
Webgrafía
Obviamente para la instalación requieres tener instalado docker, si no lo tienes aún revísate .
Para instalar el contenedor simplemente descarga y activa la :
Este contenedor viene con varios reproductores web ya instalados (basados en y ) dentro de/usr/local/nginx/html/players
.
Instala VLC en tu ordenador host desde la .
A nivel usuario (streamer): /
Codifica ( ) , graba y retransmite (RTMP)
Tu biblioteca de Audio y Video en Internet ( )
Uso de HLS (crear ) y ver con cliente (p.ej. VLC)
A nivel CDN (IaaS): por ejemplo / ¿ ?