🚧RTMP-HLS server
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.
Protocolo RTMP
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:
rtmp://servidor.com/live/streamkey

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!
RTMP-HLS en contenedor Docker
Instalación
Obviamente para la instalación requieres tener instalado docker, si no lo tienes aún revísate esta guía.
Para instalar el contenedor simplemente descarga y activa la imagen de docker hub :
docker run -d -p 1935:1935 -p 8080:8080 alqutami/rtmp-hls
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.
Este contenedor viene con varios reproductores web ya instalados (basados en video.js y hls.js) dentro de/usr/local/nginx/html/players
.
Configuración de multimedia
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:
ffmpeg -i <video>

Y luego, conviértelo:
ffmpeg -i <video_input> -vcodec libx264 <video_output>
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.
ffmpeg -re \
-stream_loop -1 \
-i falloutintro_264.mp4 \
-c:v copy \
-r 24 -g 24 \
-preset superfast \
-tune zerolatency \
-f flv rtmp://localhost:1935/live/<clave>
Explicación de los parámetros utilizados:
-re
: Indica affmpeg
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 a0
, 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:
ffmpeg -re \
-stream_loop -1 \
-i falloutintro_264.mp4 \
-c:v copy \
-r 24 -g 24 \
-preset superfast \
-tune zerolatency \
-f flv rtmp://localhost:1935/live/test
Streaming con VLC
Instala VLC en tu ordenador host desde la web oficial.
Una vez instalado, accede a Medio> Abrir ubicación de red
La URL que deberás poner será la siguiente:
rtmp://192.168.32.182:1935/live/test
Puede tardar un tiempo en funcionar el vídeo, ten paciencia.

Adicionalmente, para revisar información sobre usuarios conectados en streaming:
http://<TuIP>:8080/stats

🚧 Streaming con web player
(...)
To view the stream
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
🚧 REVISAR DE HACER CON MEDIAMTX
HLS sobre Apache
A nivel usuario (streamer): Open Broadcaster Studio / OBS
Multiplataforma y muy potente
Captura fuentes de video y audio en tiempo real, compone escenas y añade filtros
Codifica ( x264 ) , graba y retransmite (RTMP)
Se conecta con plataformas de streaming (youtube, vimeo, twitch, etc)
A nivel de infraestructura:
Uso de ffmpeg con protocolos de streaming
Tu biblioteca de Audio y Video en Internet (Ampache )
Uso de plataforma web para streaming:
Uso de HLS (crear listas m3u8 ) y ver con cliente (p.ej. VLC)
Uso de reproductor HLS (con javascript)
A nivel CDN (IaaS): por ejemplo con CloudFare / ¿ Qué es ?
Almacena
Codifica
Reproduce
!!!
Instalar un servicio de streaming
Webgrafía
Última actualización