Pattern sources
Choose Pattern in the stream form to generate H.264 or H.265 MPEG-TS video. Pattern requires Recast, including in Player mode. It does not require Flywheel. SRT outputs additionally require SRT licensing.
The Video panel provides the same nine patterns and encoding controls as STView: SMPTE bars, moving ball, checkerboard, snow, black, white, red, green, and blue. Defaults are 1280×720, 30 FPS, H.264, 2 Mbps VBR, a 60-frame keyframe interval, and Auto acceleration. Fractional broadcast rates such as 29.97 are stored as 30000/1001. Hardware required fails explicitly when the requested encoder is unavailable; Software bypasses hardware selection. Check capability checks the current draft and reports the selected encoder and any fallback reason.
The KLV panel optionally generates metadata on PID 258 by default. Select SYNC or ASYNC, every-frame or a configured rate, and optional pattern diagnostics. Sparse rates must not exceed the video frame rate. Diagnostics require revision 13 or newer. The shared template editor validates fields against libmisb. Tags 1 and 2 are generated; tag 65 selects the revision. Pattern template changes remain part of the stream draft until the whole stream is saved.
In Play and Recast or Recaster mode, add multiple UDP/SRT outputs, or UDS on supported platforms. Each output uses Original source. Raw PCAP and Flywheel processing are not supported for Pattern. When converting an existing stream, resolve incompatible processor references explicitly; destinations are never silently removed.
Player and Play and Recast modes use the encoded Pattern video for WebRTC playback. The stream form hides Passthrough and Low Latency for Pattern sources. Mosaic also previews Recaster streams. Opening or closing viewers does not restart the generator. Stop the stream before editing source or encoding settings, then save and start it again.
Add Platform Metadata is a fallback for a Pattern source with synthetic KLV disabled. It sends platform location to the WebRTC KLV data channel after a short grace period if no KLV arrives. It does not add fields to synthetic KLV or to the generated MPEG-TS stream. Once synthetic KLV is received, the fallback stops.
In the Video tab, enable Show elapsed and absolute time and Show frame count independently. Both are off by default. These overlays are burned into generated video, so they appear in playback, mosaic previews, and recast output without enabling synthetic KLV. Time shows elapsed HH:MM:SS.mmm and absolute UTC; the frame counter starts at zero. Restarting the source resets elapsed time and frame count and establishes a new UTC anchor. Stop the stream before changing these settings, then save and start it again.
Installation and runtime
Package skyview-flywheel-worker alongside the server, using the pinned STView SDK v0.9.2 and worker protocol 3. SKYVIEW_FLYWHEEL_WORKER can override the executable path. Pattern uses the worker's headless GStreamer mode; it has its own availability check and does not depend on Flywheel's presentation/GPU probe. GStreamer must include MPEG-TS muxing, UDP output, video conversion, and an H.264/H.265 encoder appropriate to the acceleration policy. Synthetic KLV also needs the packaged libmisb runtime.
One worker generates and encodes each running source, then sends transport over a private loopback connection to SkyView. The receiver and consumers start first. Stream stop cancels and reaps the worker; an unexpected exit rebuilds the source with bounded retry delays and a new preview generation.
Adaptive mosaic previews remain opt-in through SKY_VIEW_ADAPTIVE_PREVIEW=1. They tap generated transport and use the JPEG helper, without a second generator or a server-side preview decoder. The default legacy preview path remains supported.
API examples
The normal stream API persists type: "pattern" and a pattern:// URL, for example:
{"sensor":"TestPattern","type":"pattern","url":"pattern://ball?codec=1&fps_num=30000&fps_den=1001&klv_enabled=1","payloadType":"mpegts","mode":"play","active":true,"passthrough":true}
POST /api/pattern/capability accepts {"url":"pattern://smpte"} and returns supported, encoder, memory path, and fallback/error diagnostics. Probes are bounded. GET /api/pattern/:id/status reports the current worker state and frame counters.
POST /api/pattern/synthetic-klv/validate accepts syntheticKlvFieldsJson (a JSON string without generated tags) and syntheticKlvRevision. Both POST endpoints require stream administration and Recast. KLV URL parameters remain persisted but are hidden from the form's readable URL field.
See tests/pattern.http for requests and development/pattern-verification.md for the verification record and outstanding platform checks.