MoQ Target

MoQ Target

Introduction

The MoQ Target is Composer's publishing endpoint for the Vindral CDN over MoQ (Media over QUIC) — the IETF's emerging real-time streaming protocol that replaces the round-trip latency and connection-fragility quirks of RTMP with a QUIC-native publish-subscribe model. The target encodes the rendered scene into one or more configurable video and audio profiles, multiplexes them into a MoQ track, and publishes to a Vindral channel addressed by a Channel ID + Stream Key pair.

For pipelines that haven't moved to MoQ yet, the same target can speak MPEG-TS or RTMP to legacy ingests — useful while a fleet migrates. New deployments should publish directly via MoQ; the legacy modes are kept for backwards compatibility with existing projects.

Why MoQ for Vindral

MoQ is the natural transport for Vindral CDN distribution because it's the protocol the rest of the Vindral pipeline already speaks end-to-end. Picking MoQ at the publish side means:

  • Sub-second glass-to-glass latency in the right network conditions — the protocol's QUIC backbone removes the buffering that RTMP / HLS chains accumulate.
  • Native multi-track publishing — video + audio + alternate-language audio + subtitle tracks all ride on the same MoQ session as separate tracks the player can subscribe to independently. No remuxing, no separate parallel streams.
  • Connection-migration tolerance — a network change (Wi-Fi to cellular, IP renumber) doesn't tear down the publish session; QUIC carries the connection across. The fixed-restart pattern RTMP needs is replaced by the protocol handling it.
  • Authenticated publish via Stream Key — the same credential model used by every other Vindral CDN tool, so the publish side fits the rest of the workflow.

Connection model

Two connection modes:

  • Auto — the target constructs the publish URL automatically from the Channel ID and Stream Key, pointing at the standard Vindral ingest. This is the right choice for most deployments — fewer fields to fill in, fewer chances to fat-finger the URL.
  • Custom — manual entry of the full Connection URL. Reach for this when publishing to a non-standard / staging / on-prem MoQ endpoint, or when an internal traffic-routing tool gives you a specific ingest URL to use.

For high-availability publishing, Alternative URLs (semicolon-separated) define a fallback list — on a connection failure the target cycles through them rather than just retrying the primary. Pair with a configurable Reconnect Interval to keep the publish chain self-healing through transient outages.

Encoding

Two encoding-profile collections drive what the target sends over the wire:

  • Video Encoding Profiles — list of video tracks, each with its own bitrate, resolution, and codec settings. The collection design lets a single MoQ session carry multiple bitrate ladders so downstream players can ABR without separate publishes.
  • Audio Encoding Profiles — list of audio tracks, each with bitrate, sample rate, channel count, channel mapping into the scene's audio bus, and language tag. Multi-language broadcasts ship as parallel audio tracks the player picks at subscribe time.

Common use cases

  • Direct publishing to Vindral CDN — the primary case. MoQ + Auto mode + a Channel ID and Stream Key, and the rendered scene is on the CDN.
  • Multi-language live broadcasts — author one Composer project with several language commentary mixes on the audio bus; let the MoQ Target carry each mix as a separate language-tagged track. Players choose at subscribe time.
  • ABR ladder publishing — define multiple video profiles (e.g. 1080p / 720p / 480p), and a single Composer publishes all of them in one MoQ session. The CDN distributes; the player switches between tracks.
  • Hybrid old + new pipelines — run a MoQ Target for the new Vindral chain alongside RTMP / SRT targets feeding legacy ingests during a migration window.
  • Resilient cellular / bonded uplinks — QUIC's connection-migration tolerance survives the network changes that would tear an RTMP publish off the air.

Driving from outside

The standard set: Start, Stop, plus Send Metadata (queue an ad-hoc metadata packet onto the next outgoing chunk). All invokable from the property panel, the HTTP API (/api/invokecommand?targetname=MoQ+Target&command=StartCommand), a Connector, or the Script Engine via ExecuteCommand / ExecuteCommandById. Live diagnostics — current outgoing bitrate (instant + max / min / avg), reconnect counter, packet count, queue depths, encode and total processing times — are surfaced as readable properties for dashboards and scripts.

MoQ Target - Settings

General

General — autostart, advanced visibility, debug logging, connection mode and URL.

General
Property Description
Autostart when application starts 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.
Show advanced options Show or hide the target's advanced settings in the editor UI. [default=false].
Connection Mode 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).
Connection URL 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.
Alternative URLs (advanced) 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.
Reconnect Interval 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.

Target state

Target state — live readouts of the connection status and any error message.

Target state
Property Description
ConnectionStatus 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.
Status message 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.

Protocol Options

Protocol Options — Channel ID and Stream Key used by the MoQ sink for publishing.

Protocol Options
Property Description
Channel ID 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.
Stream Key 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.

Metadata

Metadata — inject side-channel data (text, JSON, cue points, ad markers) alongside the stream.

Metadata
Property Description
Metadata to Send 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.
Send Metadata 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.

Commands

Commands — start and stop the MoQ session.

Commands
Property Description
Start 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).
Stop Cleanly close the MoQ session and stop publishing. Disabled while the target is already stopped.

Video Encoding

Video Encoding — list of video tracks (resolution, bitrate, codec) that will be multiplexed into the MoQ session.

Video Encoding
Property Description
Encoding Profiles 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.

Audio Encoding

Audio Encoding — list of audio tracks (bitrate, sample rate, channels, language) to multiplex into the MoQ session.

Audio Encoding
Property Description
Audio Encoding Profiles 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.

Target Performance

Target Performance — live readouts of throughput, frame counters, bitrate stats, and the active ingest URL.

Target Performance
Property Description
Frames Processed 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.
Packets Sent 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.
Reconnections 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.

Inherits from: AbstractTarget.

See also: MoQ Target in Script Engine Objects.

  • MoQ input — the receiver-side counterpart. Use it when Composer consumes a MoQ stream rather than producing one.
  • SRT Target — pick this for sending out over unmanaged networks when MoQ isn't the right fit at the destination; SRT layers retransmission and bounded latency on top of UDP.
  • SRT input — the SRT receiver-side for incoming contribution over unmanaged networks.
  • RTMP Target — pick this for pushing to a CDN, RTMP origin, or third-party live platform that doesn't speak MoQ.
  • RTMP input — the RTMP receiver-side for ingesting an RTMP stream.
  • NDI Target — for publishing a Composer scene to other NDI-aware tools on the same studio LAN; mDNS auto-discovery, very low latency, not internet-traversable.
  • NDI input — the NDI receiver-side for studio-LAN contribution.
  • FFmpeg Target — power-user target for any container / protocol the dedicated targets don't expose; useful as an escape hatch when MoQ / RTMP / SRT / NDI don't fit.