Documentos de Académico
Documentos de Profesional
Documentos de Cultura
RTMP es un protocolo de mensajería en tiempo real que está presente en muchos de los
streamings de vídeo por Internet, tanto en tiempo real como almacenado. RTMP usa TCP como
protocolo de transporte y se utiliza con muchos tipos diferentes de medios, incluidos televisión en
vivo, vídeos y servicios de telefonía por Internet.
En esta práctica os presentamos el reto de configurar un servidor RTMP para emitir y recibir vídeo
almacenado o en tiempo real, utilizando diferentes herramientas y tecnologías. También
aprenderéis a transmitir flujos HLS y DASH compatibles con las plataformas más modernas.
La figura anterior os muestra el funcionamiento básico del protocolo. Primero, se codifica la señal
a enviar mediante codificadores de streaming que, a continuación, envían la señal codificada al
servidor usando el protocolo RTMP, desde el cual se distribuye al usuario directamente, a CDN o
a plataformas de vídeo online.
1
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
Esta práctica se desarrollará sobre un servidor Linux1 (Debian o Ubuntu), en el que instalaréis el
software necesario. Para ello podéis usar una máquina virtual (p.e. Virtualbox) o una instalación
en una máquina real. Al final del documento podéis encontrar algunos enlaces a distintos
tutoriales que explican cómo instalar VirtualBox, sus extensiones y cómo instalar Linux en
Virtualbox. Para el correcto funcionamiento de las máquinas virtuales puede que tengáis que
habilitar el PAE/NX en la configuración del VirtualBox, tal y como se muestra en la siguiente
pantalla:
VirtualBox os conecta por defecto a Internet a través de NAT utilizando el host anfitrión, pero os
interesará trabajar en modo puente para poder conectaros al servidor desde cualquier máquina
en nuestra red. Configurad en modo puente la red y comprobad que tenéis salida a Internet.
Calificación
Esta práctica consta de cuatro partes, que se han de realizar en orden secuencial (primero la
parte 1, después la parte 2…). La nota irá en función de las partes entregadas:
Para obtener los niveles indicados de calificación es necesario realizar todos los ejercicios y
apartados de las partes indicadas. En caso de haber algún ejercicio o apartado no realizado o
incompleto, implicará no obtener la calificación correspondiente.
2
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
Importante: para las capturas de pantalla que se piden, configurad el prompt del sistema
operativo de manera que muestre el día en el que estáis y vuestro nombre de usuario.
Nota: Entregad vuestras respuestas a los ejercicios, con las capturas de pantalla
correspondientes, en el registro de evaluación continua del aula de la asignatura.
Antes de empezar con la instalación del servidor web Nginx, actualizad vuestro sistema:
apt update
apt upgrade
La instalación del servidor web Nginx es estándar para cualquier sistema Ubuntu/Debian y tan
simple como teclear el siguiente comando en una consola de root:
Ahora iniciaréis Nginx y habilitaréis el servicio para que se arranque con el inicio del sistema (si
al arrancar da problemas, podéis comprobar que no tenéis otro servidor web, por ejemplo,
apache2, ejecutándose en el puerto 80):
Nginx incluye un módulo para transmitir RTMP desde una URL con una configuración mínima. El
módulo Nginx RTMP no se incluye automáticamente con Nginx, pero podéis instalarlo como un
paquete adicional:
Para configurar el servidor RTMP, tenéis que editar el fichero principal de Nginx, usando el
siguiente comando, por ejemplo:
nano /etc/nginx/nginx.conf
3
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
rtmp {
server {
listen 1935;
chunk_size 4096;
allow publish all;
application live {
live on;
record off;
}
}
}
nginx -t
Reiniciad el servicio:
Ejercicio 1
a) Explicad todos los parámetros de configuración de RTMP que habéis añadido en el fichero
de configuración anterior nginx.conf.
c) Para verificar que nginx está funcionando correctamente teclead la siguiente orden en
consola y mostrad el resultado mediante una captura de pantalla:
d) ¿En qué dirección IP se está ejecutando el servidor RTMP? Comprobadlo con el comando
ifconfig o con cualquier otra herramienta similar, mostrándolo mediante una captura de
pantalla.
e) ¿En qué puerto se está ejecutando el servidor RTMP? ¿En qué estado está? Comprobadlo
con el comando netstat o con cualquier otra herramienta similar, mostrándolo mediante
una captura de pantalla.
4
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
Cerrad la sesión, volved a entrar y descargad algún vídeo (con un short es suficiente) con el
comando yt-dlp:
Hay varias formas de enviar el vídeo al servidor RTMP. Una opción es usar el comando ffmpeg,
una herramienta muy popular de línea de comandos. Instaladla y enviad el vídeo al servidor RTMP
ejecutando el siguiente comando:
ffmpeg -re -i "<nombre del fichero descargado>" -c:v copy -c:a aac -ar 44100
-ac 1 -f flv –flvflags no_duration_filesize rtmp://localhost/live/stream
Ejercicio 2
a) Explicad qué significan todas las opciones del comando anterior ffmpeg.
5
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
b) Explicad por qué en la URL a la que estamos enviando el vídeo aparecen las palabras
live y stream.
e) La emisión terminará cuando el vídeo pare. ¿Qué habría que hacer para reproducirlo en
bucle?
Una de las opciones para crear vídeo en tiempo real es transmitir vuestro propio escritorio. Para
ello, configurad primero vuestras credenciales de servicio de transmisión en el menú Ajustes
de OBS. Navegad hasta la opción Emisión->Personalizado e introducid las siguientes
opciones, configurando la IP la de vuestro servidor en el campo Servidor, y vuestro usuario de la
UOC como Clave de retransmisión.
rtmp://<ip_de_tu_servidor>/live/<usuario_uoc>
6
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
...
allow publish 127.0.0.1;
allow publish <ip_de_tu_servidor>;
deny publish all;
...
Comprobad que el test de configuración es satisfactorio y reiniciad Nginx para que se apliquen
los cambios:
nginx –t
service nginx restart
En este momento ya estáis en disposición de crear vídeo en tiempo real para transmitirlo a través
del servidor RTMP. Para ello, el programa OBS se basa en escenas y fuentes para crear el diseño
de nuestro streaming.
Con el programa OBS abierto, fijaos en las ventanas de la parte inferior. Las escenas son las
diferentes composiciones de nuestro vídeo. Podéis usar los controles o hacer clic derecho en el
panel escenas para añadir, borrar o reordenar. De manera similar, haciendo clic derecho sobre
una escena existente podéis renombrarla, duplicarla, copiar sus propiedades o mostrarla de
manera independiente.
Cada escena puede tener distintas fuentes que son las que compondrán nuestra pantalla. Una
fuente es cualquier elemento que queramos visualizar o escuchar en nuestra escena: cámaras
de vídeo, ventanas de aplicaciones, juegos, pantallas, dispositivos de audio, imágenes, texto,
páginas web... Una vez creada la escena, podéis usar los controles o hacer clic derecho en el
panel fuentes para gestionarlas.
Podemos crear una escena con una única fuente, por ejemplo, nuestra cámara web; otra escena
con un juego, un conjunto de diapositivas y una grabación de audio explicativa. OBS usa una
visualización por capas, así que podéis dimensionar los distintos elementos como creáis
conveniente.
Vamos a poner estos conceptos en práctica. Añadid una escena simple en OBS y una fuente de
entrada de tipo captura de pantalla:
7
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
En la parte inferior derecha, pulsad en Iniciar transmisión para enviar vuestra señal al
servidor RTMP.
Ejercicio 3
a) Para comprobar que se está transmitiendo el streaming en tiempo real, conectaos con VLC o
similar a la URL rtmp://<ip_de_tu_servidor>/live/<usuario_uoc>. Mostradlo
mediante una captura de pantalla.
b) Realiza acciones de usuario sobre la pantalla donde estáis ejecutando OBS y fijaos en el
streaming que estáis visualizando con VLC o similar. ¿Qué es lo que estáis retransmitiendo?
c) Pensad un vídeo a reproducir que contenga como mínimo tres escenas con varias fuentes.
Explicad vuestra idea y mostrad mediante capturas de pantalla la configuración de OBS y la
reproducción del streaming con VLC.
d) Abrid el programa Wireshark como root antes de empezar la retransmisión del streaming en
vivo. Pegad una captura de pantalla donde se vea el tráfico RTMP que se ha generado.
Podéis filtrar por protocolo RTMPT para ver solo esta interacción. Explicad razonadamente,
paquete a paquete, la primera fase de establecimiento de la conexión (handshake) con la
negociación de parámetros (hasta los paquetes audio/video data).
El próximo paso es habilitar la página de estadísticas de RTMP. Para ello vais a crear un host
virtual en Nginx:
nano /etc/nginx/sites-available/rtmp
8
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
server {
listen 8080;
server_name localhost;
# rtmp stat
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /var/www/html/rtmp;
}
# rtmp control
location /control {
rtmp_control all;
}
}
mkdir /var/www/html/rtmp
gunzip -c /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl.gz >
/var/www/html/rtmp/stat.xsl
Por último, si tenéis instalado un firewall, para acceder a la página de estadísticas hay que abrir
otro puerto en vuestro firewall. En el fichero de configuración de Nginx podéis ver que el puerto
donde se está ejecutando es el 8080, por lo que tenéis que agregar una regla de acceso. Sin
embargo, para que nadie más pueda acceder a la página de estadísticas debéis abrirlo solo para
vuestra propia dirección IP:
ln -s /etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp
nginx –t
service nginx restart
9
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
10
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
Ejercicio 4
Mostrad una captura de pantalla con el acceso de vuestro navegador a la página de estadísticas
de RTMP: http://<ip_servidor>:8080/stat y actualizadla mientras transmitís vídeo
almacenado con VLC conectado. Observad cómo cambian las estadísticas de transmisión. En
caso negativo, reiniciad el VLC para verlas. Responded a las siguientes preguntas:
Para agregar compatibilidad con HLS y DASH modificad el bloque rtmp en el archivo de
configuración /etc/nginx/nginx.conf y añadid el siguiente contenido dentro de
application live y debajo de record off:
...
hls on;
hls_path /var/www/html/stream/hls;
hls_fragment 3;
hls_playlist_length 60;
dash on;
dash_path /var/www/html/stream/dash;
...
server {
listen 8088;
11
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
location / {
add_header Access-Control-Allow-Origin *;
root /var/www/html/stream;
}
types {
application/dash+xml mpd;
}
Y cread una carpeta stream en el DocumentRoot de Nginx para poder servir los archivos HLS
y DASH:
mkdir /var/www/html/stream
nginx –t
service nginx restart
Usad el comando ffmpeg, para enviar vídeos de prueba al servidor RTMP ejecutando el siguiente
comando:
ffmpeg -re -i "<nombre del fichero descargado>" -c:v copy -c:a aac -ar 44100
-ac 1 -f flv –flvflags no_duration_filesize rtmp://localhost/live/stream
Ejercicio 5
a) Explicad todos los parámetros de configuración de RTMP que habéis añadido en los dos
ficheros de configuración anteriores.
b) Comprobad con el comando netstat o con cualquier otra herramienta similar los servicios
que se han configurado, mostrándolo mediante una captura de pantalla.
12
Redes y Aplicaciones Internet / Sistemas de Internet 2022-23/2
d) Abrid el Wireshark y comprobad cómo se transmite el streaming HLS. Podéis filtrar por
puerto para visualizar los paquetes que nos interesan. Analizad la interacción que se da,
desde el inicio de la reproducción hasta su paro. Podéis pegar capturas de pantalla y
explicarlas. ¿En qué campo vemos que el streaming es HLS?
f) Abrid el Wireshark y comprobad cómo se transmite el streaming DASH. Podéis filtrar por
puerto para visualizar los paquetes que nos interesan. Analizad la interacción que se da,
desde el inicio de la reproducción hasta su paro. Podéis pegar capturas de pantalla y
explicarlas. ¿En qué campo vemos que el streaming es DASH?
Referencias
13