QStream Telemetry Reference
QStream is the EBU video player application used in the 5G-EMERGE platform. It emits telemetry via OpenTelemetry (OTel), covering startup performance, segment delivery, buffering, adaptive bitrate behaviour, and error events.
This page is the canonical reference for all telemetry spans and attributes exported by QStream. Version documented: rev1, 15 January 2026 — aligned to the four test cases in the TVR.
Configuration
Telemetry is configured via TelemetryConfig:
| Field | Type | Default | Description |
|---|---|---|---|
endpoint |
String | "" |
OTLP endpoint URL. The 5G-EMERGE endpoint is opentel.5g-emerge.ebu.io:4318 |
isSecure |
bool | false |
Use HTTPS instead of HTTP |
batchIntervalSeconds |
int | 30 |
Interval for batching telemetry data |
enabled |
bool | false |
Enable/disable telemetry collection |
Resource Attributes
Included on all telemetry spans, identifying the emitting device and app version:
| Attribute | Type | Example | Description |
|---|---|---|---|
service.name |
String | qstream-player |
Service identifier |
service.version |
String | 1.3.3+50 |
App version + build number |
os.type |
String | android, ios |
Operating system name |
os.version |
String | Android 14 (SDK 34) |
OS version details |
Common Span Attributes
Included on all spans where a stream is active:
| Attribute | Type | Description |
|---|---|---|
stream.url |
String | Currently playing stream URL |
Telemetry Events
Startup Time
These three events together enable calculation of Average Startup Time (Time to First Frame — TTFF).
player.initialization.started
Recorded when the player begins preparing for playback (first buffering state).
| Attribute | Type | Description |
|---|---|---|
stream.url |
String | URL being loaded |
player.initialization.completed
Recorded when the player is ready to start playback (first ready state).
| Attribute | Type | Description |
|---|---|---|
stream.url |
String | URL being loaded |
player.init_duration_ms |
int | Time from initialization started to ready (ms) |
playback.started
Recorded when the first video frame is rendered.
| Attribute | Type | Description |
|---|---|---|
stream.url |
String | URL being played |
player.startup_duration_ms |
int | Total time from initialization to first frame (ms) |
Segment Delivery
segment.load.started
Recorded when a media segment download begins.
| Attribute | Type | Description |
|---|---|---|
segment.url |
String | URL of the segment being downloaded |
segment.start_timestamp |
int | Absolute timestamp when download started (epoch ms) |
segment.download
Recorded when a media segment download completes.
| Attribute | Type | Description |
|---|---|---|
segment.url |
String | URL of the downloaded segment |
segment.download_duration_ms |
int | Time to download the segment (ms) |
segment.bytes_loaded |
int | Size of downloaded segment (bytes) |
Bandwidth
bandwidth.estimate
Recorded when bandwidth estimation is updated.
| Attribute | Type | Description |
|---|---|---|
bandwidth.bitrate_estimate |
int | Estimated bandwidth (bits per second) |
bandwidth.total_bytes_loaded |
int | Total bytes loaded since playback started |
Buffering
buffering.started
Recorded when playback enters a buffering state.
| Attribute | Type | Description |
|---|---|---|
playback.position_ms |
int | Playback position when buffering started |
buffering.ended
Recorded when playback exits a buffering state.
| Attribute | Type | Description |
|---|---|---|
playback.position_ms |
int | Playback position when buffering ended |
buffering.duration_ms |
int | Total time spent buffering (ms) |
Video
video.dropped_frames
Recorded when video frames are dropped.
| Attribute | Type | Description |
|---|---|---|
video.dropped_frames_count |
int | Number of dropped frames |
video.elapsed_ms |
int | Elapsed playback time (ms) |
video.size_changed
Recorded when video resolution changes.
| Attribute | Type | Description |
|---|---|---|
video.width |
int | Video width in pixels |
video.height |
int | Video height in pixels |
video.decoder_initialized
Recorded when the video decoder is initialised.
| Attribute | Type | Description |
|---|---|---|
video.decoder_name |
String | Name of the video decoder |
video.init_duration_ms |
int | Decoder initialisation time (ms) |
Audio
audio.underrun
Recorded when audio buffer underruns occur.
| Attribute | Type | Description |
|---|---|---|
audio.buffer_size_ms |
int | Audio buffer size (ms) |
audio.elapsed_since_last_feed_ms |
int | Time since last audio feed (ms) |
audio.decoder_initialized
Recorded when the audio decoder is initialised.
| Attribute | Type | Description |
|---|---|---|
audio.decoder_name |
String | Name of the audio decoder |
audio.init_duration_ms |
int | Decoder initialisation time (ms) |
Adaptive Bitrate
format.changed
Recorded when the media format changes — i.e. an ABR quality switch occurs.
| Attribute | Type | Description |
|---|---|---|
format.bitrate |
int | New bitrate (bits per second) |
format.width |
int | Video width in pixels |
format.height |
int | Video height in pixels |
format.codecs |
String | Codec information |
Seek
seek.completed
Recorded when a seek operation completes.
| Attribute | Type | Description |
|---|---|---|
seek.from_position_ms |
int | Position before seek (ms) |
seek.to_position_ms |
int | Position after seek (ms) |
seek.duration_ms |
int | Time to complete seek (ms) |
Track Selection
track.changed
Recorded when an audio, video, or subtitle track changes.
| Attribute | Type | Description |
|---|---|---|
track.type |
String | Track type: audio, video, or text |
track.language |
String | Track language code |
track.bitrate |
int | Track bitrate (bits per second) |
Errors
Both error spans set OTel span status to ERROR.
error.playback
Recorded when a playback error occurs.
| Attribute | Type | Description |
|---|---|---|
error.code |
int | Error code |
error.message |
String | Error description |
error.is_fatal |
bool | Whether the error is fatal |
error.network
Recorded when a network error occurs.
| Attribute | Type | Description |
|---|---|---|
error.url |
String | URL that failed |
error.message |
String | Error description |