★ New · feat/fmv

Full Motion Video, geo-locked to the map

Play geospatially-tagged drone and UAS video, extract its embedded MISB KLV metadata, and watch the live sensor footprint track across the terrain as the footage rolls. Bring your own non-standard DJI clips and convert them into STANAG-compliant Full Motion Video — all in a desktop web UI.

STANAG 4609MISB ST 0601RTSP / UDP / SRT DJI → MISBKLV extractionSensor footprintYOLO-E (optional)
What it does

The video knows where it is. Now your map does too.

MISB-compliant motion imagery carries full sensor pose in its KLV metadata — platform lat/lon, frame-center, corner points, slant range, and field of view. 3D Map Explorer reads it in real time and projects the sensor footprint onto the map frame-by-frame.

  • Parses and encodes the full MISB ST 0601 UAS Datalink Local Set (96-tag enum) — parser and encoder are exact inverses, sharing one constants source.
  • Live streams from RTSP / UDP / SRT sources; a background ffmpeg tails the KLV elementary stream and fans packets to a bounded per-stream channel.
  • Footprint computed from corner points, or derived from sensor Horizontal FOV + Slant Range when absent — reports coverage area and Ground Sample Distance (GSD).
  • Range-aware HTML5 <video> serving with full HTTP Range / HEAD support for instant scrubbing.
GET /api/fmv/{id}/telemetry
// MISB ST 0601 — sampled telemetry (SSE)
{
  "frame": 1284,
  "sensorLat": 34.0522,
  "sensorLon": -118.2437,
  "frameCenterLat": 34.0498,
  "frameCenterLon": -118.2511,
  "slantRange": 1240.5,
  "sensorHFOV": 60.0
}
→ footprint polygon drawn on map
DJI → STANAG conversion

Standardize consumer drone footage

Most DJI video isn't MISB-tagged. 3D Map Explorer ingests DJI telemetry from multiple sidecars and muxes it into a STANAG .ts file — so your library plays back geo-locked just like military-grade motion imagery.

📄

SRT sidecars

Densest telemetry source — per-second subtitle logs muxed first when present.

🗂️

Flight logs

AirData CSV and DJI Fly .txt / .dat logs parsed into ST 0601 frames.

🖼️

EXIF / XMP

Fallback telemetry extracted via MetadataExtractor when no log exists.

🔁

Preference order

SRT → flight log → EXIF, so the richest source always wins per clip.

🎬

MPEG-TS muxing

STANAG .ts output with PMT rewrites and KLV injection, mirroring dji-to-misb.

📊

Async jobs

Poll /api/fmv/dji-convert/jobs/{jobId} for conversion progress.

Optional AI detection

YOLO-E object detection on every frame

An optional zero-shot sidecar posts frames to /detect and draws bounding boxes over the video overlay. Detections can be georeferenced against the KLV footprint and broadcast as CoT — video objects become tactical tracks. It degrades gracefully — hidden entirely when disabled or the sidecar is down. GPU (NVIDIA, CUDA 11.8+) recommended. The AI/ML stack →

CapabilityEndpointNotes
Catalog & uploadGET / POST /api/fmvMultipart clip upload or open stream { url }
Clip playbackGET/HEAD /api/fmv/{id}/fileRange-aware bytes for <video>
KLV telemetryGET /api/fmv/{id}/klv · /telemetryFull extracted KLV, cached + sampled
Live telemetryGET /api/fmv/{id}/telemetry/eventsSSE stream synced to playback
DJI conversionPOST /api/fmv/dji-convertVideo + sidecar(s) → STANAG .ts
AI detectionPOST /api/fmv/ai/detectFrame → bounding boxes (optional sidecar)

Web viewer at /fmv/. Optional AI sidecar default AiDetectionServiceUrl = http://localhost:8003 (separate YOLO-E service). KLV scaling mirrors paretech/klvdata.

Turn drone video into geo-intelligence

From raw DJI clips to STANAG-compliant, footprint-tracked motion imagery — without leaving the desktop.