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

cmsd_mqa_vmaf_score{stream="<name>",rendition="<id>"}

Most recent VMAF score (0 – 100). Absent until a score is received.

cmsd_mqa_psnr_score{stream="<name>",rendition="<id>"}

Most recent PSNR score (dB). Absent until a score is received.

cmsd_mqa_ssim_score{stream="<name>",rendition="<id>"}

Most recent SSIM score (0 – 1). Absent until a score is received.

cmsd_mqa_bitrate_bps{stream="<name>",rendition="<id>"}

Most recently observed bitrate in bits per second.

cmsd_mqa_keyframe_interval_ms{stream="<name>",rendition="<id>"}

Keyframe interval in milliseconds from the most recent SEI message.

Counter metrics

Metric

Description

cmsd_mqa_sei_messages_parsed_total{stream="<name>"}

Running count of SVTA2128 SEI messages successfully parsed since module start.

cmsd_mqa_headers_injected_total{stream="<name>"}

Running count of CMSD-Static (and CMSD-Dynamic) headers injected since module start.

cmsd_mqa_alerts_fired_total{stream="<name>"}

Running count of quality alerts fired since module start (Enterprise only; always zero on Standard and Integration licenses).

cmsd_mqa_frame_drops_total{stream="<name>"}

Running count of SEI frames dropped due to parse errors or short payloads.

Histogram

Metric

Description

cmsd_mqa_vmaf_histogram_bucket{stream="<name>",rendition="<id>",le="<bound>"}

VMAF score distribution. Bucket boundaries: 50, 70, 85, 95, +Inf.

cmsd_mqa_vmaf_histogram_count{stream="<name>",rendition="<id>"}

Total number of VMAF score observations recorded.

cmsd_mqa_vmaf_histogram_sum{stream="<name>",rendition="<id>"}

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:

  1. SEI ingest — SVTA2128 scores extracted from the H.264 bitstream (requires cmsdMqa.input.seiParsing=true, the default). See Media Quality Assessment (MQA).

  2. REST ingest — scores pushed by an external tool via POST /mqa/{streamName} (requires cmsdMqa.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

cmsd_mqa.vmaf_score

Gauge

Most recent VMAF score (0 – 100).

cmsd_mqa.psnr_score

Gauge

Most recent PSNR score (dB).

cmsd_mqa.ssim_score

Gauge

Most recent SSIM score (0 – 1).

cmsd_mqa.bitrate_bps

Gauge

Most recently observed bitrate (bits per second).

cmsd_mqa.sei_messages_parsed

Counter

Cumulative SEI messages parsed.

cmsd_mqa.headers_injected

Counter

Cumulative CMSD headers injected.

cmsd_mqa.alerts_fired

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>