Grabaciones del lado del servidor
ARGUS puede grabar pistas de vídeo TACLINK del lado del servidor y las expone junto con los medios del DJI dock en un único tile unificado. El propio tile de streams no tiene un botón de grabación — la grabación se dispara desde reproductores específicos (cámaras VMS, tile de drone-stream) o desde ajustes a nivel de misión. Todos los resultados acaban en el mismo tile de Grabaciones de vídeo para reproducción y revisión.
Dónde ocurre realmente la grabación
- Cámaras VMS — el reproductor VMS dentro del tile de streams tiene su propio control de grabación. Haz clic en el botón de grabación; el servicio VMS lanza una grabación de origen local para esa cámara.
- Streams de drone — el drone stream tile puede grabar el stream enlazado. Controlado desde dentro de ese tile, no desde la cuadrícula de streams.
- Auto-grabación a nivel de misión — los comandantes pueden activar la auto-grabación a nivel de misión (Detalle de misión → Configurar → Grabaciones → Auto-grabar). Cada stream activo se graba desde ese punto en adelante; detener la misión las finaliza.
- Medios del DJI dock — los DJI docks producen medios durante las
misiones (fotos + vídeos durante las tareas de vuelo). Se suben
automáticamente; ARGUS escribe documentos
dji_media.
El tile de streams no tiene su propio botón “grabar todo” a nivel de pestaña.
El tile de Grabaciones de vídeo
Añade el tile Grabaciones de vídeo a tu layout para ver todo — grabaciones de stream + medios del DJI dock, unificados. El componente fusiona dos fuentes:
- Grabaciones de stream — registros de Firestore desde
firebaseApi.listMissionStreamRecordings(missionId). Cada uno tiene tipo (drone/bodycam/webcam/survcam), trackId, startedOn, finishedOn, duración, autor (senderUser) y cualquier dato de asset vinculado. - Medios del DJI dock — lista por dock vía
djiDockService.listMedia(dockSn). Cada uno tiene fileName, fileType (photo/video), capturedAt, dockSn y metadatos del dock.
Ambas fuentes se ordenan juntas por timestamp. Cada fila del tile muestra:
- Icono del tipo de fuente (stream / DJI).
- Miniatura (si está disponible).
- Nombre o etiqueta de pista.
- Timestamp de captura / grabación.
- Duración (sólo vídeos).
- Tamaño de archivo (sólo medios DJI).
- Autor (sólo grabaciones de stream).
Reproducción
Expande una fila y aparece un reproductor <video> en línea. La URL del
medio se resuelve de forma perezosa:
- Grabaciones de stream → URL de Firestore Storage (URL firmada de corta duración).
- Medios DJI → servicio de URL de medios del dock DJI (igualmente de corta duración).
Haz clic en reproducir. Controles de vídeo HTML5 estándar. Las fotos DJI se
renderizan como <img> en su lugar.
Recorte
No implementado en la build actual. Puedes previsualizar la grabación y hacer una captura, pero no hay editor de recorte in-app. Si necesitas una exportación recortada, descarga el archivo completo y recórtalo externamente.
Eliminar
Sólo comandante:
- Grabaciones de stream — icono de papelera → confirmación con cooldown
de 3 segundos →
firebaseApi.deleteStreamRecording(). El documento se elimina; el archivo de almacenamiento subyacente se recoge por el garbage collector de forma asíncrona. - Medios del DJI dock — la eliminación actualmente no está soportada. La API cloud de DJI no expone limpiamente borrar medios sin un canal lateral. Los medios permanecen en el almacenamiento de ARGUS hasta que se activa la retención.
Retención
La retención por defecto para grabaciones de stream + medios DJI es de 90 días (configurable por org en Admin → Organización → Valores por defecto). Pasada la ventana de retención, los registros se eliminan suavemente durante otros 30 días y luego se purgan definitivamente.
Formato de archivo
- Grabaciones de stream: WebM (VP8/Opus) o MP4 (H.264/AAC) dependiendo del codec de la pista fuente. TACLINK típicamente produce H.264, por lo que MP4 es el caso común.
- Medios DJI: lo que el drone escriba — normalmente MP4 para vídeo, JPG para foto.
Los codecs se fijan cuando se inicia la grabación; no hay transcodificación en vuelo.
Auto-grabación + finalización de misión
Si la misión tiene Auto-grabación habilitada:
- Cada stream que aparece en la sala LiveKit comienza a grabarse al unirse.
- Los streams que terminan a mitad de misión producen una grabación corta limitada a ese punto.
- Al completar la misión, todas las pistas aún en grabación se finalizan dentro de una ventana de gracia de 60 segundos y luego se sellan.
Rutas de almacenamiento
- Las grabaciones de stream aterrizan en el bucket S3 de medios de tu org bajo
missions/{missionId}/recordings/{trackId}/{startedOn}.mp4(o.webm). - Los medios DJI aterrizan en un prefijo con ámbito DJI; DJI → medios cubre el pipeline de subida.
Limitaciones conocidas
- Sin recorte / edición — sólo archivo completo.
- Sin borrado DJI — la retención maneja la limpieza; borrado manual no soportado.
- Sin auto-grabación por cámara para VMS — la auto-grabación es a nivel de stream, no por cámara.
- Sólo grabación de una pista — no puedes multi-pista (vídeo + canal de audio separado) en la build actual.
Relacionado
- Resumen de streams
- Tile de grabaciones de vídeo — el tile en sí.
- Medios DJI — pipeline de medios específico de DJI.
- Retención de datos — cuánto tiempo viven las grabaciones.