RAI
RAI
RAI
Internet 25/1
https://restream.io/blog/rtmp-streaming/
https://teyuto.com/blog/what-is-rtmp-is-rtmp-dead-advantages-disadvantages-
1
Redes y Aplicaciones 2024-
Internet 25/1
2
Redes y Aplicaciones 2024-
Internet 25/1
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:
3
Redes y Aplicaciones 2024-
Internet 25/1
1
Esta práctica ha sido probada en un servidor Debian 11.6 y en un Ubuntu
4
Redes y Aplicaciones 2024-
Internet 25/1
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.
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.
5
Redes y Aplicaciones 2024-
Internet 25/1
Antes de empezar con la instalación del servidor web Nginx, actualizad vuestro
sistema:
apt update
apt upgrade
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
6
Redes y Aplicaciones 2024-
Internet 25/1
rtmp {
server {
listen 1935;
chunk_size 4096;
allow publish all;
application live {
live on;
record off;
}
}
}
nginx -t
Reiniciad el servicio:
Ejercicio 1
1. listen 1935;
Este parámetro especifica el puerto en el que el servidor RTMP escuchará las conexiones
entrantes. El puerto 1935 es el estándar para RTMP.
2. chunk_size 4096;
Define el tamaño de los fragmentos de datos que se envían a través de la conexión RTMP.
Un tamaño mayor puede mejorar la eficiencia del streaming, pero también puede aumentar
la latencia.
3. allow publish all;
Permite que cualquier cliente pueda publicar streams en el servidor. Esto es útil para
pruebas, pero en un entorno de producción, deberías restringir qué clientes pueden
publicar.
4. application live { ... }
Dentro de este bloque, se configuran las aplicaciones específicas para el servicio RTMP.
En este caso, se define una aplicación llamada "live".
5. live on;
Activa el modo en vivo para la aplicación, permitiendo la transmisión en tiempo real.
6. record off;
7
Redes y Aplicaciones 2024-
Internet 25/1
Desactiva la grabación de las transmisiones entrantes. Si necesitas grabar los streams,
puedes cambiar este valor a "on" y configurar opciones adicionales para definir cómo y
dónde se guardarán los archivos.
8
Redes y Aplicaciones 2024-
Internet 25/1
c) Para verificar que nginx está funcionando correctamente, teclead la siguiente
orden en consola y mostrad el resultado mediante una captura de pantalla:
9
Redes y Aplicaciones 2024-
Internet 25/1
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.
10
Redes y Aplicaciones 2024-
Internet 25/1
11
Redes y Aplicaciones 2024-
Internet 25/1
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
12
Redes y Aplicaciones 2024-
Internet 25/1
Ejercicio 2
a) Explicad qué significan todas las opciones del comando anterior ffmpeg.
ffmpeg -re -i "nombre del fichero descargado" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv
"rtmp://localhost/live/stream"
1. -re: Indica que el archivo de entrada debe ser leído a la velocidad de fotogramas
nativa. Esto es útil para simular una transmisión en tiempo real desde un archivo
local, ya que asegura que los datos se envían en tiempo real en lugar de
procesarse lo más rápido posible.
2. -i "nombre del fichero descargado": Especifica el archivo de entrada (en este
caso, un video descargado previamente).
3. -c:v copy: Copia el flujo de video sin recodificarlo. Esto ahorra tiempo y recursos,
ya que no se realiza ningún procesamiento adicional sobre el video.
4. -c:a aac: Establece el códec de audio como AAC (Advanced Audio Codec), un
formato ampliamente utilizado para streaming debido a su eficiencia y calidad.
5. -ar 44100: Configura la frecuencia de muestreo del audio a 44.1 kHz, que es
estándar para muchos dispositivos y plataformas.
6. -ac 1: Configura el audio en un solo canal (mono). Esto puede ser útil para
reducir el ancho de banda necesario durante la transmisión.
7. -f flv: Especifica el formato de salida como FLV (Flash Video), un contenedor
comúnmente utilizado para transmisiones RTMP.
8. "rtmp://localhost/live/stream": Es la URL del servidor RTMP al que se enviará el
video. Aquí, localhost indica que el servidor está funcionando en la misma
máquina, mientras que live/stream define la ruta o clave del stream.
b) Explicad por qué en la URL a la que estamos enviando el vídeo aparecen las
palabras
live y stream.
En la URL rtmp://localhost/live/stream, las palabras "live" y "stream" tienen los
siguientes significados:
1. live:
13
Redes y Aplicaciones 2024-
Internet 25/1
Representa una ruta o directorio virtual en el servidor RTMP configurado
para manejar transmisiones en vivo.
En servidores como NGINX con RTMP module, esta palabra suele estar
asociada con una configuración específica para gestionar streams en
tiempo real.
2. stream:
Es un identificador único o clave del flujo de transmisión (stream key). Este
nombre permite distinguir entre diferentes transmisiones simultáneas
enviadas al mismo servidor.
Por ejemplo, si varios usuarios transmiten al mismo servidor RTMP, cada
uno puede usar una clave distinta para identificar su stream.
Estas palabras son configurables y pueden variar según cómo esté configurado el
servidor RTMP.
ffmpeg -re -i "nombre del fichero descargado" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv
"rtmp://localhost/live/stream"
Análisis:
-c:v copy: Este parámetro indica que el flujo de video se copia tal cual, sin
recodificación. Esto significa que la tasa de fotogramas (FPS) del video de entrada se
mantiene en la salida. El FPS no se modifica explícitamente en este comando.
FPS del archivo de entrada: Dado que no se especifica un cambio de FPS con el
parámetro -r o el filtro fps, la transmisión mantiene el FPS original del archivo de
entrada. Para conocer este valor, puedes inspeccionar el archivo con el siguiente
comando:
bash
ffprobe -v 0 -select_streams v:0 -show_entries stream=r_frame_rate -of
compact=p=0:nk=1 "nombre del fichero descargado"
Esto devolverá una fracción como 30/1, lo que indica que el video tiene 30 FPS. Si el
archivo tiene un FPS variable, se puede usar avg_frame_rate para obtener un
promedio.
14
Redes y Aplicaciones 2024-
Internet 25/1
El FPS de transmisión será igual al FPS original del archivo de entrada, ya que no hay
parámetros en el comando que alteren este valor.
e) La emisión terminará cuando el vídeo pare. ¿Qué habría que hacer para
reproducirlo en bucle?
-stream_loop -1: Esta opción le indica a ffmpeg que debe repetir el video de entrada
indefinidamente. El valor -1 significa un bucle infinito3
Bitrate medio kbps = ((Tama o del archivo bytes ×8)/(Duración segundos ))/1000
Tamaño del archivo: 500,000,000 bytes
Duración: 600 segundos
El cálculo sería:
Bitrate medio kbps =(500,000,000×8/600)/1000=6666.67 kbps
15
Redes y Aplicaciones 2024-
Internet 25/1
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.
16
Redes y Aplicaciones 2024-
Internet 25/1
rtmp://<ip_de_tu_servidor>/live/<usuario_uoc>
...
allow publish 127.0.0.1;
allow publish <tu_dirección_ip_local>;
deny publish all;
...
nginx –t
service nginx restart
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
17
Redes y Aplicaciones 2024-
Internet 25/1
una fuente de entrada de tipo captura de pantalla:
18
Redes y Aplicaciones 2024-
Internet 25/1
Ejercicio 3
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.
19
Redes y Aplicaciones 2024-
Internet 25/1
El próximo paso es habilitar la página de estadísticas de RTMP. Para ello vais a crear
un host virtual en Nginx:
20
Redes y Aplicaciones 2024-
Internet 25/1
nano /etc/nginx/sites-available/rtmp
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
cd /var/www/html/rtmp
wget https://raw.githubusercontent.com/arut/nginx-rtmp-module/master/stat.xsl
ln -s /etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp
nginx –t
service nginx restart
21
Redes y Aplicaciones 2024-
Internet 25/1
Ejercicio 4
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 {
22
Redes y Aplicaciones 2024-
Internet 25/1
listen 8088;
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
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
23
Redes y Aplicaciones 2024-
Internet 25/1
Referencias
24