VideoPlayback (Next)
Stub player for adaptive video catalogues produced by adaptive-video-encode (video-utils). The value channel exposes multiple named streams (for example eye.left / eye.right) with chunk metadata and future HLS/DASH ladder URLs. Decode is stubbed; the UI shows stream status, a stream selector, and a scrubber.
Summary
| Value | |
|---|---|
| Layout id | VideoPlayback |
| Widget config | videoPlaybackItem (enablePlayPause, syncWithClock, optional defaultStreamName) |
| Channel shape | value |
Migration status
migrated , reference: tools/arbex/reference/next/VideoPlayback.json. See Dataservice migration status.
Layout
| Field | Description |
|---|---|
channels | One value channel id, e.g. eye-tracking-video |
videoPlaybackItem.enablePlayPause | Show play/pause. Default false |
videoPlaybackItem.syncWithClock | Sync scrubber with realm TimelineClock via useClock. Default true |
videoPlaybackItem.defaultStreamName | Preferred stream (e.g. eye.left). Defaults to first stream |
enablePlaybackControls | Row/page playback chrome (align with other timeline widgets) |
Clock sync
When syncWithClock is true (default):
- Inbound: scrubber follows realm clock
elapsedMs/ play state from outside this widget. - Outbound: scrub / optional play-pause call
clock.seek/start/pause. - No feedback loop: seeks and play actions initiated by VideoPlayback set a short-lived flag so the matching clock echo tick/state is ignored.
When syncWithClock is false, scrubber state is local only.
Data contract
| Shape | Payload |
|---|---|
value | Adaptive video catalogue (see below) |
{
"artefactKind": "adaptive-video-catalogue",
"status": "pending",
"streams": [
{
"name": "eye.left",
"codec": "H264",
"width": 1280,
"height": 720,
"chunks": [],
"hlsManifestUrl": null,
"dashManifestUrl": null
}
],
"durationMs": 900000,
"note": "Chunks are short H264 segments; ladders produced after stitch/catalogue."
}Capture video arrives as chunked multi-stream H264 (StreamComponent / VideoSource), not a single contiguous MP4. Ladders and chunk lists are filled by video-utils over time (pending → partial → ready).
Example
Maximal layout + channel: VideoPlayback.json. RAG: tools/arbex/rag/reference/components/VideoPlayback.md.
Related
- Next components index
- Dataservice migration status
- Runner:
runners/video-utils(adaptive-video-encode)