Skip to content

Comments

Feat: QOE Attributes#167

Open
swatijha23 wants to merge 8 commits intodevelopfrom
NR-480385-IOS-QoE-implementation
Open

Feat: QOE Attributes#167
swatijha23 wants to merge 8 commits intodevelopfrom
NR-480385-IOS-QoE-implementation

Conversation

@swatijha23
Copy link
Collaborator

@swatijha23 swatijha23 commented Jan 13, 2026

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;

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

https://docs.google.com/spreadsheets/d/1nW-WDhA-cCbCKpb_EowY99d7VKGAduy9KyxlYW1elvY/edit?gid=1943942889#gid=1943942889

@swatijha23
Copy link
Collaborator Author

NOVA review

@swatijha23 swatijha23 requested a review from ametku January 13, 2026 05:57
@ametku ametku changed the base branch from master to develop January 13, 2026 06:30
@swatijha23 swatijha23 changed the title QOE Attributes Feat: QOE Attributes Jan 13, 2026
@avinash-newrelic avinash-newrelic force-pushed the NR-480385-IOS-QoE-implementation branch from d70056f to 91ddeca Compare February 10, 2026 08:59
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.

1 participant