Skip to Content
This documentation is provided with the HEAT environment and is relevant for this HEAT instance only.
RunnersVideo UtilsAdaptive Video Encode Node

adaptive-video-encode (Transform Node)

The Adaptive Video Encode node catalogues the video streams present in a capture. Despite the name, it does not encode anything today: it was designed to feed an HLS or DASH ladder that was never built, and what it produces is a JSON catalogue of the StreamComponent video sources it found (stream names, codec, dimensions, byte counts, and a bounded sample of chunk timings).

Use it to find out what video a capture holds, for example before configuring video-atlas-encode (which streams exist, how large they are, whether a headset was worn). For playback in the dashboard use the atlas node.


What it does

  • Reads every parent capture blob, one at a time, so memory stays bounded on large sessions. Nested payload bytes are released as soon as each frame has been parsed.
  • For each StreamComponent video source it records name (for example eye.left), codec, width, height, totalBytes, and up to 200 chunk entries with their byte sizes and start offsets in milliseconds from the first packet seen (startMs, endMs).
  • Publishes the catalogue as its own JSON output and pushes the same document onto a child input node named by metadataInputNodeName (default video-metadata), so other branches of the template can read it without a direct graph edge. A stub marker goes to the node named by streamsInputNodeName (default video-streams); it was reserved for ladder segments and carries no media.
  • When no video source is found it still publishes a pending placeholder catalogue with a note, so downstream nodes can distinguish “no video” from “not run”.

Configuration schema

PropertyTypeDefaultDescription
dataSourceNamestringrunner default storeObject store for the catalogue.
metadataInputNodeNamestringvideo-metadataChild input node that receives the catalogue JSON.
streamsInputNodeNamestringvideo-streamsChild input node that receives the placeholder streams marker.
dedupeByContentHashbooleantrueRecorded on the catalogue; intended for idempotent partial runs of the ladder that does not exist yet.

Output shape

{ "artefactKind": "adaptive-video-catalogue", "status": "partial", "durationMs": 1620000, "note": "Catalogued 40320 VideoSource observation(s) across 2 stream(s) ... Chunk metadata only; HLS/DASH ladders not built yet.", "streams": [ { "name": "eye.left", "codec": "H264", "width": 1088, "height": 1072, "totalBytes": 27200000, "chunks": [{ "startMs": 0, "endMs": 0, "bytes": 13100 }, { "startMs": 13, "endMs": 13, "bytes": 12870 }], "hlsManifestUrl": null, "dashManifestUrl": null } ], "stats": { "payloadBytes": 2134000000 } }

status is partial when at least one video source was seen and pending when none was (the placeholder case). hlsManifestUrl and dashManifestUrl are always null. The VideoPlayback component recognises this document as the legacy catalogue shape and renders a stub, not video.

Relationship to the atlas

adaptive-video-encodevideo-atlas-encode
Decodes videoNoYes
OutputJSON catalogueMSE fragment ladder plus manifest
Playable in the dashboardNo (stub)Yes
CostOne pass over the protobufDecode of every admitted stream
Place in the DAGChild of the capture inputChild of the capture input