public final class PlaybackStats extends Object
| Modifier and Type | Class | Description |
|---|---|---|
static class |
PlaybackStats.EventTimeAndException |
Stores an exception with the event time at which it occurred.
|
static class |
PlaybackStats.EventTimeAndFormat |
Stores a format with the event time at which it started being used, or
null to indicate
that no format was used. |
static class |
PlaybackStats.EventTimeAndPlaybackState |
Stores a playback state with the event time at which it became active.
|
| Modifier and Type | Field | Description |
|---|---|---|
int |
abandonedBeforeReadyCount |
The number of playbacks which were abandoned before they were ready to play.
|
int |
adPlaybackCount |
The number of ad playbacks.
|
List<PlaybackStats.EventTimeAndFormat> |
audioFormatHistory |
The audio format history as
EventTimeAndFormats ordered by
EventTime.realTimeMs. |
int |
backgroundJoiningCount |
The number of playbacks which were pre-buffered in the background.
|
static PlaybackStats |
EMPTY |
Empty playback stats.
|
int |
endedCount |
The number of playbacks which reached the ended state at least once.
|
int |
fatalErrorCount |
The total number of fatal errors.
|
List<PlaybackStats.EventTimeAndException> |
fatalErrorHistory |
The history of fatal errors as
EventTimeAndExceptions ordered by
EventTime.realTimeMs. |
int |
fatalErrorPlaybackCount |
The total number of playback with at least one fatal error.
|
long |
firstReportedTimeMs |
The elapsed real-time as returned by
SystemClock.elapsedRealtime() of the first
reported playback event, or C.TIME_UNSET if no event has been reported. |
int |
foregroundPlaybackCount |
The number of playbacks which were the active foreground playback at some point.
|
int |
initialAudioFormatBitrateCount |
The number of playbacks with initial audio format bitrate data.
|
int |
initialVideoFormatBitrateCount |
The number of playbacks with initial video format bitrate data.
|
int |
initialVideoFormatHeightCount |
The number of playbacks with initial video format height data.
|
long |
maxRebufferTimeMs |
The maximum time spent during a single rebuffer, in milliseconds, or
C.TIME_UNSET if no
rebuffer occurred. |
List<long[]> |
mediaTimeHistory |
The media time history as an ordered list of long[2] arrays with [0] being the realtime as
returned by
SystemClock.elapsedRealtime() and [1] being the media time at this
realtime, in milliseconds. |
int |
nonFatalErrorCount |
The total number of non-fatal errors.
|
List<PlaybackStats.EventTimeAndException> |
nonFatalErrorHistory |
The history of non-fatal errors as
EventTimeAndExceptions ordered
by EventTime.realTimeMs. |
static int |
PLAYBACK_STATE_ABANDONED |
Playback is abandoned before reaching the end of the media.
|
static int |
PLAYBACK_STATE_BUFFERING |
Playback is buffering to resume active playback.
|
static int |
PLAYBACK_STATE_ENDED |
Playback has reached the end of the media.
|
static int |
PLAYBACK_STATE_FAILED |
Playback is stopped due a fatal error and can be retried.
|
static int |
PLAYBACK_STATE_INTERRUPTED_BY_AD |
Playback is interrupted by an ad.
|
static int |
PLAYBACK_STATE_JOINING_BACKGROUND |
Playback is buffering in the background for initial playback start.
|
static int |
PLAYBACK_STATE_JOINING_FOREGROUND |
Playback is buffering in the foreground for initial playback start.
|
static int |
PLAYBACK_STATE_NOT_STARTED |
Playback has not started (initial state).
|
static int |
PLAYBACK_STATE_PAUSED |
Playback is paused but ready to play.
|
static int |
PLAYBACK_STATE_PAUSED_BUFFERING |
Playback is buffering while paused.
|
static int |
PLAYBACK_STATE_PLAYING |
Playback is actively playing.
|
static int |
PLAYBACK_STATE_SEEKING |
Playback is handling a seek.
|
static int |
PLAYBACK_STATE_STOPPED |
Playback is stopped and can be restarted.
|
static int |
PLAYBACK_STATE_SUPPRESSED |
Playback is suppressed (e.g.
|
static int |
PLAYBACK_STATE_SUPPRESSED_BUFFERING |
Playback is suppressed (e.g.
|
int |
playbackCount |
The number of individual playbacks for which these stats were collected.
|
List<PlaybackStats.EventTimeAndPlaybackState> |
playbackStateHistory |
The playback state history as
EventTimeAndPlaybackStates
ordered by EventTime.realTimeMs. |
long |
totalAudioFormatBitrateTimeProduct |
The accumulated sum of all audio format bitrates, in bits per second, times the time the format
was used for playback, in milliseconds.
|
long |
totalAudioFormatTimeMs |
The total media time for which audio format data is available, in milliseconds.
|
long |
totalAudioUnderruns |
The total number of audio underruns.
|
long |
totalBandwidthBytes |
The total bytes transferred during
totalBandwidthTimeMs. |
long |
totalBandwidthTimeMs |
The total time for which bandwidth measurement data is available, in milliseconds.
|
long |
totalDroppedFrames |
The total number of dropped video frames.
|
long |
totalInitialAudioFormatBitrate |
The total initial audio format bitrate for all playbacks, in bits per second, or
C.LENGTH_UNSET if no initial audio format data is available. |
long |
totalInitialVideoFormatBitrate |
The total initial video format bitrate for all playbacks, in bits per second, or
C.LENGTH_UNSET if no initial video format data is available. |
int |
totalInitialVideoFormatHeight |
The total initial video format height for all playbacks, in pixels, or
C.LENGTH_UNSET
if no initial video format data is available. |
int |
totalPauseBufferCount |
The total number of times a playback has been paused while rebuffering.
|
int |
totalPauseCount |
The total number of times a playback has been paused.
|
int |
totalRebufferCount |
The total number of times a rebuffer occurred.
|
int |
totalSeekCount |
The total number of times a seek occurred.
|
long |
totalValidJoinTimeMs |
The total time spent joining the playback, in milliseconds, or
C.TIME_UNSET if no valid
join time could be determined. |
long |
totalVideoFormatBitrateTimeMs |
The total media time for which video format bitrate data is available, in milliseconds.
|
long |
totalVideoFormatBitrateTimeProduct |
The accumulated sum of all video format bitrates, in bits per second, times the time the format
was used for playback, in milliseconds.
|
long |
totalVideoFormatHeightTimeMs |
The total media time for which video format height data is available, in milliseconds.
|
long |
totalVideoFormatHeightTimeProduct |
The accumulated sum of all video format heights, in pixels, times the time the format was used
for playback, in milliseconds.
|
int |
validJoinTimeCount |
The number of playbacks with a valid join time as documented in
totalValidJoinTimeMs. |
List<PlaybackStats.EventTimeAndFormat> |
videoFormatHistory |
The video format history as
EventTimeAndFormats ordered by
EventTime.realTimeMs. |
| Modifier and Type | Method | Description |
|---|---|---|
float |
getAbandonedBeforeReadyRatio() |
Returns the ratio of foreground playbacks which were abandoned before they were ready to play,
or
0.0 if no playback has been in foreground. |
float |
getAudioUnderrunRate() |
Returns the mean rate at which audio underruns occurred, in underruns per play time second, or
0.0 if no time was spent playing. |
float |
getDroppedFramesRate() |
Returns the mean rate at which video frames are dropped, in dropped frames per play time
second, or
0.0 if no time was spent playing. |
float |
getEndedRatio() |
Returns the ratio of foreground playbacks which reached the ended state at least once, or
0.0 if no playback has been in foreground. |
float |
getFatalErrorRate() |
Returns the rate of fatal errors, in errors per play time second, or
0.0 if no time was
spend playing. |
float |
getFatalErrorRatio() |
Returns the ratio of foreground playbacks which experienced fatal errors, or
0.0 if no
playback has been in foreground. |
float |
getJoinTimeRatio() |
Returns the ratio of foreground join time to the total time spent playing and waiting, or
0.0 if no time was spend playing or waiting. |
int |
getMeanAudioFormatBitrate() |
Returns the mean audio format bitrate, in bits per second, or
C.LENGTH_UNSET if no
audio format data is available. |
int |
getMeanBandwidth() |
Returns the mean network bandwidth based on transfer measurements, in bits per second, or
C.LENGTH_UNSET if no transfer data is available. |
long |
getMeanElapsedTimeMs() |
Returns the mean time covered by any playback state per playback, in milliseconds, or
C.TIME_UNSET if no playback was recorded. |
int |
getMeanInitialAudioFormatBitrate() |
Returns the mean initial audio format bitrate, in bits per second, or
C.LENGTH_UNSET if
no audio format data is available. |
int |
getMeanInitialVideoFormatBitrate() |
Returns the mean initial video format bitrate, in bits per second, or
C.LENGTH_UNSET if
no video format data is available. |
int |
getMeanInitialVideoFormatHeight() |
Returns the mean initial video format height, in pixels, or
C.LENGTH_UNSET if no video
format data is available. |
long |
getMeanJoinTimeMs() |
Returns the mean time spent joining the playback, in milliseconds, or
C.TIME_UNSET if
no valid join time is available. |
float |
getMeanNonFatalErrorCount() |
Returns the mean number of non-fatal errors per foreground playback, or
0.0 if no
playback has been in foreground. |
float |
getMeanPauseBufferCount() |
Returns the mean number of times a playback has been paused while rebuffering per foreground
playback, or
0.0 if no playback has been in foreground. |
float |
getMeanPauseCount() |
Returns the mean number of times a playback has been paused per foreground playback, or
0.0 if no playback has been in foreground. |
long |
getMeanPausedTimeMs() |
Returns the mean time spent in a paused state per foreground playback, in milliseconds, or
C.TIME_UNSET if no playback has been in foreground. |
long |
getMeanPlayAndWaitTimeMs() |
Returns the mean time spent playing or actively waiting for playback per foreground playback,
in milliseconds, or
C.TIME_UNSET if no playback has been in foreground. |
long |
getMeanPlayTimeMs() |
Returns the mean time spent actively playing per foreground playback, in milliseconds, or
C.TIME_UNSET if no playback has been in foreground. |
float |
getMeanRebufferCount() |
Returns the mean number of times a rebuffer occurred per foreground playback, or
0.0 if
no playback has been in foreground. |
long |
getMeanRebufferTimeMs() |
Returns the mean time spent rebuffering per foreground playback, in milliseconds, or
C.TIME_UNSET if no playback has been in foreground. |
float |
getMeanSeekCount() |
Returns the mean number of times a seek occurred per foreground playback, or
0.0 if no
playback has been in foreground. |
long |
getMeanSeekTimeMs() |
Returns the mean time spent per foreground playback from the start of a seek until playback is
ready again, in milliseconds, or
C.TIME_UNSET if no playback has been in foreground. |
long |
getMeanSingleRebufferTimeMs() |
Returns the mean time spent during a single rebuffer, in milliseconds, or
C.TIME_UNSET
if no rebuffer was recorded. |
long |
getMeanSingleSeekTimeMs() |
Returns the mean time spent from the start of a single seek until playback is ready again, in
milliseconds, or
C.TIME_UNSET if no seek occurred. |
float |
getMeanTimeBetweenFatalErrors() |
Returns the mean play time between fatal errors, in seconds.
|
float |
getMeanTimeBetweenNonFatalErrors() |
Returns the mean play time between non-fatal errors, in seconds.
|
float |
getMeanTimeBetweenRebuffers() |
Returns the mean play time between rebuffer events, in seconds.
|
int |
getMeanVideoFormatBitrate() |
Returns the mean video format bitrate, in bits per second, or
C.LENGTH_UNSET if no
video format data is available. |
int |
getMeanVideoFormatHeight() |
Returns the mean video format height, in pixels, or
C.LENGTH_UNSET if no video format
data is available. |
long |
getMeanWaitTimeMs() |
Returns the mean time spent actively waiting for playback per foreground playback, in
milliseconds, or
C.TIME_UNSET if no playback has been in foreground. |
long |
getMediaTimeMsAtRealtimeMs(long realtimeMs) |
Returns the estimated media time at the given realtime, in milliseconds, or
C.TIME_UNSET if the media time history is unknown. |
float |
getNonFatalErrorRate() |
Returns the rate of non-fatal errors, in errors per play time second, or
0.0 if no time
was spend playing. |
@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int |
getPlaybackStateAtTime(long realtimeMs) |
Returns the
PlaybackStats.PlaybackState at the given time. |
long |
getPlaybackStateDurationMs(@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int playbackState) |
Returns the total time spent in a given
PlaybackStats.PlaybackState, in milliseconds. |
float |
getRebufferRate() |
Returns the rate of rebuffer events, in rebuffers per play time second, or
0.0 if no
time was spend playing. |
float |
getRebufferTimeRatio() |
Returns the ratio of rebuffer time to the total time spent playing and waiting, or
0.0
if no time was spend playing or waiting. |
float |
getSeekTimeRatio() |
Returns the ratio of seek time to the total time spent playing and waiting, or
0.0 if
no time was spend playing or waiting. |
long |
getTotalElapsedTimeMs() |
Returns the total time covered by any playback state, in milliseconds.
|
long |
getTotalJoinTimeMs() |
Returns the total time spent joining the playback in foreground, in milliseconds.
|
long |
getTotalPausedTimeMs() |
Returns the total time spent in a paused state, in milliseconds.
|
long |
getTotalPlayAndWaitTimeMs() |
Returns the total time spent playing or actively waiting for playback, in milliseconds.
|
long |
getTotalPlayTimeMs() |
Returns the total time spent actively playing, in milliseconds.
|
long |
getTotalRebufferTimeMs() |
Returns the total time spent rebuffering, in milliseconds.
|
long |
getTotalSeekTimeMs() |
Returns the total time spent from the start of a seek until playback is ready again, in
milliseconds.
|
long |
getTotalWaitTimeMs() |
Returns the total time spent actively waiting for playback, in milliseconds.
|
float |
getWaitTimeRatio() |
Returns the ratio of wait times to the total time spent playing and waiting, or
0.0 if
no time was spend playing or waiting. |
static PlaybackStats |
merge(PlaybackStats... playbackStats) |
Returns the combined
PlaybackStats for all input PlaybackStats. |
public static final int PLAYBACK_STATE_NOT_STARTED
public static final int PLAYBACK_STATE_JOINING_BACKGROUND
public static final int PLAYBACK_STATE_JOINING_FOREGROUND
public static final int PLAYBACK_STATE_PLAYING
public static final int PLAYBACK_STATE_PAUSED
public static final int PLAYBACK_STATE_SEEKING
public static final int PLAYBACK_STATE_BUFFERING
public static final int PLAYBACK_STATE_PAUSED_BUFFERING
public static final int PLAYBACK_STATE_SUPPRESSED
public static final int PLAYBACK_STATE_SUPPRESSED_BUFFERING
public static final int PLAYBACK_STATE_ENDED
public static final int PLAYBACK_STATE_STOPPED
public static final int PLAYBACK_STATE_FAILED
public static final int PLAYBACK_STATE_INTERRUPTED_BY_AD
public static final int PLAYBACK_STATE_ABANDONED
public static final PlaybackStats EMPTY
public final int playbackCount
public final List<PlaybackStats.EventTimeAndPlaybackState> playbackStateHistory
EventTimeAndPlaybackStates
ordered by EventTime.realTimeMs.public final List<long[]> mediaTimeHistory
SystemClock.elapsedRealtime() and [1] being the media time at this
realtime, in milliseconds.public final long firstReportedTimeMs
SystemClock.elapsedRealtime() of the first
reported playback event, or C.TIME_UNSET if no event has been reported.public final int foregroundPlaybackCount
public final int abandonedBeforeReadyCount
public final int endedCount
public final int backgroundJoiningCount
public final long totalValidJoinTimeMs
C.TIME_UNSET if no valid
join time could be determined.
Note that this does not include background joining time. A join time may be invalid if the
playback never reached PLAYBACK_STATE_PLAYING or PLAYBACK_STATE_PAUSED, or
joining was interrupted by a seek, stop, or error state.
public final int validJoinTimeCount
totalValidJoinTimeMs.public final int totalPauseCount
public final int totalPauseBufferCount
public final int totalSeekCount
public final int totalRebufferCount
public final long maxRebufferTimeMs
C.TIME_UNSET if no
rebuffer occurred.public final int adPlaybackCount
public final List<PlaybackStats.EventTimeAndFormat> videoFormatHistory
EventTimeAndFormats ordered by
EventTime.realTimeMs. The Format may be null if no video format was used.public final List<PlaybackStats.EventTimeAndFormat> audioFormatHistory
EventTimeAndFormats ordered by
EventTime.realTimeMs. The Format may be null if no audio format was used.public final long totalVideoFormatHeightTimeMs
public final long totalVideoFormatHeightTimeProduct
public final long totalVideoFormatBitrateTimeMs
public final long totalVideoFormatBitrateTimeProduct
public final long totalAudioFormatTimeMs
public final long totalAudioFormatBitrateTimeProduct
public final int initialVideoFormatHeightCount
public final int initialVideoFormatBitrateCount
public final int totalInitialVideoFormatHeight
C.LENGTH_UNSET
if no initial video format data is available.public final long totalInitialVideoFormatBitrate
C.LENGTH_UNSET if no initial video format data is available.public final int initialAudioFormatBitrateCount
public final long totalInitialAudioFormatBitrate
C.LENGTH_UNSET if no initial audio format data is available.public final long totalBandwidthTimeMs
public final long totalBandwidthBytes
totalBandwidthTimeMs.public final long totalDroppedFrames
public final long totalAudioUnderruns
public final int fatalErrorPlaybackCount
public final int fatalErrorCount
public final int nonFatalErrorCount
public final List<PlaybackStats.EventTimeAndException> fatalErrorHistory
EventTimeAndExceptions ordered by
EventTime.realTimeMs. Errors are fatal if playback stopped due to this error.public final List<PlaybackStats.EventTimeAndException> nonFatalErrorHistory
EventTimeAndExceptions ordered
by EventTime.realTimeMs. Errors are non-fatal if playback can recover from the error
without stopping.public static PlaybackStats merge(PlaybackStats... playbackStats)
PlaybackStats for all input PlaybackStats.
Note that the full history of events is not kept as the history only makes sense in the context of a single playback.
playbackStats - Array of PlaybackStats to combine.PlaybackStats.public long getPlaybackStateDurationMs(@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int playbackState)
PlaybackStats.PlaybackState, in milliseconds.playbackState - A PlaybackStats.PlaybackState.public @com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int getPlaybackStateAtTime(long realtimeMs)
PlaybackStats.PlaybackState at the given time.realtimeMs - The time as returned by SystemClock.elapsedRealtime().PlaybackStats.PlaybackState at that time, or PLAYBACK_STATE_NOT_STARTED if the
given time is before the first known playback state in the history.public long getMediaTimeMsAtRealtimeMs(long realtimeMs)
C.TIME_UNSET if the media time history is unknown.realtimeMs - The realtime as returned by SystemClock.elapsedRealtime().C.TIME_UNSET if no
estimate can be given.public long getMeanJoinTimeMs()
C.TIME_UNSET if
no valid join time is available. Only includes playbacks with valid join times as documented in
totalValidJoinTimeMs.public long getTotalJoinTimeMs()
PLAYBACK_STATE_PLAYING or
PLAYBACK_STATE_PAUSED, or joining was interrupted by a seek, stop, or error state.public long getTotalPlayTimeMs()
public long getMeanPlayTimeMs()
C.TIME_UNSET if no playback has been in foreground.public long getTotalPausedTimeMs()
public long getMeanPausedTimeMs()
C.TIME_UNSET if no playback has been in foreground.public long getTotalRebufferTimeMs()
public long getMeanRebufferTimeMs()
C.TIME_UNSET if no playback has been in foreground. This excludes initial join times, buffer
times after a seek and buffering while paused.public long getMeanSingleRebufferTimeMs()
C.TIME_UNSET
if no rebuffer was recorded. This excludes initial join times and buffer times after a seek.public long getTotalSeekTimeMs()
public long getMeanSeekTimeMs()
C.TIME_UNSET if no playback has been in foreground.public long getMeanSingleSeekTimeMs()
C.TIME_UNSET if no seek occurred.public long getTotalWaitTimeMs()
public long getMeanWaitTimeMs()
C.TIME_UNSET if no playback has been in foreground. This includes all
join times, rebuffer times and seek times, but excludes times without user intention to play,
e.g. all paused states.public long getTotalPlayAndWaitTimeMs()
public long getMeanPlayAndWaitTimeMs()
C.TIME_UNSET if no playback has been in foreground.public long getTotalElapsedTimeMs()
public long getMeanElapsedTimeMs()
C.TIME_UNSET if no playback was recorded.public float getAbandonedBeforeReadyRatio()
0.0 if no playback has been in foreground.public float getEndedRatio()
0.0 if no playback has been in foreground.public float getMeanPauseCount()
0.0 if no playback has been in foreground.public float getMeanPauseBufferCount()
0.0 if no playback has been in foreground.public float getMeanSeekCount()
0.0 if no
playback has been in foreground. This includes seeks happening before playback resumed after
another seek.public float getMeanRebufferCount()
0.0 if
no playback has been in foreground. This excludes initial joining and buffering after seek.public float getWaitTimeRatio()
0.0 if
no time was spend playing or waiting. This is equivalent to getTotalWaitTimeMs() /
getTotalPlayAndWaitTimeMs() and also to getJoinTimeRatio() + getRebufferTimeRatio() + getSeekTimeRatio().public float getJoinTimeRatio()
0.0 if no time was spend playing or waiting. This is equivalent to getTotalJoinTimeMs() / getTotalPlayAndWaitTimeMs().public float getRebufferTimeRatio()
0.0
if no time was spend playing or waiting. This is equivalent to getTotalRebufferTimeMs() / getTotalPlayAndWaitTimeMs().public float getSeekTimeRatio()
0.0 if
no time was spend playing or waiting. This is equivalent to getTotalSeekTimeMs() /
getTotalPlayAndWaitTimeMs().public float getRebufferRate()
0.0 if no
time was spend playing. This is equivalent to 1.0 / getMeanTimeBetweenRebuffers().public float getMeanTimeBetweenRebuffers()
getRebufferRate(). Note that this may return Float.POSITIVE_INFINITY.public int getMeanInitialVideoFormatHeight()
C.LENGTH_UNSET if no video
format data is available.public int getMeanInitialVideoFormatBitrate()
C.LENGTH_UNSET if
no video format data is available.public int getMeanInitialAudioFormatBitrate()
C.LENGTH_UNSET if
no audio format data is available.public int getMeanVideoFormatHeight()
C.LENGTH_UNSET if no video format
data is available. This is a weighted average taking the time the format was used for playback
into account.public int getMeanVideoFormatBitrate()
C.LENGTH_UNSET if no
video format data is available. This is a weighted average taking the time the format was used
for playback into account.public int getMeanAudioFormatBitrate()
C.LENGTH_UNSET if no
audio format data is available. This is a weighted average taking the time the format was used
for playback into account.public int getMeanBandwidth()
C.LENGTH_UNSET if no transfer data is available.public float getDroppedFramesRate()
0.0 if no time was spent playing.public float getAudioUnderrunRate()
0.0 if no time was spent playing.public float getFatalErrorRatio()
0.0 if no
playback has been in foreground.public float getFatalErrorRate()
0.0 if no time was
spend playing. This is equivalent to 1.0 / getMeanTimeBetweenFatalErrors().public float getMeanTimeBetweenFatalErrors()
getFatalErrorRate(). Note that this may return Float.POSITIVE_INFINITY.public float getMeanNonFatalErrorCount()
0.0 if no
playback has been in foreground.public float getNonFatalErrorRate()
0.0 if no time
was spend playing. This is equivalent to 1.0 / getMeanTimeBetweenNonFatalErrors().public float getMeanTimeBetweenNonFatalErrors()
getNonFatalErrorRate(). Note that this may return Float.POSITIVE_INFINITY.