Skip to content

Video recordings

The Video Recordings tile is the in-mission viewer for every piece of video and still media tied to the current operation. It merges two distinct sources into one sortable table:

  • TACLINK stream recordings — anything recorded off a live peer (drone, bodycam, webcam, survcam) captured through the TACLINK media pipeline.
  • DJI dock media — photos and videos fetched from every DJI dock assigned to the operation (dockSns input), via the dock media API.

Rows are merged, sorted newest-first, and paginated 10 / 25 / 50 per page.

Columns

ColumnWhat it shows
TypeSource badge with colour. DRONE (cyan), BODYCAM (purple), WEBCAM (green), SURVCAM (orange), DJI PHOTO / DJI VIDEO (amber). Each row also carries an icon — flight, videocam, linked_camera, photo_camera.
OperatorStream rows: asset chip with the sender’s name, callsign, and colour. DJI rows: Dock XXXX (last 4 of the serial) in amber.
RecordedTime (HH:mm:ss) plus a short date underneath (dd MMM).
Duration / SizeStream videos: duration pill (1m 23s). DJI videos: file size — DJI does not report duration in the listing, so a dash replaces the time. DJI photos: file size (4.2 MB).
StatusProcessing badge on stream rows — PROCESSING, REDACTED, FAILED.
ActionsExpand chevron.

Filtering the list

The header has chip toggles: All, Drone, Webcam, Bodycam, Survcam, DJI Photo, DJI Video. The search magnifier on the right opens an inline text search that matches operator name, track id, DJI file name, and DJI dock serial.

Inline playback

Click a row to expand. The detail panel resolves the media URL lazily:

  • Stream recordings prefer recordingUrl, otherwise fall back to a presigned S3 URL for s3Bucket / s3Key. If the recording was redacted (status === 'redacted' with s3KeyRedacted populated), a REDACTED / ORIGINAL version toggle appears and REDACTED is selected by default so blurred faces and plates never leak accidentally. Click ORIGINAL to request the un-redacted copy (permissioned).
  • DJI media resolves via the dock service’s getMediaUrl call, which streams through the cloud.

Photos render inline in an <img>; videos render in an HTML <video controls> with preload="metadata". A DOWNLOAD link opens the resolved URL with the download attribute set.

Metadata on expand

Stream rows list: Started, Finished, Duration, Track ID, Asset (drone recordings only), and Operator with callsign colour dot. DJI rows list: File, Dock, Captured, Size, and — if the file carries geolocation — Position as lat, lng @ altitude. Rows tied to a flight task also show Task.

Deleting recordings

Only the commander of the operation sees a delete control in the expanded panel — detected by comparing the signed-in UID against the operation’s commanderUid. Deletion is two-click: the first click arms the button (Confirm delete), a 3-second timer resets it, and the second click calls deleteStreamRecording. That removes the Firestore entry and schedules asynchronous garbage collection of the S3 object. There is no soft-delete — once confirmed, the object is gone.

DJI media deletion is not supported from ARGUS. The dock is the system of record, so retention is managed from DJI Cloud. The delete button is suppressed on DJI rows.

Trim and clip export (aspirational)

Trimming a clip to a sub-range before download or report attachment is not yet implemented. Today, download the whole file and trim in your editor of choice. A trim UI is on the roadmap and will write a trimmed MP4 back to S3 as a new object without touching the original.