Telemetry
Scout publishes per-stream quality metrics through four optional backends. All telemetry backends require a Standard or higher license, with the exception of OTLP and Kafka which require Integration or higher.
Prometheus
Scout exposes a Prometheus-compatible metrics endpoint with per-stream quality scores, bitrate, and event counters including a VMAF score histogram.
Configuration
<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>
Accessing the metrics
Metrics are served at:
http://<your-server>:9090/metrics
The response uses the Prometheus text exposition format (text/plain; version=0.0.4).
Metrics reference
All per-stream metrics carry stream and rendition labels. The rendition value
comes from the rendition= query parameter on segment requests; requests without it use
the label value default.
Gauge metrics
Metric |
Description |
|---|---|
|
Most recent VMAF score (0 – 100). Absent until a score is received. |
|
Most recent PSNR score (dB). Absent until a score is received. |
|
Most recent SSIM score (0 – 1). Absent until a score is received. |
|
Most recently observed bitrate in bits per second. |
|
Keyframe interval in milliseconds from the most recent SEI message. |
Counter metrics
Metric |
Description |
|---|---|
|
Running count of SVTA2128 SEI messages successfully parsed since module start. |
|
Running count of |
|
Running count of quality alerts fired since module start (Enterprise only; always zero on Standard and Integration licenses). |
|
Running count of SEI frames dropped due to parse errors or short payloads. |
Histogram
Metric |
Description |
|---|---|
|
VMAF score distribution. Bucket boundaries: |
|
Total number of VMAF score observations recorded. |
|
Sum of all VMAF score observations. |
Score sources
Prometheus metrics reflect the contents of the per-stream metrics store. Scores enter the store from two sources:
SEI ingest — SVTA2128 scores extracted from the H.264 bitstream (requires
cmsdMqa.input.seiParsing=true, the default). See Media Quality Assessment (MQA).REST ingest — scores pushed by an external tool via
POST /mqa/{streamName}(requirescmsdMqa.input.restApi=true). See Media Quality Assessment (MQA).
When both sources contribute a score for the same stream, rendition, and metric, the most recently updated value is used.
Webhook
Scout can periodically push all active stream metrics as a JSON payload to a configurable HTTP endpoint.
Requires Standard or higher license.
Webhook configuration
<Property>
<Name>cmsdMqa.telemetry.webhook.enabled</Name>
<Value>true</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>
Payload format
Each push is a single HTTP POST with Content-Type: application/json:
{
"timestamp": 1716812345678,
"streams": [
{
"stream_name": "myStream",
"rendition": "720p",
"last_updated": 1716812344500,
"vmaf": 87.3,
"psnr": 42.1,
"ssim": 0.975,
"counters": {
"sei_messages_parsed": 312,
"headers_injected": 1024,
"alerts_fired": 0
}
}
]
}
Fields present only when a score is available for that stream and rendition. Streams with no scores in the current metrics store window are omitted from the payload.
OpenTelemetry (OTLP)
Scout can export metrics to an OpenTelemetry Collector via OTLP.
Requires Integration or higher license.
OTLP configuration
<Property>
<Name>cmsdMqa.telemetry.otlp.enabled</Name>
<Value>true</Value>
<Type>Boolean</Type>
</Property>
<Property>
<Name>cmsdMqa.telemetry.otlp.endpoint</Name>
<Value>http://otel-collector:4317</Value>
<Type>String</Type>
</Property>
The transport protocol is determined automatically from the endpoint port:
Port 4317 — gRPC (OTLP/gRPC)
Port 4318 — HTTP/protobuf (OTLP/HTTP)
Metrics are exported on a 15-second interval using the OpenTelemetry SDK.
Instruments
Instrument name |
Type |
Description |
|---|---|---|
|
Gauge |
Most recent VMAF score (0 – 100). |
|
Gauge |
Most recent PSNR score (dB). |
|
Gauge |
Most recent SSIM score (0 – 1). |
|
Gauge |
Most recently observed bitrate (bits per second). |
|
Counter |
Cumulative SEI messages parsed. |
|
Counter |
Cumulative CMSD headers injected. |
|
Counter |
Cumulative quality alerts fired (Enterprise only). |
All instruments carry stream and rendition attributes.
Kafka
Scout can publish per-stream metrics to a Kafka topic.
Requires Integration or higher license.
Kafka configuration
<Property>
<Name>cmsdMqa.telemetry.kafka.enabled</Name>
<Value>true</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>
Message format
Messages are published every 15 seconds. Each message is a JSON object in the same format as the webhook payload (see Webhook above), with one message per publish cycle containing all active streams.
The Kafka producer uses the stream name as the message key so that all metrics for a given stream land on the same partition.
Metrics store TTL
The metrics store evicts entries that have not been updated for
cmsdMqa.store.scoreTtlSeconds seconds (default: 60). This prevents the store —
and therefore the Prometheus endpoint and telemetry payloads — from accumulating stale
data for streams that have ended.
<Property>
<Name>cmsdMqa.store.scoreTtlSeconds</Name>
<Value>60</Value>
<Type>Integer</Type>
</Property>