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