@@ -4,13 +4,15 @@ package video.typetype.tv.player
44
55import android.os.SystemClock
66import androidx.media3.common.Player
7+ import androidx.media3.exoplayer.DecoderCounters
78import androidx.media3.exoplayer.analytics.AnalyticsListener
89
910internal data class TvPlaybackQualitySnapshot (
1011 val startupMilliseconds : Long? ,
1112 val playedMilliseconds : Long ,
1213 val rebufferMilliseconds : Long ,
1314 val droppedVideoFrames : Long ,
15+ val renderedVideoFrames : Long ,
1416)
1517
1618internal class TvPlaybackQualityMetrics : AnalyticsListener {
@@ -21,6 +23,7 @@ internal class TvPlaybackQualityMetrics : AnalyticsListener {
2123 private var playedMilliseconds = 0L
2224 private var rebufferMilliseconds = 0L
2325 private var droppedVideoFrames = 0L
26+ private var renderedVideoFrames = 0L
2427
2528 fun onPlaybackRequested (now : Long = SystemClock .elapsedRealtime()) {
2629 playStartedAt = now
@@ -30,6 +33,7 @@ internal class TvPlaybackQualityMetrics : AnalyticsListener {
3033 playedMilliseconds = 0L
3134 rebufferMilliseconds = 0L
3235 droppedVideoFrames = 0L
36+ renderedVideoFrames = 0L
3337 }
3438
3539 fun onPlaybackStateChanged (state : Int , now : Long = SystemClock .elapsedRealtime()) {
@@ -72,6 +76,18 @@ internal class TvPlaybackQualityMetrics : AnalyticsListener {
7276 onDroppedVideoFramesCount(droppedFrames)
7377 }
7478
79+ override fun onVideoDisabled (
80+ eventTime : AnalyticsListener .EventTime ,
81+ counters : DecoderCounters ,
82+ ) {
83+ counters.ensureUpdated()
84+ onRenderedVideoFramesCount(counters.renderedOutputBufferCount)
85+ }
86+
87+ fun onRenderedVideoFramesCount (renderedFrames : Int ) {
88+ renderedVideoFrames + = renderedFrames.coerceAtLeast(0 ).toLong()
89+ }
90+
7591 fun onDroppedVideoFramesCount (droppedFrames : Int ) {
7692 droppedVideoFrames + = droppedFrames.coerceAtLeast(0 ).toLong()
7793 }
@@ -89,6 +105,7 @@ internal class TvPlaybackQualityMetrics : AnalyticsListener {
89105 playedMilliseconds = played,
90106 rebufferMilliseconds = rebuffered,
91107 droppedVideoFrames = droppedVideoFrames,
108+ renderedVideoFrames = renderedVideoFrames,
92109 )
93110 }
94111
0 commit comments