🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • Protocolo RTMP
  • RTMP-HLS en contenedor Docker
  • Instalación
  • Configuración de multimedia
  • Streaming con VLC
  • Streaming con web player
  • REVISAR DE HACER CON MEDIAMTX
  • HLS sobre Apache
  1. Servicios
  2. Multimedia services

RTMP-HLS server

AnteriorIcecast - música en streamingSiguienteGuacamole

Última actualización hace 1 mes

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

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.

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 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:

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

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

(...)

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



HLS sobre Apache

  1. Multiplataforma y muy potente

  2. Captura fuentes de video y audio en tiempo real, compone escenas y añade filtros

  3. Se conecta con plataformas de streaming (youtube, vimeo, twitch, etc)

A nivel de infraestructura:

  1. Uso de ffmpeg con protocolos de streaming

  2. Uso de plataforma web para streaming:

    1. Uso de reproductor HLS (con javascript)

  1. Almacena

  2. Codifica

  3. 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 .

Streaming con web player

REVISAR DE HACER CON MEDIAMTX

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 / ¿ ?

🗃️
🏗️
🚧
🚧
🚧
esta guía
imagen de docker hub
video.js
hls.js
Open Broadcaster Studio
OBS
x264
Ampache
listas m3u8
con CloudFare
Qué es
Instalar un servicio de streaming
web oficial
Instalar un servicio de streamingApuntes de Informática (FP)
GitHub - bluenviron/mediamtx: Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams.GitHub
Logo
Diagrama de funcionamiento
Error de compatibilidad con códec
Obsérvalo en la línea marcada
El vídeo se reproducirá en bucle y podrás pararlo cuando quieras pero no adelantarlo ni atrasarlo.
En la página puedes revisar quienes están conectados al streaming
Logo