Saltearse al contenido

Cámaras VMS

La pestaña VMS del tile de streams gestiona cámaras IP de terceros — feeds CCTV NVR, cámaras PTZ ONVIF, streams sólo embed de sistemas propietarios. Puedes añadir, probar, editar y eliminar cámaras por misión, y cada cámara tiene un perfil completo de geolocalización + campo de visión para renderizarse como un cono FOV en el mapa.

La cuadrícula de cámaras

Cada cámara vinculada a esta misión se renderiza como una tarjeta que muestra:

  • Miniatura (en directo si el stream se resuelve).
  • Nombre + etiqueta de grupo.
  • Badge del tipo de stream (HLS / MJPEG / MP4 / Embed).
  • Chip de ubicación + rumbo si está geocodificada.
  • Botones Editar (lápiz) y Eliminar (papelera).

Las tarjetas se alimentan de una suscripción a Firestore — cualquier edición que hagas, o cualquier cosa que haga un compañero, aparece en menos de un segundo.

Formulario para añadir cámara

Haz clic en Añadir cámara en la cabecera de la pestaña. Se desliza un panel lateral con el formulario. Todos los campos:

Básicos

  • Nombre — obligatorio. Se muestra en la tarjeta y en el tooltip del cono del mapa.
  • URL — obligatorio. La URL cruda del stream. Para HLS es un .m3u8; para MJPEG es el endpoint motion-JPEG de la cámara; para MP4 es una URL de reproducción directa; para embed es una URL de iframe.
  • Tipo de stream — desplegable: HLS / MJPEG / MP4 / Embed.
  • Habilitada — toggle. Las cámaras deshabilitadas se quedan en la lista pero no renderizan su stream ni el cono FOV.
  • Canal — numérico. Útil cuando múltiples cámaras comparten un esquema de nombres NVR común.
  • Grupo — texto libre (p. ej. “Perímetro norte”, “Cámaras de puerta”).
  • Ubicación — etiqueta de ubicación en texto libre.
  • Notas — texto libre, hasta unos cientos de caracteres.

Los cuatro tipos de stream

TipoQué proporcionasCómo se renderiza
HLSURL de playlist .m3u8Reproducción adaptativa de bitrate vía hls.js. Funciona en cualquier navegador.
MJPEGEndpoint HTTP motion-JPEGFrame a frame vía tag <img>. CPU alta en el visor pero universal.
MP4URL directa MP4 (archivo o live-MP4)Elemento <video> nativo. Baja latencia si tu servidor produce live fragmented MP4.
EmbedURL de iframe arbitraria<iframe> — usado para reproductores web propietarios que no pueden extraerse a un stream directo.

Autenticación

  • Tipo de auth — desplegable: none / basic / token.
  • Usuario + contraseña — se muestra sólo para basic. HTTP Basic Auth.
  • Auth token — se muestra sólo para token. Se adjunta como token Bearer vía la cabecera Authorization (o se añade como query-string si la cámara no puede manejar auth por cabecera; el reproductor prueba ambos).

PTZ

  • PTZ habilitada — toggle. Revela el resto del bloque PTZ.
  • URL PTZ — opcional. Para PTZ controlada por HTTP, la plantilla de URL con placeholders {direction} / {speed}. Para ONVIF, déjala en blanco.
  • Tipo PTZ — desplegable: onvif / http. ONVIF habla comandos SOAP ContinuousMove; http sustituye en la plantilla de URL.
  • Velocidad PTZ — slider 1-10. Se envía con cada comando PTZ.
  • Token de perfil PTZ — sólo ONVIF. La mayoría de cámaras ONVIF exponen un perfil por defecto automáticamente; sólo configura esto si tu cámara tiene múltiples perfiles y quieres apuntar a uno específico.

Ubicación + campo de visión

Rellena esto para renderizar la cámara en el mapa como un cono FOV en el suelo:

  • Lat / Lng — obligatorios para renderizar en mapa.
  • Altura (m) — por defecto 3 m. Altura de la cámara sobre el suelo.
  • Rumbo (grados) — 0-360, por defecto 0. Rumbo de la brújula al que apunta la cámara.
  • Inclinación (grados) — -90 a 0. Pitch hacia abajo; -30 es un ángulo habitual para cámaras de perímetro.
  • FOV horizontal (grados) — 10-180. Ángulo de cono horizontal de la cámara.

Los campos de ubicación ausentes simplemente saltan el renderizado en mapa — la tarjeta y el reproductor siguen funcionando.

El flujo de test-stream

Haz clic en Probar después de rellenar URL + auth. El tile invoca vmsService.checkHealth(fakeCam) y el signal testResult cicla entre estos estados:

EstadoSignificado
noneAún no probado.
livePrueba exitosa — el stream es alcanzable y devuelve vídeo.
auth_error401/403 desde la cámara. Tus credenciales son incorrectas.
offlineConexión rechazada / timeout / fallo DNS. La cámara no es alcanzable.
errorAlgo más falló — URL inválida, codec no soportado, stream corrupto.

El badge de resultado permanece hasta que cambies un campo o pulses Probar de nuevo. Una prueba exitosa no garantiza que la cámara funcione en producción (cortes transitorios de red) pero detecta los casos comunes de error de configuración.

Guardar

Haz clic en Guardar. La cámara se escribe en Firestore bajo missions/{missionId}/vms_cameras/{cameraId}. Aparece en la cuadrícula de cada participante en menos de un segundo y, si los campos de ubicación están rellenos, en el mapa como un cono.

Editar

Haz clic en el icono del lápiz de cualquier tarjeta. El formulario se reabre precargado con todos los valores actuales. Al guardar se actualiza el documento Firestore in-place — el ID de la cámara se preserva para que las flags y cualquier otro documento que la referencie sigan siendo válidos.

Eliminar

Haz clic en el icono de la papelera. Aparece un prompt de confirmación (dos pasos por seguridad). Al confirmar, la cámara se elimina de Firestore y de la cuadrícula de todo el mundo. Eliminar una cámara NO elimina ninguna grabación — estas viven por separado.

Compartir entre misiones

Las cámaras añadidas vía la pestaña VMS viven dentro de la misión. Para compartirlas entre misiones, añádelas a nivel de org vía Admin → Organización → Biblioteca VMS — esas aparecen en cada misión automáticamente.

Reproducción por cámara

Haz clic en una tarjeta para abrir el reproductor VMS dentro del tile. Controles:

  • Reproducir / Pausar.
  • Silenciar / Activar sonido.
  • Pantalla completa.
  • Captura (PNG del frame actual).
  • Flechas PTZ + balancín de zoom si PTZ está configurada y habilitada.
  • Grabación (iniciar / detener) — delega en el servicio VMS la grabación del lado del servidor.

Los comandos PTZ van a través de un proxy de ARGUS (tu navegador no puede hablar ONVIF SOAP directamente). El proxy vive en la superficie /api/vms de argus-api.

Limitaciones conocidas

  • Sin auto-ciclo para streams que pierden la conexión — si el NVR se reinicia, debes hacer clic manualmente en la cámara para forzar un reintento.
  • Sin RTSP directo — sólo HLS / MJPEG / MP4 / Embed. Para cámaras RTSP, pon un transcodificador (p. ej. go2rtc o RTSPtoWeb) delante y apunta ARGUS a la salida HLS.
  • Sin tour multi-cámara de presets — cada cámara se reproduce individualmente; no hay modo “tour de cuatro cámaras secuencialmente”.

Relacionado