Skip to content

Camera stream tile

The Camera stream tile is a dedicated full-tile view for a single non-drone video source — a bodycam, phone camera, worn camera, or any other non-aircraft track published into the TACLINK room. It’s distinct from both the streams grid (which shows everything) and the drone-stream tile (which handles aircraft).

When to use it

Use this tile when you want a dedicated region of the layout for an on-person camera and don’t need the drone-specific overlays (HUD, sensor fusion, detection boxes). Typical set-up: one region has the drone-stream tile on the mission’s primary aircraft; another has the camera-stream tile on the incident commander’s bodycam.

Binding to a peer + track

The tile takes two @Inputs:

  • peerId — the LiveKit participant identity of the source.
  • trackId — the video track within that peer. Defaults to VIDEO_CAMERA_TRACK_ID (the conventional track ID for non-drone cameras).

Set them in the settings drawer’s Tiles section — the dropdown lists every active non-drone track and assigns both fields in one click.

Once bound, the tile pulls stream.stream from statusSig().video.streams matching the peer+track and renders it with the appVideoSrcObject directive (which sets the srcObject property on the <video>).

Cycling between non-drone sources

If you have multiple bodycams + phone cameras + worn cameras running, the tile shows chevron buttons to cycle only non-drone streams. Drone streams are excluded from the cycle so the tile never accidentally rebinds to a drone.

  • Prev / Next buttons in the tile header.
  • Position indicator N / total shows where you are in the cycle.
  • Wrap-around at ends.

When the peer changes via cycling, the tile emits a peerChanged event so the parent can persist the new binding — this is how your selection survives a refresh.

Controls in the tile

  • Peer label — shows the speaker’s display name, with an optional secondary label (callsign) below.
  • Stream type badge — “Camera” or “Bodycam” (depending on what the source published).
  • Debug latency (debug mode only) — milliseconds from RTCPeerConnection.getStats(), polled every 2 seconds.

There are no play/pause/mute controls on the tile itself — the video is autoplay muted by design, and muting/volume should happen at the system level (you’re mixing operator audio separately through the PTT widget, not the camera audio).

Differences from the VMS camera player

AspectCamera stream tileVMS camera player
SourceWebRTC peer (live mission track)IP camera URL (HLS / MJPEG / MP4 / Embed)
StorageNot stored — pure liveCan be server-recorded
GeolocationFrom peer’s mapped positionFrom the VMS camera’s configured lat/lng
PTZNoYes if ONVIF / HTTP PTZ configured
Use caseOperator-worn / phone / bodycamFixed-installed CCTV

Differences from the drone stream tile

AspectCamera stream tileDrone stream tile
OverlaysNone — plain videoHUD, AI detections, AR, SAM, SVS, flags, joystick overlay
CyclingNon-drone streams onlyDrone streams only, including secondary lens tracks
ControlsNoneLens / quality / camera / PIP / record
TransportPure TACLINKTACLINK or DJI Cloud

Known limitations

  • Single track only — there’s no picture-in-picture for a second camera on the same peer (rare use case, but notable if you have a helmet-cam that publishes two angles simultaneously).
  • No recording from the tile — record at the mission level or from the VMS side if the source is a fixed camera.
  • No snapshot button — take screenshots via OS-level screenshot tools.