Documentos de Académico
Documentos de Profesional
Documentos de Cultura
7 minute read
nginx
El protocolo RTMPPermalink
El primer artículo que encontramos fue: Create your own video streaming server with
Linux y nos encontramos la definición del protocolo que íbamos a usar para realizar el
streaming: el protocolo RTMP.
El protocolo RTMP (Real-Time Messaging Protocol) se usa para los servicios streaming,
trabaja sobre TCP (Transmission Control Protocol) y usa por defecto el puerto 1935.
Permite al cliente controlar la calidad de distribución de la transmisión y seguridad.
Para más información sobre este protocolo puedes leer el siguiente documento.
Además aprendimos que podíamos implementarlo usando un módulo del servidor web
nginx.
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
Reiniciamos el servidor:
Para configurar OBS para transmitir vídeo a nuestro servidor rtmp, vamos a la opción
Configuración -> Emisión, en Tipo de Emisión elegimos la opción Personalizar el servicio
de retransmisión e indicamos los siguientes datos:
Para comprobar que la transmisión se está haciendo de manera adecuada nos debe
aparecer una barra de estado, con un cuadro verde (recuerda: verde bueno, rojo malo):
obs
Podemos configurar VLC para visualizar el streaming que estamos haciendo, para ello
nos vamos a la opción Medio -> Abrir ubicación de red… e indicamos la URL de la
retransmisión que estaría formada por la URL de nuestro servidor rtmp más la clave de
retransmisión que indicamos en OBS: rtmp://video.josedomingo.org/live/test:
vlc
vlc
Hemos hecho una configuración muy simple. Te puedo asegurar que podemos tener
muchas más funcionalidades en nuestro servidor rtmp. Efectivamente buscando por
internet llegué a la documentación oficial del módulo rtmp de nginx y te aseguro que hay
que echarle un buen rato. Nos vamos a quedar (nos hará falta posteriormente) con que
este módulo nos ofrece tres formatos para acceder al streaming: Stream Real-Time
Messaging Protocol (RTMP), Apple HTTP Live Streaming (HLS), y Dynamic Adaptive
Streaming over HTTP (DASH).
Hemos visualizado el streaming con VLC pero, ¿puedo tener un reproductor de vídeo
en una página web que me permita verlo?. He encontrado muchas librerías javascript
(luego hablaremos de ellas) que me permiten tener en mi página web un reproductor de
vídeo, pero los reproductores que eran capaz de ver vídeos desde rtmp (como hemos
hecho con VLC) necesitaban tener instalado en el navegador el plugin flash, no
funcionaban con HTML5.
Llegados a este punto y para solucionar estas dos limitaciones (tampoco he tenido
mucho tiempo para profundizar en la documentación de rtmp en nginx), me hice la
siguiente pregunta: ¿Existirá alguna imagen en docker hub que me ofrezca un servidor
rtmp configurado de forma adecuada?
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
112f5df28a19 alqutami/rtmp-hls "nginx -g 'daemon of…" 5 seconds ago Up 4
seconds 0.0.0.0:1935->1935/tcp, 0.0.0.0:8080->8080/tcp rtmp
Si queremos profundizar en los parámetros de configuración podemos ejecutar el
siguiente comando para visualizar el fichero de configuración:
Para acceder al streaming usando HLS tendríamos que acceder a la siguiente URL:
http://<server ip>:8080/hls/<stream-key>.m3u8, donde indicaremos la ip o el nombre del
servidor y la clave de retransmisión.
Para acceder al streaming usando DASH tendríamos que acceder a la siguiente URL:
http://<server ip>:8080/dash/<stream-key>_src.mpd, donde, de la misma forma,
indicaremos la ip o el nombre del servidor y la clave de retransmisión.
Puedes probar desde VLC a reproducir desde una ubicación de red indicando estas
URLs:
http://video.josedomingo.org:8080/hls/test.m3u8
http://video.josedomingo.org:8080/dash/test_src.mpd
Reproductores de vídeos disponiblesPermalink
La imagen docker que estamos usando nos ofrece varias páginas web de demostración
con distintos reproductores de vídeo que funcionan con los distintos protocolos. Estás
páginas de demostración están configuradas para reproducir vídeos desde localhost y
usando la clave de reproducción test. Por lo tanto lo que vamos a hacer es copiarnos
los ficheros html a nuestro ordenador, modificar las páginas html a nuestra conveniencia
(usando nuestra URL y nuestra clave de reproducción) y volver a crear el contenedor
con un volumen para que tenga nuestras versiones de estos ficheros. Vamos a ello:
Lo primero que vamos a hacer es copiarnos en una carpeta que vamos a llamar players
los ficheros html a nuestro ordenador:
# docker rm -f rtmp
# docker run -d -p 1935:1935 -p 8080:8080 -v /root/players:/usr/local/nginx/html/players
--name rtmp alqutami/rtmp-hls
Y podemos probar por ejemplo con la retransmisión hls:
rtmp
Ya os contaré la experiencia!!!