output-processor — Config Reference
output-processor — Config Reference
Section titled “output-processor — Config Reference”Generated from the
output-processor.schema.jsonJSON Schema (vendored inschemas/). This is the authoritative field reference; see the parent topic for worked examples.
Top-level
Section titled “Top-level”Configuration for the output-processor: inputs, compressors, outputs, and pipeline bindings.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
$schema | string | no | — | Schema URI (annotation only, stripped before validation) |
version | enum: 1 | no | "1" | Config schema version. Must be “1”. |
log_level | enum: error · warn · info · debug · trace | no | "info" | Default log level (RUST_LOG syntax). Per-component overrides take precedence. |
inputs | array of input_config | yes | — | One or more input stream definitions. |
compressors | array of compressor_config | no | — | Named compressor definitions. May be empty if all pipelines use passthrough. |
outputs | array of output_config | yes | — | One or more output sink definitions. |
pipelines | array of pipeline_binding | yes | — | Bindings connecting each input to a compressor chain and an output. |
Definitions
Section titled “Definitions”input_config
Section titled “input_config”A single input stream (VDI or MXL).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | yes | — | Unique identifier referenced by pipeline bindings. |
type | enum: vdi · mxl | yes | — | Input plugin type. |
stream_id | string | yes | — | VDI or MXL stream identifier passed to plugin_open. |
domain | string | no | — | VDI/MXL domain string. |
timeout_ms | integer | no | 5000 | Read timeout in milliseconds. Default: 5000. |
log_level | enum: error · warn · info · debug · trace | no | — | Per-input log level override. |
frame_rate | array of integer | no | — | Explicit grain/frame rate as [numerator, denominator] (e.g. [1, 25] for 25 fps). Overrides the rate reported by the plugin. When absent, the plugin-supplied time_base is used. |
compressor_config
Section titled “compressor_config”A named compressor applied to frames from an input.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | yes | — | Unique identifier referenced by pipeline bindings. |
kind | enum: video · audio · passthrough | yes | — | Compressor type. |
codec | string | no | — | FFmpeg encoder name. E.g. “libx264”, “libx265”, “libvpx-vp9”, “aac”, “libopus”. |
bitrate | integer | no | — | Target bitrate in bits/second. |
preset | string | no | — | Encoder preset (e.g. “faster”, “medium”). |
gop | integer | no | — | GOP size in frames. |
width | integer | no | — | Output width in pixels (video only). |
height | integer | no | — | Output height in pixels (video only). |
pixel_format | string | no | — | FFmpeg pixel format string for encoder input (e.g. “yuv420p”). |
x264_params | string | no | — | Extra x264 parameter string appended to the built-in defaults (e.g. “keyint_min=50”). Merged with repeat_headers=1:scenecut=0; values here take precedence. libx264 only. |
sample_rate | integer | no | — | Audio sample rate in Hz (audio only). |
channels | integer | no | — | Audio channel count (audio only). |
output_config
Section titled “output_config”An output sink. Type-specific fields are validated by the oneOf subschemas below.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | yes | — | Unique identifier referenced by pipeline bindings. |
type | enum: file · null · rtp · srt · rtmp · webrtc · wep · yuv · ndi | yes | — | Output type. |
Then one of 9 variants:
Variant 1 — when type = "file"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "file" | yes | — | |
path | string | yes | — | Output file path. |
format | string | no | — | FFmpeg muxer format (e.g. “mp4”, “matroska”). Inferred from extension when absent. |
Variant 2 — when type = "null"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "null" | yes | — |
Variant 3 — when type = "rtp"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "rtp" | yes | — | |
host | string | yes | — | Destination hostname or IP. |
port | integer | yes | — | Destination UDP port. |
container | enum: mpegts · rtp | no | "mpegts" | Container format over RTP. |
Variant 4 — when type = "srt"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "srt" | yes | — | |
uri | string | no | — | Full SRT URI (e.g. “srt://0.0.0.0:9000?mode=listener&latency=200000”). When set, all other srt_* fields are ignored. |
host | string | no | — | Remote host to connect to (caller mode) or bind address (listener mode, default 0.0.0.0). |
port | integer | no | — | SRT port. |
srt_mode | enum: caller · listener | no | "caller" | Connection mode: ‘caller’ connects to a remote listener; ‘listener’ accepts incoming connections. Default: ‘caller’. |
srt_latency_ms | integer | no | 200 | SRT end-to-end latency in milliseconds. Default: 200. |
srt_passphrase | string | no | — | Stream encryption passphrase (10–79 characters). AES-128 for ≤16 chars, AES-256 for >16 chars. |
record_path | string | no | — | If set, also write encoded content to this MP4 file path for record_seconds seconds, then close the file. The SRT stream continues. |
record_seconds | integer | no | 30 | Duration of the tee recording in seconds. Default: 30. Requires record_path. |
Variant 5 — when type = "rtmp"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "rtmp" | yes | — | |
url | string | yes | — | RTMP ingest URL. |
Variant 6 — when type = "webrtc"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "webrtc" | yes | — | |
signalling_url | string | yes | — | WHIP HTTP endpoint for SDP offer/answer. |
stun_url | string | no | — | STUN server URL (e.g. “stun:stun.l.google.com:19302”). |
ice_servers | array of object | no | — | Additional ICE servers. |
Variant 7 — when type = "wep"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "wep" | yes | — | |
endpoint | string | yes | — | WEP server base URL. |
stream_name | string | yes | — | Stream name used when constructing the POST path. |
Variant 8 — when type = "yuv"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "yuv" | yes | — | |
path | string | no | — | Output directory. The file name is derived from the source flow ID. Defaults to the current directory. |
frames | integer | no | — | Maximum number of frames to write. Pipeline stops after this many frames. Omit for continuous recording. |
Variant 9 — when type = "ndi"
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | object | yes | — | |
type | "ndi" | yes | — | |
url | string | yes | — | NDI source URL, e.g. “ndi://0.0.0.0/MY-FEED”. The host part is the bind address; the path is the source name advertised on the network. |
media_type | enum: video · audio | no | "video" | Sub-stream selector. Default: “video”. “audio” is reserved for a future iteration. |
pipeline_binding
Section titled “pipeline_binding”Connects one input to an optional compressor chain and one output.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
input_id | string | yes | — | Must match an id in the inputs array. |
compressor_ids | array of string | no | — | Ordered list of compressor ids to apply. Empty or absent means passthrough. |
output_id | string | yes | — | Must match an id in the outputs array. |
