Guía de instalación y configuración de obs-multisite
Estado: Alpha v0.1.31-alpha | Licencia: GPLv3 | OBS Studio requerido: 32.2.2 o superior
⚠️ Advertencia importante
Este software está en estado alpha. Aunque ha pasado pruebas de fiabilidad (6 horas continuas, 3.661 segmentos, >15 GB, 0 fallos), no ha transmitido ningún evento real de congregación.
Requisito obligatorio: Ejecutar siempre con un plan de contingencia probado y una persona técnica disponible durante el primer despliegue. Tratar un ensayo exitoso como necesario, no suficiente.
📋 Prerrequisitos
Hardware y software mínimo
| Componente | Requisito |
|---|---|
| OBS Studio | 32.2.2 o superior (Windows, macOS Apple Silicon, Linux) |
| Campus satélite sin PC | Raspberry Pi 5 con Raspberry Pi OS |
| Almacenamiento | Bucket S3 compatible (Cloudflare R2, AWS S3, Backblaze B2, Wasabi, MinIO) |
| Red | Conexión outbound HTTPS funcional (si una laptop carga páginas web, probablemente funcione) |
Configuración del bucket S3 (obligatorio antes de empezar)
# Configurar reglas de ciclo de vida en el console del proveedor
# events/ - retención configurable (default: 7 días)
# rooms/ - retención configurable (default: 7 días)
Importante: Nada en este proyecto elimina archivos automáticamente. Debes configurar las reglas de ciclo de vida manualmente en tu console de almacenamiento.
🚀 Instalación paso a paso
Opción A: Campus satélite sin PC (Raspberry Pi 5)
# En una Raspberry Pi 5 fresca con Raspberry Pi OS
curl -fsSL --retry 5 https://raw.githubusercontent.com/stageaudioworks/obs-multisite/main/scripts/player/install.sh | sudo bash
Verificación: Después de la instalación, el sistema debe mostrar:
- HDMI out activo
- Página de control en navegador accesible
- Timeslipping configurado
- AES67 disponible en red (opcional)
Opción B: Ambos extremos con OBS Studio
- Descargar plugin desde Releases:
- Ir a https://github.com/stageaudioworks/obs-multisite/releases
- Descargar el último release para tu plataforma (Windows: .zip/.exe, macOS: .dmg/.pkg, Linux: .tar.gz)
- Instalar en OBS Studio:
- Abrir OBS Studio
- Ir a Herramientas → Plugins
- Buscar "Multisite Encoder" (campus principal) y "Multisite Decoder" (campus satélite)
- Instalar ambos plugins desde el archivo descargado
⚙️ Configuración del campus principal (Encoder)
- Configurar dock Multisite Encoder:
- Abrir OBS Studio en el campus principal
- Ir al dock Multisite Encoder
- Introducir detalles del bucket:
- Provider: Cloudflare R2 / AWS S3 / Backblaze B2 / Wasabi / MinIO
- Bucket name: [tu-bucket-name]
- Region: [tu-region]
- Access key ID: [tu-access-key]
- Secret access key: [tu-secret-key] - Seleccionar feed name (ej:
main-campus-feed) - Presionar Go live
- Verificar estado del encoder:
El dock debe mostrar:
- ✅ Upload status: healthy / low / almost-full
- Lista de segmentos en cola local
- Tamaño total de datos pendientes
⚙️ Configuración del campus satélite (Decoder)
- Configurar dock Multisite Decoder:
- Abrir OBS Studio en cada campus satélite
- Ir al dock Multisite Decoder
- Introducir los mismos detalles del bucket que el encoder
- Añadir Multisite Source (Decoder) para el mismo feed name
- Presionar Load event
- Presionar Play
- Bloquear el evento:
Crítico: Presionar Lock the event para evitar clics accidentales durante el servicio.
✅ Comprobación posterior
Checklist de verificación
- [ ] Encoder muestra "healthy" en el dock
- [ ] Decoder ha cargado el evento correctamente
- [ ] Video y audio sincronizados (offset entre 0.005s y 0.021s)
- [ ] Todos los tracks de audio visibles como fuentes separadas
- [ ] Página de control remota accesible en ambos lados
- [ ] Buffer profundo cargado antes del inicio de reproducción
Comandos de diagnóstico
# Verificar segmentos en el bucket
aws s3 ls s3://tu-bucket/events/{feed-name}/ --recursive
# Verificar manifest.json
curl https://tu-bucket.s3.amazonaws.com/events/{feed-name}/manifest.json
# Verificar live.json del room
curl https://tu-bucket.s3.amazonaws.com/rooms/{room-id}/live.json
🔄 Actualización, rollback y backup
Backup de configuración
# Exportar configuración del encoder
cp ~/.config/obs-multisite/encoder-config.json /backup/encoder-$(date +%Y%m%d).json
# Exportar configuración del decoder
cp ~/.config/obs-multisite/decoder-config.json /backup/decoder-$(date +%Y%m%d).json
Actualización de plugin
- Descargar nuevo release desde GitHub Releases
- Cerrar OBS Studio completamente
- Reemplazar archivos del plugin en la carpeta de plugins
- Reiniciar OBS Studio
- Verificar que el dock carga correctamente
Rollback de emergencia
# Restaurar configuración anterior
cp /backup/encoder-YYYYMMDD.json ~/.config/obs-multisite/encoder-config.json
cp /backup/decoder-YYYYMMDD.json ~/.config/obs-multisite/decoder-config.json
🐛 Errores habituales y soluciones
| Error | Causa probable | Solución |
|---|---|---|
| "Upload failed" | Bucket no accesible | Verificar credenciales S3, reglas de ciclo de vida activas |
| "Decoder cannot find event" | Feed name incorrecto | Asegurar que encoder y decoder usan el mismo feed name |
| Audio desincronizado | Codec incompatible | Usar H.264 (x264) en lugar de HEVC para máxima compatibilidad |
| "Buffer almost full" | Disco local lleno | Limpiar caché o aumentar espacio disponible |
| "Timeslipping failed" | Red inestable | Verificar conexión outbound HTTPS, aumentar buffer si es necesario |
🔒 Seguridad
Configuración recomendada
- Red: Solo trusted network (no password, no TLS para la página de control)
- Credenciales S3: Usar credentials con permisos mínimos necesarios (S3:GetObject, S3:PutObject)
- HTTPS outbound: No requiere puertos entrantes ni IP estática
- Firewall: Solo permitir outbound HTTPS al bucket S3
Mejores prácticas
- Rotar credenciales S3 periódicamente
- Usar buckets privados (no público) para el almacenamiento
- Configurar políticas de IAM restrictivas en AWS/Cloudflare
- Mantener OBS Studio actualizado a la última versión estable
❓ FAQ basada en evidencia
¿Funciona con conexiones móviles o satélite?
Sí. El diseño está pensado para conexiones que derrotarían un stream directo: mobile data, LEO satellite, consumer fibre, y redes detrás de carrier-grade NAT. Si una laptop puede cargar una página web, probablemente pueda enviar/recibir un evento.
¿Cuál es la latencia?
Minutos intencionales. El diseño prioriza fiabilidad sobre latencia. Un campus puede mantener el evento en buffer para su propio welcome y luego reanudar exactamente donde se pausó, o permanecer un número fijo de minutos detrás del live. La latencia es el precio que se paga por la fiabilidad.
¿Cuánto consume ancho de banda?
~2.7 GB/hora a 6 Mbps. Cada campus lee los mismos objetos del mismo bucket, por lo que el coste es la política de egress de tu proveedor. Cloudflare R2 no cobra egress.
¿Puedo usarlo sin servidor central?
Sí. Arquitectura sin servidor central ni puertos entrantes. Operando exclusivamente sobre HTTPS outbound. El bucket es un almacén de archivos "tonto", y toda la inteligencia está en los bordes.
¿Cuántos tracks de audio soporta?
Hasta 6 pistas. El programa mix, micrófonos en sus propias pistas, click para la banda. Viajan en el mismo fragmento que el video, por lo que no pueden desviarse entre sí ni del video.
¿Es compatible con OBS Studio 32.2.1?
No. Se requiere OBS Studio 32.2.2 o superior. Verificar versión: Herramientas → Acerca de OBS Studio.
🔗 Enlaces internos contextuales
- Ficha oficial obs-multisite en HostingByte
- Guía del operador (OPERATOR.md)
- Elegir campus satélite (SATELLITE.md)
- AES67 audio en red
- Streaming público (STREAMING.md)
- Estado actual y gaps conocidos
- Roadmap
📊 Especificaciones técnicas
| Parámetro | Valor |
|---|---|
| Estado | Alpha v0.1.31-alpha |
| Licencia | GPLv3 o posterior |
| Pruebas | 6 horas continuas, 3.661 segmentos, >15 GB, 0 fallos |
| Latencia | Minutos (intencional) |
| Ancho de banda | ~2.7 GB/hora a 6 Mbps |
| Audio tracks | Hasta 6 pistas por fragmento CMAF |
| Códigos soportados | H.264 (x264), HEVC (NVENC, QuickSync, AMF) |
| Plataformas | Windows, macOS (Apple Silicon), Linux, Raspberry Pi 5 ARM64 |
📚 Fuentes verificadas
Última actualización: 2026-10-05 | Desarrollado por Stage Audio Works