Skip to content

Video and replay

Open Video and choose a feed, or select an aircraft with a camera. Its module publishes the camera stream to MediaMTX. Terminal requests authorized WebRTC signaling from Mainframe, then receives media from MediaMTX. Camera, lens, zoom, gimbal, and recording controls appear only when the provider supports them and your account has access.

The Video Wall shows several feeds together. More viewers and higher bitrates increase server egress. Hidden panels can suspend browser-side streams; continuous recording is governed by Mainframe’s recording policy, not whether a panel is visible.

Vanagas phone feeds work without a current GPS fix. The phone camera can include microphone audio; HDMI and IP camera inputs appear separately when available. Selection shows the last known location and its age. A fresh heartbeat updates presence without making an old location look current. Each feed has its own recording history and can be selected while replaying.

Every feed can carry overlays: drawings on the picture in this browser only. They never enter a capture, an export or a recording. Press o to hide or show them all (the set you chose is kept), open the Overlays menu in the Video toolbar or Layout → Video overlays to switch one at a time, and see Terminal → Settings → Video for the whole list.

Overlay Shows
Guides a centre cross and thirds ticks (style in Settings → Video)
Horizon the horizon line and a ladder of depression angles every 10°
Compass heading ticks along the top edge with their labels below, fading out toward the thirds; a caret at the edge points at the exact heading; the gimbal caret, the bearing to the home site (H) and the wind-from direction (W) on their own row
Telemetry callsign and state, lens and zoom, gimbal pitch, time; altitude, vertical and ground speed, heading; battery, remaining time, satellites, link; the aircraft’s MGRS
Ground scale a square on the ground around the aim point, drawn as the tilt deforms it (a trapezoid unless the camera looks straight down), its side sized to the picture and printed in metres; under the cross, the range from the aircraft to the aim point (straight down, the height), then the aim point’s MGRS and the ground sample distance
Markings pins, lines, areas, circles, the border and the geofence where they lie in the picture, with names and distances; they fade from 3 km and are gone at 5 km; a kind hidden on the map is hidden here, and each Video panel chooses its own list under Overlays → Markings (Select all, Deselect all, one switch per marking; the list is saved with the layout)
Route the assigned mission’s track, its waypoints and the next one with its distance, or an arrow at the frame edge toward it; never faded
Targets active detections at their position with class, confidence and distance; the tracked one ringed and never faded, the others gone beyond 5 km
Traffic other airborne aircraft with callsign, height difference and distance
Home the home site, or an arrow toward it, with the distance

Every overlay below Telemetry needs the camera’s field of view. A payload that reports it is used as is; one that does not (an observed system, a controller that never sends the calibration) gets it from a catalogue of known cameras, chosen from the device type the module saw or the airframe’s model, at 1× divided by the current zoom. When neither is known the chip says AR · no camera geometry · Identify airframe: open Identify airframe on the aircraft (Fleet row menu, or the Selection panel) and set Camera to the payload it carries, or type the model so the catalogue can match it. The Telemetry panel’s FOV row says where its value comes from (catalogue, declared, or nothing for the payload’s own report). Recordings follow the same rule: the profile is the airframe’s, so assigning it makes yesterday’s replay drawable too.

Ground positions assume level ground at the take-off elevation: on sloping terrain, distances and placements drift the further a point is from the aircraft and the shallower the camera looks. Overlays that need the camera (everything below Telemetry) wait for a position, gimbal angles and a field of view; until then a chip in the corner says what is missing (AR · no gimbal angles). On small tiles such as the Video Wall only glyphs draw.

Video usually arrives a little later than telemetry. If drawn pins trail or lead the picture while the camera pans, set Latency compensation in Settings → Video to the delay you see; the overlays then use the pose from that long ago.

A drawn pin, target or aircraft is selectable: click it to select, modifier-click to add it to the selection. Right-click the picture for Look here, Pin here…, Task nearest here, Send Location to Chat and Copy MGRS at that spot on the ground; the menu ends with its MGRS. In replay the overlays follow the playhead’s telemetry; markings and missions are always the current ones.

Drag the timeline bar under the workspace to choose an earlier time, or click an event or alert row to jump to its moment; the bar’s 1H7D buttons set how much history it shows. The map, telemetry, charts, and recorded video follow the replay playhead. The menubar clock turns amber and gains the transport: step back and forward, pause, the replay rate, and Go live. Return to live before sending commands.

Right-click the clock to send the moment it shows to a chat group (Send Time to Chat: now when live, the playhead in review) or to Copy Time; right-click the timeline bar for the same on the moment under the cursor, plus Scrub Here. A time chip in a message scrubs the console to that moment when clicked.

A recording becomes available after MediaMTX closes a segment and the media indexer indexes it for browser seeking, validates, uploads, and registers it. Recent review uses MediaMTX’s native HLS buffer before the one-minute archive segment closes. The buffer holds 600 segments; source keyframes determine their duration. A missing interval is a gap; the player should not pretend that unrelated footage covers it.

In replay the Video toolbar gains a scissors button between Overlays and Capture. It opens New Video Clip with From set to the playhead, in UTC. Pick To (the +30 s+15 min chips count from From), watch the Recorded row say how much of the range the recording covers, keep Telemetry on to burn the readout into the picture, and press Generate Clip.

Mainframe renders the clip from the recorded segments: it cuts on the exact frame, draws the same telemetry readout the Telemetry overlay shows, encodes one H.264 MP4 and stores it beside captures in the bucket. One clip renders at a time; up to eight wait. A range that ends in the last minute waits for its segment to be indexed. Gaps in the recording are skipped and counted.

The clip appears in the Captures panel at once with its progress, plays there when ready, downloads as V03-20260918-120344Z-3m00s.mp4, and takes notes like a still. Deleting a clip offers Undo for six seconds; its file goes ten minutes later. The requesting browser is told when the clip is ready or has failed; a failed row offers Retry. The longest clip and how long clips are kept are Mainframe settings under Media.

Captures work in replay too: P, the Capture button, the palette and the controller take the frame at the playhead, including the last minute the indexer has not delivered yet.

Mainframe’s media index ties each segment to an entity and a time range. The actual MP4 object lives in the private bucket. Access checks still apply when replaying it. Keeping the bucket and database together is essential for recoverable history.

The staging configuration keeps media for 30 days and state history for 90 days. This means older telemetry can remain after its video has expired. Ask the deployment administrator before changing retention because continuous multi-camera recordings grow quickly.

If live video works but replay does not, check the indexer’s failed segments, recent manifest timestamp, and S3 uploads. If signaling succeeds but live playback fails, check the MediaMTX WebRTC candidate and UDP reachability.

Live feeds start muted. Use Audio off / Audio on in the feed to listen. AAC input is converted to Opus only while WebRTC viewers are present; recordings retain the original audio.

Chat and voice use the same playhead as telemetry and video. Communication panels become read-only in replay. Deleted content remains deleted at historical times; restored panels show a missing-resource placeholder rather than switching to a different group.