Skip to content

Conversation

@swatijha23
Copy link
Collaborator

@swatijha23 swatijha23 commented Dec 24, 2025

KPIs are calculated based on this doc - https://newrelic.atlassian.net/wiki/spaces/VERTSOL/pages/4702274467/KPIs+Transformation+QOE+Score

kpi.startupTime
kpi.startupTime = timeSinceRequested
Source: TimeSince mechanism tracking time from CONTENT_REQUEST to current moment

kpi.peakBitrate
Formula: Maximum value tracking
kpi.peakBitrate = MAX(bitrate_1, bitrate_2, ..., bitrate_n)

kpi.hadStartupFailure

Formula: Boolean logic based on playback state
kpi.hadStartupFailure = (timeSinceStarted == null)

Logic:

true = Error occurred before CONTENT_START (no timeSinceStarted attribute exists)
false = Playback started successfully
kpi.hadPlaybackFailure
Formula: Boolean flag set on error during playback
kpi.hadPlaybackFailure = qoeHadPlaybackFailure

Tracking Logic:
// On CONTENT_ERROR:

kpi.totalRebufferingTime
Formula: Cumulative sum of rebuffering durations
kpi.totalRebufferingTime = Σ(rebuffer_duration_i) where buffer_type ≠ "initial"

Tracking Logic:
// On each CONTENT_BUFFER_END:

kpi.rebufferingRatio
Formula: Percentage of time spent rebuffering
double rebufferingRatio = ((double) qoeTotalRebufferingTime / totalPlaytime) * 100;

  1. kpi.totalPlaytime
    Formula: Direct attribute mapping
    kpi.totalPlaytime = totalPlaytime

Source: Accumulated through updatePlaytime() mechanism

kpi.averageBitrate (NEW: Time-Weighted)
Formula: Time-weighted average of bitrates
// Primary calculation (time-weighted):
if (qoeTotalActiveTime > 0) {
kpi.averageBitrate = qoeTotalBitrateWeightedTime / qoeTotalActiveTime
}

// Fallback calculation (simple average):
else if (qoeBitrateCount > 0) {
kpi.averageBitrate = qoeBitrateSum / qoeBitrateCount
}

Time-Weighted Tracking:
// On each rendition change:
segmentDuration = currentTime - qoeLastRenditionChangeTime
qoeTotalBitrateWeightedTime += (previousBitrate × segmentDuration)
qoeTotalActiveTime += segmentDuration

// During calculation, include current segment:
currentSegmentDuration = currentTime - qoeLastRenditionChangeTime
totalWeightedTime = qoeTotalBitrateWeightedTime + (currentBitrate × currentSegmentDuration)
totalTime = qoeTotalActiveTime + currentSegmentDuration

averageBitrate = totalWeightedTime / totalTime

Mathematical Representation:
Average = Σ(bitrate_i × duration_i) / Σ(duration_i)

Where:

bitrate_i = bitrate during segment i
duration_i = time duration of segment i
i = 1 to n rendition changes

#58

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants