RTMP en 2026: ¿sigue siendo el estándar de ingesta?
Adobe publicó la Real-Time Messaging Protocol Specification en 2009. Diecisiete años después, RTMP sigue siendo el protocolo de ingesta dominante del planeta a pesar de que YouTube anunció en 2024 que migra parcialmente a SRT y WebRTC, y a pesar de que Flash (su carcasa histórica) lleva muerto desde diciembre de 2020. ¿Cómo puede ser?
RTMP es una opción habitual de ingesta en encoders y plataformas. La compatibilidad depende de la versión, de los permisos de la cuenta y del endpoint que facilite el destino. Prueba credenciales, audio y video con tu equipo y compara protocolos según la red del evento.
Lo que ha cambiado
- RTMP de distribución (de server a viewer) está casi muerto. Ya no hay Flash Player; los viewers reciben HLS, DASH o WebRTC.
- RTMPS (RTMP sobre TLS, puerto 443) reemplazó a RTMP plano en Facebook, X y TikTok desde 2019.
- Aparecieron alternativas: SRT (mejor en redes inestables), RIST (broadcast-grade), WHIP (WebRTC HTTP Ingestion Protocol) ganando tracción.
Datos duros del mercado
Si entras a un proyecto nuevo de streaming en 2026 y te dicen "no uses RTMP porque es viejo", desconfía. Lo viejo no es lo malo. Lo malo es lo mal montado.
Nginx-RTMP: cómo funciona por dentro
El módulo nginx-rtmp-module fue creado por Roman Arutyunyan en 2012. Es un add-on para el servidor web Nginx que añade soporte de protocolo RTMP en el puerto 1935 y, opcionalmente, segmenta el stream entrante en HLS o DASH para servirlo via HTTP. Open-source, licencia BSD.
El flujo básico
- OBS envía RTMP al puerto 1935 de tu VPS.
- nginx-rtmp acepta la conexión, valida la stream key.
- El módulo guarda los chunks en /tmp/hls como archivos .m3u8 + .ts.
- El bloque http de Nginx sirve esos archivos por HTTP/HTTPS.
- El player en el browser pide la playlist y descarga los segmentos.
Snippet mínimo de nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
hls on;
hls_path /var/www/hls;
hls_fragment 3;
hls_playlist_length 60;
# Validación de stream key
on_publish http://127.0.0.1:8080/auth;
# Restream a YouTube
push rtmp://a.rtmp.youtube.com/live2/YOUR-KEY;
}
}
}
http {
server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /var/www;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
}
Lo que esto te da
- Ingesta RTMP en menos de 50 ms de overhead.
- Salida HLS lista para cualquier player web/mobile.
- Restream básico via "push" a otros endpoints RTMP.
- Stat module para monitoreo (URL /stat con XML/XSL).
Lo que NO te da
- Multibitrate adaptativo (ABR): solo emite la calidad que llega; si quieres 480p + 720p + 1080p simultáneo, necesitas FFmpeg externo transcodeando.
- Soporte de SRT, WebRTC, DASH (sin fork).
- Panel de administración: todo es archivos de configuración.
- Soporte de Roman Arutyunyan: no actualiza el repo desde 2019. Hay forks comunitarios pero el original está en hibernación.
Si quieres el paso a paso, lo tenemos en cómo configurar un servidor RTMP propio.
Costo real de un Nginx-RTMP propio: TCO honesto
Aquí es donde se cae la idea de que "self-hosted es gratis". Vamos a calcular el costo total de propiedad (TCO) realista de un Nginx-RTMP que aguante 500 viewers concurrentes 8 horas al día con multibitrate 480p+720p+1080p.
Tabla de costos mensuales reales
| Concepto | Costo USD/mes | Notas |
|---|---|---|
| VPS DigitalOcean Premium AMD 8vCPU/16GB | 96 | Para transcoding x264 a 3 calidades |
| Bandwidth saliente (8 TB) | 72 | 500 viewers * 8h * 30 días * 2 Mbps promedio |
| CDN Bunny CDN o BunnyStream | 48 | Si no quieres servir todo desde el VPS |
| Almacenamiento de grabaciones (200 GB) | 5 | Object storage |
| Monitoreo (UptimeRobot + Datadog mínimo) | 29 | Necesitas saber cuándo se cae |
| Tiempo DevOps (4 hrs/mes a USD 35/h) | 140 | Updates, parches, debugging |
| Subtotal infraestructura | 390 | Sin contar el setup inicial |
Costos one-time olvidados
- Setup inicial: 16-24 horas de DevOps. A USD 35/h son USD 560-840 antes de emitir el primer frame.
- Certificado SSL: gratis con Let's Encrypt, pero hay que configurar renovación automática (otra hora).
- Testing de carga: replicar 500 viewers con Locust o k6 requiere otro VPS temporal por 1-2 días.
El costo invisible: tu tiempo cuando algo falla
Tres incidentes típicos que vemos en clientes que migran desde Nginx-RTMP propio:
- VPS sobrecargado mid-stream: el transcoding consume 100% CPU, frames empiezan a caerse, viewers ven buffering. Necesitas tirar el stream, escalar el VPS, levantar de nuevo. 25-40 minutos perdidos en vivo.
- Stream key filtrada: alguien adivina la key o la encontró en un cliente JavaScript mal configurado. Empieza a emitir contenido random. Tienes que rotar la key, actualizar el encoder, reconectar.
- Ataque DDoS al puerto 1935: el firewall del VPS no aguanta, el VPS se cae, hay que esperar reboot. Sin CDN protectora delante, eres carne fácil.
Limitaciones técnicas de Nginx-RTMP
Más allá del costo, hay límites técnicos duros que conviene conocer antes de comprometerse con un setup Nginx-RTMP propio.
Multibitrate (ABR) requiere ingeniería extra
Para generar variantes de calidad puedes combinar un servidor de ingesta con procesos de transcodificación como FFmpeg. La carga depende de fuente, codec, preset, resoluciones y aceleración disponible. Mide recursos y continuidad con la configuración que pondrás en producción.
Monitoreo: lo mínimo necesario
El módulo /stat te da un XML con métricas básicas: streams activos, bitrate, conexiones. Para algo serio necesitas:
- Exportar /stat a Prometheus con un exporter (no oficial).
- Configurar alertas en Grafana (CPU, RAM, frames dropped, bitrate inestable).
- Alertar a Slack/Telegram/PagerDuty cuando el stream cae.
Es construir una mini-plataforma alrededor del módulo. Esfuerzo de un sprint completo.
Redundancia: prácticamente inexistente
Nginx-RTMP no tiene clustering nativo. Si el VPS se cae, el stream se cae. Las soluciones caseras (DNS failover, segundo VPS con encoder dual) funcionan pero requieren más infraestructura y testing constante.
Seguridad
- Stream keys son texto plano por default. Hay que implementar on_publish con un endpoint HTTP de validación.
- Sin token signing de fábrica para URLs HLS. Cualquiera con el .m3u8 puede embeber tu stream donde quiera.
- Sin geo-blocking nativo: necesitas otro layer (Cloudflare, MaxMind GeoIP en Nginx).
- DRM: imposible sin solución externa cara (Widevine, FairPlay).
Soporte y comunidad
El repositorio original tiene 13.000 stars en GitHub pero el último commit del mantenedor original es de 2019. Hay forks activos (nginx-rtmp-module-arut, sergey-dryabzhinsky/nginx-rtmp-module) pero ninguno con dedicación full-time. Cuando algo se rompe, te quedas con StackOverflow y posts antiguos de blogs rusos.
Alternativas modernas a Nginx-RTMP
Si Nginx-RTMP te queda corto pero quieres seguir self-hosted, hay opciones más modernas. Algunas son herederas espirituales, otras superan al original por mucho.
MediaMTX (antes rtsp-simple-server)
Escrito en Go, single-binary, sin dependencias. Soporta RTSP, RTMP, RTMPS, HLS, WebRTC, SRT como ingesta y salida. La curva es plana: archivo YAML, levantas el binario, listo.
- + Multi-protocolo nativo (RTSP + RTMP + WebRTC en mismo server).
- + Configuración declarativa, fácil de versionar.
- + Comunidad activa, releases mensuales en 2025.
- - Sin transcoding ABR nativo: ABR requiere FFmpeg externo igualmente.
- - Sin panel UI (todo CLI/YAML).
Ant Media Server
Turco, dual-licensed (Community gratis, Enterprise USD 99-499/mes). Hace WebRTC scalable de verdad, con clustering origin-edge. Si necesitas WebRTC para 1.000+ viewers, Ant es de los pocos open-source serios.
- + Clustering nativo origin/edge.
- + WebRTC, SRT, RTMP, HLS, DASH todo en uno.
- + Panel web decente.
- - Community Edition limitada (sin transcoding adaptive, sin clustering).
- - Enterprise sube rápido en precio si escalas.
SRS (Simple Realtime Server)
Chino, MIT license, monstruosamente performante. Maneja 10.000+ conexiones concurrentes en un solo nodo. Soporta RTMP, HTTP-FLV, HLS, SRT, WebRTC, GB28181 (vigilancia).
- + Rendimiento brutal, edge clustering CDN-like.
- + Docker oficial optimizado.
- - Comunidad principalmente en chino, foros y issues mixtos.
- - Sin transcoding ABR nativo.
Para más comparativas técnicas mira SRT vs RTMP.
Cuándo Nginx-RTMP tiene sentido (escenarios reales)
No todo es negativo. Hay casos donde montar un Nginx-RTMP propio es la decisión correcta. Los listamos honesto.
Caso 1: Testing y desarrollo
Estás desarrollando una app de streaming y necesitas un endpoint RTMP para apuntar OBS y probar. Nginx-RTMP en un Droplet de USD 6/mes es perfecto. Levantas, pruebas, tumbas. Cero compromiso.
Caso 2: Audiencia bajo 100 concurrentes
Un podcast en video con 30-60 espectadores en vivo. Un canal corporativo interno con 80 empleados. Aquí los números de Nginx-RTMP funcionan: un VPS de USD 24/mes basta. Si haces self-host bien, gastas menos que cualquier plan SaaS.
Caso 3: Red interna estricta (compliance)
Banca, salud, gobierno. Cuando políticas internas prohíben que la señal pase por infraestructura externa. Nginx-RTMP en datacenter on-prem o nube privada cumple compliance. El costo extra de DevOps lo absorbe el área de TI.
Caso 4: Aprender
Si tu trabajo es entender streaming de fondo, no hay mejor profesor que romper y arreglar tu propio Nginx-RTMP varias veces. Es el ejercicio educativo perfecto.
Caso 5: Restream básico hacia 2-3 destinos
Si lo único que necesitas es recibir RTMP de OBS y reemitir a YouTube + Facebook + Twitch sin más vueltas, Nginx-RTMP con el directive push hace el trabajo. No es bonito pero funciona.
Cuándo NO usar Nginx-RTMP, aunque te tiente
- Tu negocio depende de no caer.
- Audiencias mayores a 200 concurrentes.
- Necesitas paywall, geo-blocking, DRM.
- No tienes DevOps disponible 24/7.
- Cobras a clientes por el servicio (SLA contractual).
La pregunta correcta no es "¿Nginx-RTMP es bueno?". Es "¿mi tiempo vale más en operar el server o en producir contenido?". Si la respuesta es lo segundo, paga por un gestionado.
Cuándo conviene migrar a gestionado
Hay señales claras de que un Nginx-RTMP propio te queda chico. Vemos las mismas cinco una y otra vez en clientes que llegan migrando.
Tabla de triggers de migración
| Señal | Por qué importa | Acción |
|---|---|---|
| Audiencia rebasó 200 concurrentes recurrentes | CPU del VPS al 95%, frames dropped, buffering reportado | Migrar antes del próximo evento grande |
| Caída no planificada en horario crítico | Pérdida de ingresos / reputación. Una sola vez basta. | Evaluar gestionado con SLA contractual |
| DevOps dedica más de 6 horas/mes al server | Costo oportunidad alto, podría estar en otro lado | Calcular TCO real, comparar con SaaS |
| Necesitas paywall, DRM o geo-blocking | Implementar desde cero toma 3-6 meses | Migrar a plataforma con esas features built-in |
| Restream a más de 4 destinos | Push de Nginx no escala bien, hay que orquestar | Usar gestionado con restream nativo |
El cálculo del breakeven
Hagamos el ejercicio con un caso típico: Nginx-RTMP en un VPS de unos USD 40/mes, con el responsable técnico dedicando 8 horas mensuales al server. A USD 60/h de costo cargado, son cerca de USD 480/mes invisibles en el P&L. Total real: alrededor de USD 520/mes.
Con un plan Pro+ (USD 75/mes) ese mismo equipo se ahorra unos USD 445/mes y libera 8 horas mensuales para producto. La decisión se paga sola en el primer mes, y eso sin contar lo que cuesta una caída de dos horas en plena campaña.
Tres preguntas para tomar la decisión
- ¿Cuánto vale una hora de tu equipo técnico? Multiplica por horas/mes en el server.
- ¿Cuánto te cuesta una hora de downtime en tu plataforma? Multiplica por probabilidad anual.
- ¿Estás listo para responder un domingo a las 9 am cuando el server falla?
Si las tres respuestas no son cómodas, considera migrar. Hay opciones gestionadas con SLA que cubren ese hueco.
Cómo migrar desde Nginx-RTMP a un gestionado sin downtime
La duración de una migración depende de canales, archivos, integraciones y pruebas. El siguiente procedimiento sirve para planificarla: inventaría recursos, valida el nuevo flujo y acuerda una ventana de cambio con respaldo antes de cancelar el servicio anterior.
Día 1: Setup paralelo
- Crear cuenta en la plataforma gestionada (XtreamCast, Wowza Cloud, lo que decidas).
- Configurar canal con mismas calidades que tu Nginx (480p+720p+1080p, mismos bitrates).
- Probar emisión desde OBS apuntando al nuevo endpoint RTMP. Verifica que el HLS sale correctamente.
- Embeber el nuevo player en una página de staging.
Día 2: Doble emisión
- Configurar OBS con dos servidores RTMP simultáneos (output settings -> add server, o usar plugin OBS-multi-rtmp).
- Emitir un evento real a ambos endpoints. Comparar latencia, estabilidad, calidad.
- Validar restream multicanal en el gestionado (si aplica).
- Si todo funciona: cambiar el embed en tu web de staging a producción, pero mantener el viejo URL como fallback.
Día 3: Switchover y monitoreo
- Apuntar OBS solo al nuevo servidor.
- Monitorear primera semana en paralelo: viewers, bitrate, errores reportados.
- Mantener Nginx-RTMP viejo encendido como fallback durante 30 días.
- Al mes, si no hubo necesidad de fallback, apagar VPS viejo. Ahorro inmediato.
Lo que más sale mal en migraciones
- URLs hardcodeadas en apps móviles: si tienes Android/iOS apps, hay que publicar nueva versión antes del switchover.
- Embed code obsoleto en sitios de terceros: revisa quién tiene tu player embebido (clientes, partners).
- Bookmarks de viewers en URLs HLS directas: los viewers heavy a veces guardan el .m3u8 directo. Setear redirects 301 ayuda.
- Stream keys distintas: documentar bien la nueva key y rotarla en todos los encoders.
Operamos servidores de streaming desde 2011, primero con la marca STREAMINGHD y desde 2023 como XtreamCast, con el mismo equipo técnico. Migrar a un gestionado no significa que el RTMP esté muerto. Significa que dejas que otro lo opere mientras tú haces lo que de verdad mueve la aguja: contenido. Más sobre nuestros servers RTMP gestionados.
Fuentes y alcance de esta guía
Revisión editorial: 4 de septiembre de 2026. Las fuentes describen los estándares o servicios indicados; los resultados de una transmisión dependen de su configuración y de la red.