Server-side recordings
ARGUS can record TACLINK video tracks server-side and surfaces them alongside DJI dock media in a single unified tile. The streams tile itself does not have a recording button — recording is triggered from specific players (VMS cameras, drone-stream tile) or by mission-level settings. The results all land in the same Video recordings tile for playback and review.
Where recording actually happens
- VMS cameras — the VMS player inside the streams tile has its own recording control. Click the record button; VMS service spins up a local-origin recording for that camera.
- Drone streams — the drone stream tile can record the bound stream. Controlled from inside that tile, not from the streams grid.
- Mission-wide auto-record — commanders can turn on auto-record at mission level (Mission detail → Configure → Recordings → Auto-record). Every active stream is recorded from that point on; stopping the mission finalises them.
- DJI dock media — DJI docks produce media during missions (photos + videos
during flight tasks). They upload automatically; ARGUS writes
dji_mediadocs.
The streams tile does not have its own “record all” button at the tab level.
The Video recordings tile
Add the Video recordings tile to your layout to see everything — stream recordings + DJI dock media, unified. The component merges two sources:
- Stream recordings — Firestore records from
firebaseApi.listMissionStreamRecordings(missionId). Each has type (drone/bodycam/webcam/survcam), trackId, startedOn, finishedOn, duration, author (senderUser), and any bound asset data. - DJI dock media — per-dock list via
djiDockService.listMedia(dockSn). Each has fileName, fileType (photo/video), capturedAt, dockSn, and metadata from the dock.
Both sources are sorted together by timestamp. Each row in the tile shows:
- Source type icon (stream / DJI).
- Thumbnail (if available).
- Name or track label.
- Captured / recorded timestamp.
- Duration (videos only).
- File size (DJI media only).
- Author (stream recordings only).
Playback
Expand a row and an inline <video> player appears. Media URL is resolved
lazily:
- Stream recordings → Firestore Storage URL (short-lived signed URL).
- DJI media → DJI dock’s media-URL service (similarly short-lived).
Click play. Standard HTML5 video controls. DJI photos render as <img>
instead.
Trimming
Not implemented in the current build. You can preview the recording and take a screenshot, but there’s no in-app trim editor. If you need a trimmed export, download the full file and trim externally.
Deleting
Commander-only:
- Stream recordings — trash icon → confirmation with 3-second cooldown →
firebaseApi.deleteStreamRecording(). Doc is removed; the underlying storage file is garbage-collected asynchronously. - DJI dock media — deletion is currently unsupported. DJI’s cloud API doesn’t cleanly expose media-delete without a side-channel. The media stays in ARGUS storage until retention kicks in.
Retention
Default retention for stream recordings + DJI media is 90 days (configurable per org under Admin → Organisation → Defaults). Past the retention window, records are soft-deleted for another 30 days then hard-purged.
File format
- Stream recordings: WebM (VP8/Opus) or MP4 (H.264/AAC) depending on the source track codec. TACLINK typically produces H.264 so MP4 is the common case.
- DJI media: whatever the drone writes — usually MP4 for video, JPG for photo.
Codecs are baked in when the recording starts; there’s no in-flight transcode.
Auto-record + mission completion
If the mission has Auto-record enabled:
- Every stream that appears in the LiveKit room starts recording on join.
- Streams that end mid-mission produce a short recording capped at that point.
- On mission completion, all still-recording tracks are finalised within a 60-second grace window, then sealed.
Storage paths
- Stream recordings land in your org’s S3 media bucket under
missions/{missionId}/recordings/{trackId}/{startedOn}.mp4(or.webm). - DJI media land in a DJI-scoped prefix; DJI → media covers the upload pipeline.
Known limitations
- No trim / edit — full file only.
- No DJI delete — retention handles cleanup; manual delete not supported.
- No per-camera auto-record for VMS — auto-record is stream-wide, not per-camera.
- Single-track recording only — you can’t multi-track (video + separate audio channel) in the current build.
Related
- Streams overview
- Video recordings tile — the tile itself.
- DJI media — DJI-specific media pipeline.
- Data retention — how long recordings live.