Servidor de video multicámara de baja latencia para Windows con ingesta desacoplada vía MediaMTX, SRT y UDP.
Sitio Web Oficial • 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 baja latencia (<100 ms) hacia OBS Studio, vMix o VLC Media Player.
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 para descargar el paquete portable oficial compilado (rtms.exe), consultar la guía de inicio y revisar la compatibilidad de codificadores por hardware.
Descarga el archivo .zip desde GitHub Releases, descomprímelo en cualquier carpeta y ejecuta directamente rtms.exe. No requiere instalación 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
├── scripts/ # Scripts de descarga de binarios, sanitización y auditoría
├── tests/ # Suite de pruebas automatizadas con pytest (186 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
# Ejecutar la suite completa de pruebas unitarias e integración (186 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 en Argentina por un argentino
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.