Servidor de video multicámara de baja latencia para Windows con ingesta desacoplada vía MediaMTX, SRT y UDP.
⬇️ Descargar Última Versión • 📖 Wiki Oficial • Sitio Web Oficial • Capturas • Inicio Rápido • Configuración OBS • Características • Seguridad • Discusiones • Contacto
RTMS (Real-Time Multicam System) es una estación de transmisión para Windows diseñada para capturar dispositivos DirectShow (cámaras web USB, capturadoras HDMI USB/PCIe y cámaras virtuales) y centralizar su distribución de ultra-baja latencia (≤50 ms P50) hacia OBS Studio, vMix o VLC Media Player. Configurado de fábrica con UDP Unicast para mínimo retardo de red directo y soporte completo para SRT y WebRTC WHEP.
Integra un servidor de medios embebido (MediaMTX) que desacopla la ingesta de la distribución, garantizando que las conexiones o desconexiones de clientes receptores nunca reinicien la cámara física. Cuenta con telemetría en tiempo real, persistencia transaccional ACID en SQLite WAL, blindaje de procesos a nivel de kernel mediante Windows Job Objects y cifrado criptográfico local con Windows DPAPI.
Tip
🌐 Descarga Directa y Documentación: Visita fjyarsky.github.io/RTMS o descarga el zip portable oficial desde GitHub Releases.
flowchart LR
subgraph INGEST [" Ingesta DirectShow "]
CAM1["Cámara USB 1<br/>(MJPEG / YUY2)"]
CAM2["Cámara USB 2<br/>(MJPEG / YUY2)"]
CAMN["Capturadora HDMI / Virtual"]
end
subgraph ENGINE [" Núcleo RTMS "]
DS["Detección Hardware & Win32 Job Objects"]
FF1["Worker FFmpeg 1<br/>(NVENC / QSV / AMF)"]
FF2["Worker FFmpeg 2<br/>(NVENC / QSV / AMF)"]
FFN["Worker FFmpeg N<br/>(CPU Fallback)"]
end
subgraph RELAY [" MediaMTX Relay Embebido "]
MTX["Loopback Local<br/>Desacople Total de Ingesta"]
SRT["SRT Server (:8890)<br/><100ms Latencia"]
WHEP["WebRTC WHEP (:8889)<br/>Vista Previa Web"]
UDP["UDP Multicast (:8888)<br/>Red Local"]
end
subgraph OUTPUTS [" Software de Producción "]
OBS["OBS Studio<br/>(SRT Caller)"]
VMIX["vMix / Wirecast"]
VLC["VLC Media Player<br/>(Desktop & Mobile QR)"]
end
CAM1 --> FF1
CAM2 --> FF2
CAMN --> FFN
DS -.-> FF1
DS -.-> FF2
DS -.-> FFN
FF1 -->|"Loopback Ingest"| MTX
FF2 -->|"Loopback Ingest"| MTX
FFN -->|"Loopback Ingest"| MTX
MTX --> SRT
MTX --> WHEP
MTX --> UDP
SRT --> OBS
SRT --> VMIX
SRT --> VLC
Descarga el paquete .zip oficial de la última versión desde GitHub Releases, descomprímelo en cualquier carpeta y ejecuta directamente rtms.exe. No requiere instalación previa de Python ni privilegios de administrador.
# 1. Clonar el repositorio
git clone https://github.com/FJYarsky/RTMS.git
cd RTMS
# 2. Instalar dependencias de producción
pip install -r requirements.txt
# 3. Descargar binarios verificados de FFmpeg y MediaMTX (PowerShell)
powershell -ExecutionPolicy Bypass -File scripts/setup_binaries.ps1
# 4. Iniciar la aplicación
python main.py- Agrega una Fuente multimedia (
Media Source) a tu escena. - Desmarca la casilla
Archivo local. - En Entrada (
Input), pega la URL copiada desde el panel de RTMS:srt://192.168.1.X:8890/?streamid=read:CAM_ID - En Formato de entrada (
Input Format), escribe:mpegts - En Tiempo de búfer de red, configura
50 mspara baja latencia. Haz clic en Aceptar.
- Desktop (Windows/Mac/Linux): Menú Medio > Abrir emisión de red, ingresa la URL de la cámara y en opciones avanzadas configura
:network-caching=150. - VLC Mobile (Android / iOS): Abre la pestaña Red, pulsa Abrir dirección de red, escanea el código QR desde el botón "Compartir enlace | QR" de RTMS y reproduce en tu red local.
- Ingesta Desacoplada (MediaMTX Relay): La cámara física emite continuamente en loopback local. OBS o vMix pueden conectarse y desconectarse cientos de veces sin reiniciar FFmpeg ni provocar parpadeos en los sensores USB.
- Transmisión de Baja Latencia: Optimización de pipelines con GOP determinista (500 ms),
-fflags nobuffer -flags low_delayy VBV sub-segundo para retardo de transporte mínimo. - Aceleración por GPU Dedicada: Detección automática y soporte optimizado para NVIDIA NVENC (
h264_nvenc), Intel QSV (h264_qsv) y AMD AMF (h264_amf), con fallback limpio a CPU (libx264). - Blindaje a Nivel Kernel (Win32 Job Objects): Todos los subprocesos multimedia (
ffmpeg.exe,ffplay.exe,mediamtx.exe) se asocian a un Job Object conKILL_ON_JOB_CLOSE, erradicando procesos huérfanos. - Persistencia Transaccional ACID (SQLite WAL): Gestión robusta de configuraciones con Write-Ahead Logging, prevención de bloqueos Win32 y backups automáticos preventivos.
- Gobernador Dinámico de Energía: Conmutación automática al plan de Alto Rendimiento de Windows durante streaming activo y restauración del esquema previo al detenerse.
- Prevención de Saturación del Bus USB: Negociación forzada de compresión MJPEG en webcams físicas DirectShow, reduciendo el consumo del bus en más del 95% para permitir multicámara en un mismo hub.
- Telemetría en Vivo de Alto Rendimiento: Monitor nativo de GPU mediante llamadas ctypes a
nvml.dll(<1 ms), CPU, memoria RAM y ancho de banda de red en tiempo real. - Papelera de Restauración: Panel para listar y restaurar cámaras eliminadas u ocultadas con un solo clic.
| Mecanismo de Seguridad | Implementación Técnica en RTMS |
|---|---|
| Cifrado DPAPI en Reposo | Contraseñas SRT cifradas en disco mediante CryptProtectData de Windows; nunca se almacenan en texto plano. |
| Sanitización Exhaustiva de Logs | Filtro SecretFilter y expresiones regulares que purgan credenciales y tokens de consola y archivos de registro. |
| Aislamiento de Tokens (CWE-598) | Rechazo explícito de tokens por Query String (?token=). Autenticación obligatoria por cabecera X-RTMS-Token o cookie rtms_session. |
| Cabeceras HTTP Estrictas | Middleware con Content-Security-Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff y Referrer-Policy. |
| Frontera de Red Controlada | MediaMTX WHEP vinculado a 127.0.0.1 con acceso proxificado y autenticado a través del backend FastAPI. |
| Escaneo Antivirus Verificado | Distribuciones analizadas contra más de 70 motores en VirusTotal con cero falsos positivos. |
RTMS/
├── api/ # Endpoints REST modulares, dependencias y WebSockets
│ └── routes/ # Subrutas (streams, preview, system, config, health, power)
├── core/ # Motor multimedia FFmpeg, detección DirectShow, Job Objects y SQLite
├── gui/ # Interfaz de usuario (SPA, plantillas Jinja2, estilos y assets SVG)
├── docs/ # Documentación técnica, manuales de usuario y branding
│ ├── adr/ # Architecture Decision Records (ADRs oficiales)
│ └── rfc/ # Solicitudes de Comentarios y Especificaciones Técnicas (RFCs)
├── scripts/ # Scripts de descarga de binarios, sanitización y auditoría
├── tests/ # Suite de pruebas automatizadas con pytest (378 tests)
├── config/ # Plantillas y configuraciones locales
├── main.py # Punto de entrada principal y servidor ASGI
├── run.bat # Lanzador de consola para Windows
├── pyproject.toml # Metadatos del proyecto, configuración de linters y build
└── README.md # Documentación principal
Para auditar y conocer en profundidad los fundamentos de diseño y los protocolos implementados en el núcleo de RTMS:
- 🏛️ Catálogo Oficial de ADRs (Architecture Decision Records): Registros inmutables de las decisiones fundamentales del sistema (adopción de MediaMTX, negociación DirectShow MJPEG/RAW, cifrado AES en SRT, telemetría óptica, distribución UDP Multicast, etc.).
- 📜 Índice de RFCs (Request for Comments): Especificaciones formales detalladas, incluyendo el protocolo de verificación E2E y medición de ping sub-milisegundo (RFC-0001) y la arquitectura de distribución multicámara (RFC-0002).
- ⚙️ Guía de Silicio y Aceleración por Hardware: Optimización de buses USB, asignación de codificadores GPU y mitigación de cuellos de botella.
- 🔧 Guía de Solución de Problemas: Diagnóstico rápido de errores comunes de red y controladores.
# Ejecutar la suite completa de pruebas unitarias e integración (345 tests):
pytest tests/ -v
# Verificación de linter y formateo de código con Ruff:
ruff check .
ruff format --check .
# Verificación estricta de tipos estáticos con Mypy:
mypy core/ api/ main.py
# Auditoría integral de salud del repositorio y catálogo canónico:
python scripts/repo_sanitizer.py --strictDesarrollado y mantenido por Joaquín Yarsky:
- 📧 Contacto Directo: joaquinyarsky@gmail.com
- 🌐 Sitio Web Oficial: fjyarsky.github.io/RTMS
- 🐙 Repositorio GitHub: github.com/FJYarsky/RTMS
Desarrollado y mantenido con dedicación en Argentina
Este proyecto está distribuido bajo la licencia MIT. Consulta el archivo LICENSE para más detalles. Las licencias y avisos de componentes de terceros se encuentran disponibles en THIRD_PARTY_NOTICES.md.
