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.