El problema
Un puesto de monitoreo necesita ver varias cosas a la vez: transmisiones, cámaras y paneles. El obstáculo no es la cuadrícula, sino que cada origen se comporta distinto.
| Diferencia | Ejemplo |
|---|---|
| La URL que pega el usuario no es la que se puede incrustar | El enlace que se comparte y el de reproducción embebida son distintos |
| Cada plataforma tiene su propia forma de reconocerse | Dominios, subdominios y variantes cortas |
| No todas permiten lo mismo una vez cargadas | Algunas dejan controlar volumen real; otras solo silenciar |
| Algunas no son web en absoluto | Una cámara IP habla un protocolo que el navegador no entiende |
La salida fácil es una cadena de condicionales por plataforma dentro de la vista. Funciona hasta la cuarta fuente, y a partir de ahí cada añadido toca código que ya funcionaba.
El contrato de fuente
Cada plataforma implementa el mismo contrato mínimo. Son dos funciones y una declaración.
Añadir una fuente nueva es escribir un archivo que cumpla el contrato y registrarlo. No se toca la cuadrícula, ni la persistencia, ni las demás fuentes.
Resolución y comodín
Al añadir una URL, el gestor recorre los adaptadores en orden: los específicos primero y el genérico al final.
Cuando ningún adaptador reconoce la URL, el error la incluye. Parece menor, pero en una aplicación donde el usuario pega enlaces de fuentes muy distintas, un «no se pudo cargar» sin decir cuál obliga a probar de a una para encontrar la que sobra.
Capacidades declaradas
Esta es la parte del diseño que evita la peor clase de error de interfaz: un control que existe y no hace nada.
| Tipo de fuente | Volumen real | Control de reproducción |
|---|---|---|
| Plataformas de vídeo con API de reproductor | sí | sí |
| Plataformas con incrustación restringida | no | no |
| Cámara IP | no | no |
La alternativa habitual es ofrecer el control en todas partes y confiar en que la plataforma lo acepte. Cuando no lo acepta, el deslizador se mueve y el volumen no cambia — y el usuario concluye que la aplicación está rota, no que la plataforma no lo permite.
Al declarar la capacidad, la interfaz puede no mostrar el control donde no funciona. Es menos funcionalidad aparente y más confianza real.
Cámaras IP
Una cámara de seguridad transmite en un protocolo que ningún navegador reproduce de forma nativa. Es la fuente que rompe el supuesto de «todo es una página web».
Esa separación es la que permite que los adaptadores se prueben sin levantar nada: son funciones que reciben una cadena y devuelven otra.
Perfiles y persistencia local
La configuración vive en el equipo, en una base de datos local. Tres tablas: perfiles, fuentes y ajustes.
Un perfil es una disposición guardada: qué fuentes, en qué posición de la cuadrícula y con qué ajustes. Cambiar de perfil reconfigura el puesto entero, que es la operación real de un centro de monitoreo — no se añaden fuentes de a una cada mañana.
No hay registro, ni sincronización, ni datos en un servidor ajeno. Para una herramienta de escritorio que muestra cámaras de seguridad, que la lista de cámaras no salga del equipo no es una limitación: es el comportamiento correcto.
La aplicación incluye además gestión de licencia y de nivel de funcionalidad, control de ventanas flotantes siempre visibles, icono en la bandeja del sistema y grabación.
Arquitectura y verificación
Aplicación de escritorio con los tres procesos separados que impone la plataforma, y la lógica concentrada donde puede probarse.
Dónde están las pruebas
De las trece suites, ocho cubren los adaptadores — una por fuente más el gestor. Es la decisión correcta: los adaptadores son el punto donde entra lo impredecible, que es una URL escrita por una persona. El resto cubre el repositorio, la validación compartida y los servicios de ajustes, licencia y nivel.
La puerta de calidad corre el chequeo de tipos y las pruebas en cada cambio.