Configuration

Scout is configured via properties in the application’s /usr/local/WowzaStreamingEngine/conf/<appName>/Application.xml.

All Scout properties are set inside the <Properties> element. The module re-reads them only at application startup — a WSE application restart is required to apply changes.

Property syntax

Each property follows the standard WSE format:

<Property>
  <Name>cmsdMqa.example</Name>
  <Value>someValue</Value>
  <Type>String</Type>   <!-- String | Boolean | Integer -->
</Property>

Full example

The following excerpt shows all Scout properties with their defaults. Only the license key is mandatory; all other properties are optional.

<Properties>

  <!-- ── License (required) ───────────────────────────────────────────────── -->
  <Property>
    <Name>raskenlund.scout.license</Name>
    <Value>YOUR-LICENSE-KEY</Value>
    <Type>String</Type>
  </Property>

  <!-- ── Core ─────────────────────────────────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.enabled</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
  </Property>

  <!-- ── MQA input ─────────────────────────────────────────────────────────── -->
  <!-- Parse H.264 SEI user_data_unregistered for SVTA2128 MQA scores -->
  <Property>
    <Name>cmsdMqa.input.seiParsing</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
  </Property>
  <!-- Enable the embedded MQA REST receiver (Standard+) -->
  <Property>
    <Name>cmsdMqa.input.restApi</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.input.restApiPort</Name>
    <Value>8090</Value>
    <Type>Integer</Type>
  </Property>

  <!-- ── CMSD output ───────────────────────────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.output.cmsdHeaders</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
  </Property>
  <!-- Inject CMSD-Static (ot, sf, st, br) -->
  <Property>
    <Name>cmsdMqa.output.includeStatic</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
  </Property>
  <!-- Inject CMSD-Dynamic (vmaf, psnr, ssim) when quality scores are present -->
  <Property>
    <Name>cmsdMqa.output.includeDynamic</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
  </Property>

  <!-- ── Prometheus (Standard+) ────────────────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.telemetry.prometheus.enabled</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.telemetry.prometheus.port</Name>
    <Value>9090</Value>
    <Type>Integer</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.telemetry.prometheus.path</Name>
    <Value>/metrics</Value>
    <Type>String</Type>
  </Property>

  <!-- ── Webhook JSON export (Standard+) ───────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.telemetry.webhook.enabled</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.telemetry.webhook.url</Name>
    <Value>https://your-endpoint/metrics</Value>
    <Type>String</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.telemetry.webhook.intervalMs</Name>
    <Value>5000</Value>
    <Type>Integer</Type>
  </Property>

  <!-- ── OpenTelemetry / OTLP (Integration+) ────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.telemetry.otlp.enabled</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
  </Property>
  <!-- gRPC collector at port 4317; HTTP/protobuf at port 4318 (auto-detected) -->
  <Property>
    <Name>cmsdMqa.telemetry.otlp.endpoint</Name>
    <Value>http://otel-collector:4317</Value>
    <Type>String</Type>
  </Property>

  <!-- ── Kafka (Integration+) ───────────────────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.telemetry.kafka.enabled</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.telemetry.kafka.brokers</Name>
    <Value>broker1:9092,broker2:9092</Value>
    <Type>String</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.telemetry.kafka.topic</Name>
    <Value>cmsd-mqa-metrics</Value>
    <Type>String</Type>
  </Property>

  <!-- ── Alerting (Enterprise) ──────────────────────────────────────────────── -->
  <Property>
    <Name>cmsdMqa.alerting.enabled</Name>
    <Value>false</Value>
    <Type>Boolean</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.alerting.webhookUrl</Name>
    <Value>https://your-endpoint/alerts</Value>
    <Type>String</Type>
  </Property>
  <Property>
    <Name>cmsdMqa.alerting.vmafThreshold</Name>
    <Value>70</Value>
    <Type>Integer</Type>
  </Property>

  <!-- ── Metrics store TTL ─────────────────────────────────────────────────── -->
  <!-- Evict stream entries with no updates for this many seconds -->
  <Property>
    <Name>cmsdMqa.store.scoreTtlSeconds</Name>
    <Value>60</Value>
    <Type>Integer</Type>
  </Property>

</Properties>

Property reference

Core

Property

Description

Default

raskenlund.scout.license

Your Scout license key. Required — the module will not start without it.

cmsdMqa.enabled

Set to false to disable the module without removing it from Application.xml.

true

MQA input

Property

Description

Default

cmsdMqa.input.seiParsing

Parse H.264 SEI user_data_unregistered messages for SVTA2128 MQA scores on each live stream. See Media Quality Assessment (MQA).

true

cmsdMqa.input.restApi

Enable the embedded REST receiver that accepts scores pushed by an external tool (Standard+). See Media Quality Assessment (MQA).

false

cmsdMqa.input.restApiPort

TCP port the REST receiver listens on.

8090

CMSD output

Property

Description

Default

cmsdMqa.output.cmsdHeaders

Enable CMSD header injection. Set to false to disable all CMSD headers while keeping the other subsystems (Prometheus, alerting) running.

true

cmsdMqa.output.includeStatic

Inject the CMSD-Static header (ot, sf, st, br fields).

true

cmsdMqa.output.includeDynamic

Inject the CMSD-Dynamic header (vmaf, psnr, ssim fields) when quality scores are available from any ingest source.

true

Prometheus settings

Requires Standard or higher license. See Telemetry.

Property

Description

Default

cmsdMqa.telemetry.prometheus.enabled

Enable the Prometheus metrics HTTP endpoint.

true

cmsdMqa.telemetry.prometheus.port

TCP port the endpoint listens on.

9090

cmsdMqa.telemetry.prometheus.path

HTTP path for the metrics endpoint.

/metrics

Webhook settings

Requires Standard or higher license. See Telemetry.

Property

Description

Default

cmsdMqa.telemetry.webhook.enabled

Enable periodic JSON push to a webhook URL.

false

cmsdMqa.telemetry.webhook.url

Destination URL for webhook pushes.

(none)

cmsdMqa.telemetry.webhook.intervalMs

How often to push, in milliseconds.

5000

OpenTelemetry (OTLP) settings

Requires Integration or higher license. See Telemetry.

Property

Description

Default

cmsdMqa.telemetry.otlp.enabled

Enable OTLP metric export.

false

cmsdMqa.telemetry.otlp.endpoint

Collector endpoint URL. Port 4317 triggers gRPC; port 4318 triggers HTTP/protobuf (auto-detected).

(none)

Kafka settings

Requires Integration or higher license. See Telemetry.

Property

Description

Default

cmsdMqa.telemetry.kafka.enabled

Enable Kafka metric publishing.

false

cmsdMqa.telemetry.kafka.brokers

Comma-separated Kafka broker list (host:port).

(none)

cmsdMqa.telemetry.kafka.topic

Kafka topic to publish to.

cmsd-mqa-metrics

Alerting settings

Requires Enterprise license. See Quality Alerting.

Property

Description

Default

cmsdMqa.alerting.enabled

Enable quality alerting.

false

cmsdMqa.alerting.webhookUrl

URL to POST alert payloads to.

(none)

cmsdMqa.alerting.vmafThreshold

VMAF score below which an alert fires (0–100).

70

Metrics store

Property

Description

Default

cmsdMqa.store.scoreTtlSeconds

Evict stream entries that have not been updated for this many seconds. Keeps the metrics store from accumulating data for streams that have ended.

60