MoQ Target
MoQ (Media-over-QUIC) streaming target — Composer's primary publishing endpoint for the Vindral CDN. MoQ is a next-generation low-latency streaming protocol that runs over QUIC; compared to RTMP, it supports glass-to-glass latency in the sub-second range, native multi-track delivery (multi-bitrate video, multi-language audio), and graceful recovery on lossy networks. Useful for live event broadcasts, sports / casino feeds, remote contribution, and anywhere ultra-low-latency CDN delivery matters. Encodes the rendered scene to one or more video and audio profiles, multiplexes them into a MoQ session, and publishes to a configured Channel ID using a Stream Key. Two connection modes are supported: ConnectionMode.Auto resolves the ingest URL automatically from the Stream Key for the Vindral CDN, while ConnectionMode.Custom lets you point at any compatible MoQ relay. Supports failover across alternative ingest URLs and automatic reconnect on a configurable interval. SinkType.MOQ is the default and only mode actively developed. The MPEG-TS and RTMP sink modes are kept for backwards-compatibility with older project files only — new projects should use the dedicated RTMP target or SRT target instead.
| Property | Type | Access | Description |
|---|---|---|---|
AutoStart |
bool |
get/set |
When true, the target connects automatically as soon as the project loads. [default=true]. The recommended setting for most live workflows — the stream comes up the moment Composer is running. Disable for targets that should be triggered manually (e.g. only during specific show segments) or that need to wait for an external readiness signal before connecting. |
ShowAdvancedOptions |
bool |
get/set |
Show or hide the target's advanced settings in the editor UI. [default=false]. |
SinkDebugMode |
bool |
get/set |
When true, writes detailed troubleshooting logs from the sink and encoder to the application log. [default=false]. Leave off for normal operation — verbose logging adds noise and a small amount of overhead. Enable when investigating connection failures, encoder stalls, or unexpected reconnects. |
SinkType |
SinkType |
get/set |
Underlying sink protocol used for streaming output. [default=MOQ]. MOQ is the only actively developed mode and the recommended choice for new projects. MPEGTS and RTMP are kept for backwards-compatibility with older project files and shouldn't be used for new work — use the dedicated RTMP target/SRT target instead. Hidden from the UI by [AlwaysHide], but accessible from a script if you really need to switch sink type at runtime. |
ConnectionMode |
ConnectionMode |
get/set |
How the ingest URL is determined. [default=Custom]. Auto resolves the URL automatically from MoqStreamKey against the Vindral CDN's traffic router — the simplest setup for Vindral customers. Custom lets you point at any compatible MoQ relay by setting SinkUrl directly (and optionally a list of AlternativeIngestUrls for failover). |
SinkUrl |
string |
get/set |
Destination URL for the stream — the MoQ relay endpoint to publish to. In Auto connection mode this is filled in automatically from MoqStreamKey and is effectively read-only. In Custom mode set this manually to point at a specific MoQ relay (for example a privately hosted relay or a non-default Vindral region). Treat the URL as sensitive — it can encode the publishing credentials and shouldn't be committed to public project files. Macros like @@LocalIP() and @@HostName() may be used inside the URL. |
AlternativeIngestUrls |
string |
get/set |
Semicolon-separated list of fallback ingest URLs to cycle through on connection failure. On a connection drop the target rotates through these URLs (after the primary SinkUrl) before retrying the primary, giving you redundancy across multiple relays or regions. Format example: https://relay-a.example.com/path;https://relay-b.example.com/path. Only used in Custom connection mode. |
ReconnectInterval |
ReconnectInterval |
get/set |
How long to wait between reconnect attempts after a connection failure. [default=OneSecond]. Shorter intervals recover faster from transient network blips but hammer the relay if the issue is persistent. Longer intervals are gentler on the network but mean more black/silent time on air. One second is a sensible default for live broadcasts. |
ConnectionStatus |
ConnectionStatus |
get |
Current connection status of the MoQ session (read-only). Disconnected — not currently connected. Connecting — handshake in progress. Connected — actively publishing. Reconnecting — connection dropped, retrying. Useful from a script for triggering UI indicators, alerts, or fallback routes when the stream goes off-air. |
StatusMessage |
FormattedMessage? |
get |
Most recent status or error message from the target (read-only). Reflects what the target is currently doing or what went wrong on the last connection attempt. Error-typed messages also drive the on-screen warning indicator. Read this from a script to surface detailed reasons for a stream failure instead of just the boolean ConnectionStatus. |
MoqChannelId |
string? |
get/set |
Vindral CDN channel ID (also called the namespace) under which this stream is published. Required for the MoQ sink. In ConnectionMode.Auto this is filled in automatically from the traffic router's response to MoqStreamKey. In Custom mode it must be set manually to match the channel registered with the CDN. Receivers tune to the stream by referencing this same Channel ID. |
MoqStreamKey |
string? |
get/set |
Authentication key used by the MoQ sink to authorise publishing to the configured channel. Required for the MoQ sink. In ConnectionMode.Auto setting this also kicks off automatic resolution of MoqChannelId and the ingest URL via the Vindral traffic router. Treat the Stream Key as a secret — do not commit project files containing real keys to public repositories. |
MetadataToSend |
string |
get/set |
Free-form text or JSON payload to inject into the stream the next time SendMetadataCommand runs. Useful for sending cue points, ad-break markers, scoring updates, or any structured side-channel data that downstream players can read. Delivery is one-shot per SendMetadataCommand invocation — the same value is not resent automatically. Set from a script for automation-driven cues. |
MetadataSentCounter |
int |
get |
Total number of metadata packets sent since the target was started (read-only, debug). Useful for confirming that SendMetadataCommand actually delivered, or for tracking how many cues have been emitted during a programme. |
SendMetadataCommand |
Command |
get |
Transmit the current MetadataToSend value as a side-channel packet on the active MoQ session. Increments MetadataSentCounter on success. Only enabled while the target is connected and MetadataToSend is non-empty. |
StartCommand |
Command |
get |
Connect to the MoQ relay and begin publishing the encoded scene to the configured channel. Disabled while the target is already connecting, running, or in a misconfigured state (missing Channel ID / Stream Key / valid encoding profiles). |
StopCommand |
Command |
get |
Cleanly close the MoQ session and stop publishing. Disabled while the target is already stopped. |
VideoEncodingProfiles |
VideoEncodingProfiles |
get/set |
Collection of video encoding tracks to publish in the MoQ session. Each track has its own resolution, bitrate, and codec configuration — useful for delivering adaptive-bitrate ladders (e.g. 1080p / 720p / 480p) so receivers can pick the variant that matches their bandwidth. The track list is editable from the property panel and from a script. |
AudioEncodingProfiles |
AudioEncodingProfiles |
get/set |
Collection of audio encoding tracks to publish in the MoQ session. Each track has its own bitrate, sample rate, channel count, channel mapping, and language tag — useful for delivering multi-language programmes (e.g. one track per language) or alternate audio versions (announcer vs natural sound). At least one track is required to publish; a default stereo track is created automatically when a new target is added. |
FramesProcessed |
int |
get |
Total number of frames the target has handed to the encoder since starting (read-only). Useful from a script for sanity checks ("did frames actually start flowing?") and for computing average frame rate over time. |
PacketsSent |
int |
get |
Total number of encoded packets the target has handed to the MoQ sink since starting (read-only). Climbs steadily while the stream is healthy; if it stops growing while ConnectionStatus is still Connected, something is jammed in the encoder or output queue. |
OutgoingBitrate |
string |
get |
Current outgoing bitrate, formatted as a human-readable string (read-only, debug). Updated approximately once per second. For a numeric value suitable for arithmetic see OutgoingBitrateMbps. |
MaxBitrate |
string |
get |
Highest outgoing bitrate seen since the target started, in Mbit/s (read-only, debug). Useful for sizing the upstream connection — if peak usage routinely approaches the link capacity, expect intermittent reconnects on busy frames. |
MinBitrate |
string |
get |
Lowest outgoing bitrate seen since the target started, in Mbit/s (read-only, debug). |
AvgBitrate |
string |
get |
Rolling 30-second average outgoing bitrate, in Mbit/s (read-only, debug). Smoother than OutgoingBitrate; use this for capacity-planning readouts and dashboards where you don't want noise from per-frame variance. |
OutgoingBitrateMbps |
float |
get |
Numeric outgoing bitrate in Mbit/s — the same value as OutgoingBitrate but as a float (read-only). Suitable for arithmetic, threshold checks, and Prometheus-style metric scraping. |
ActiveUrl |
string |
get |
The ingest URL the target is currently publishing to (read-only, debug). Equal to SinkUrl during normal operation. May differ when the target has cycled to one of the AlternativeIngestUrls after a connection failure — useful for confirming which relay is actually live when troubleshooting. |
ReconnectionCount |
int |
get |
Number of automatic reconnection attempts performed since the target was started (read-only). Healthy streams sit at 0. A small number (1–2) over a long session usually reflects transient network glitches; a steadily growing count indicates a persistent problem with the network or the relay. Useful from a script for raising alerts when the count climbs unexpectedly. |
AvgVideoProcessingTime |
double |
get |
Average milliseconds spent preparing each video frame for the encoder (read-only, debug). Includes colour-space conversion and any per-frame staging work — but not the actual encode. Should stay well below one frame's worth of time at the project frame rate. |
AvgEncodingTime |
double |
get |
Average milliseconds spent encoding each frame to the output codec (read-only, debug). The dominant cost in the pipeline. If this approaches the project's per-frame budget (e.g. 20 ms at 50 fps), consider lowering bitrate, resolution, or the number of encoding profiles. |
AvgTotalTime |
double |
get |
Average total milliseconds per frame across the whole publish pipeline (preparation + encoding + sink hand-off) (read-only, debug). |
PeakVideoProcessingTime |
double |
get |
Worst single-frame video preparation time observed since starting, in milliseconds (read-only, debug). Useful for spotting transient stalls that the average obscures. |
PeakEncodingTime |
double |
get |
Worst single-frame encoding time observed since starting, in milliseconds (read-only, debug). |
VideoInputQueueDepth |
int |
get |
Number of video frames currently waiting to be prepared for encoding (read-only, debug). Should sit at 0 or near 0 in steady state. Persistent high values point to a bottleneck upstream of the encoder (frame preparation falling behind the source). |
EncodingInputQueueDepth |
int |
get |
Number of prepared video frames currently waiting in the encoder's input queue (read-only, debug). High values indicate the encoder itself is the bottleneck — encoding is slower than the project frame rate. Reduce bitrate, resolution, or the number of encoding profiles to recover. |
OutputQueueDepth |
int |
get |
Number of encoded packets currently waiting to be handed to the MoQ sink (read-only, debug). High values usually indicate a network or sink bottleneck — outgoing throughput can't keep up with the encoder. Check uplink bandwidth and ReconnectionCount. |
Inherits from: AbstractTarget.
See also: MoQ Target in Targets — user-facing introduction, screenshots, and section summaries.