media/docs/doc/reference/com/google/android/exoplayer2/analytics/PlaybackStats.html
2021-04-21 11:00:57 +01:00

2288 lines
118 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head><!-- start favicons snippet, use https://realfavicongenerator.net/ --><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="mask-icon" href="/assets/safari-pinned-tab.svg" color="#fc4d50"><link rel="shortcut icon" href="/assets/favicon.ico"><meta name="msapplication-TileColor" content="#ffc40d"><meta name="msapplication-config" content="/assets/browserconfig.xml"><meta name="theme-color" content="#ffffff"><!-- end favicons snippet -->
<title>PlaybackStats (ExoPlayer library)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-1.10.2.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PlaybackStats (ExoPlayer library)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?com/google/android/exoplayer2/analytics/PlaybackStats.html" target="_top">Frames</a></li>
<li><a href="PlaybackStats.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="../../../../../com/google/android/exoplayer2/analytics/package-summary.html">com.google.android.exoplayer2.analytics</a></div>
<h2 title="Class PlaybackStats" class="title">Class PlaybackStats</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>com.google.android.exoplayer2.analytics.PlaybackStats</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public final class <span class="typeNameLabel">PlaybackStats</span>
extends <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a></pre>
<div class="block">Statistics about playbacks.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats.EventTimeAndException</a></span></code></th>
<td class="colLast">
<div class="block">Stores an exception with the event time at which it occurred.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats.EventTimeAndFormat</a></span></code></th>
<td class="colLast">
<div class="block">Stores a format with the event time at which it started being used, or <code>null</code> to indicate
that no format was used.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndPlaybackState.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats.EventTimeAndPlaybackState</a></span></code></th>
<td class="colLast">
<div class="block">Stores a playback state with the event time at which it became active.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#abandonedBeforeReadyCount">abandonedBeforeReadyCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks which were abandoned before they were ready to play.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#adPlaybackCount">adPlaybackCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of ad playbacks.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndFormat</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#audioFormatHistory">audioFormatHistory</a></span></code></th>
<td class="colLast">
<div class="block">The audio format history as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndFormats</code></a> ordered by <code>
EventTime.realTimeMs</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#backgroundJoiningCount">backgroundJoiningCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks which were pre-buffered in the background.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#EMPTY">EMPTY</a></span></code></th>
<td class="colLast">
<div class="block">Empty playback stats.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#endedCount">endedCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks which reached the ended state at least once.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#fatalErrorCount">fatalErrorCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of fatal errors.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndException</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#fatalErrorHistory">fatalErrorHistory</a></span></code></th>
<td class="colLast">
<div class="block">The history of fatal errors as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndExceptions</code></a> ordered by
<code>EventTime.realTimeMs</code>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#fatalErrorPlaybackCount">fatalErrorPlaybackCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of playback with at least one fatal error.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#firstReportedTimeMs">firstReportedTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The elapsed real-time as returned by <code>SystemClock.elapsedRealtime()</code> of the first
reported playback event, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no event has been reported.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#foregroundPlaybackCount">foregroundPlaybackCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks which were the active foreground playback at some point.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#initialAudioFormatBitrateCount">initialAudioFormatBitrateCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks with initial audio format bitrate data.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#initialVideoFormatBitrateCount">initialVideoFormatBitrateCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks with initial video format bitrate data.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#initialVideoFormatHeightCount">initialVideoFormatHeightCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks with initial video format height data.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#maxRebufferTimeMs">maxRebufferTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The maximum time spent during a single rebuffer, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no
rebuffer occurred.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink" target="_top">List</a>&lt;long[]&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#mediaTimeHistory">mediaTimeHistory</a></span></code></th>
<td class="colLast">
<div class="block">The media time history as an ordered list of long[2] arrays with [0] being the realtime as
returned by <code>SystemClock.elapsedRealtime()</code> and [1] being the media time at this
realtime, in milliseconds.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#nonFatalErrorCount">nonFatalErrorCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of non-fatal errors.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndException</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#nonFatalErrorHistory">nonFatalErrorHistory</a></span></code></th>
<td class="colLast">
<div class="block">The history of non-fatal errors as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndExceptions</code></a> ordered
by <code>EventTime.realTimeMs</code>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_ABANDONED">PLAYBACK_STATE_ABANDONED</a></span></code></th>
<td class="colLast">
<div class="block">Playback is abandoned before reaching the end of the media.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_BUFFERING">PLAYBACK_STATE_BUFFERING</a></span></code></th>
<td class="colLast">
<div class="block">Playback is buffering to resume active playback.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_ENDED">PLAYBACK_STATE_ENDED</a></span></code></th>
<td class="colLast">
<div class="block">Playback has reached the end of the media.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_FAILED">PLAYBACK_STATE_FAILED</a></span></code></th>
<td class="colLast">
<div class="block">Playback is stopped due a fatal error and can be retried.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_INTERRUPTED_BY_AD">PLAYBACK_STATE_INTERRUPTED_BY_AD</a></span></code></th>
<td class="colLast">
<div class="block">Playback is interrupted by an ad.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_JOINING_BACKGROUND">PLAYBACK_STATE_JOINING_BACKGROUND</a></span></code></th>
<td class="colLast">
<div class="block">Playback is buffering in the background for initial playback start.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_JOINING_FOREGROUND">PLAYBACK_STATE_JOINING_FOREGROUND</a></span></code></th>
<td class="colLast">
<div class="block">Playback is buffering in the foreground for initial playback start.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_NOT_STARTED">PLAYBACK_STATE_NOT_STARTED</a></span></code></th>
<td class="colLast">
<div class="block">Playback has not started (initial state).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PAUSED">PLAYBACK_STATE_PAUSED</a></span></code></th>
<td class="colLast">
<div class="block">Playback is paused but ready to play.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PAUSED_BUFFERING">PLAYBACK_STATE_PAUSED_BUFFERING</a></span></code></th>
<td class="colLast">
<div class="block">Playback is buffering while paused.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PLAYING">PLAYBACK_STATE_PLAYING</a></span></code></th>
<td class="colLast">
<div class="block">Playback is actively playing.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_SEEKING">PLAYBACK_STATE_SEEKING</a></span></code></th>
<td class="colLast">
<div class="block">Playback is handling a seek.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_STOPPED">PLAYBACK_STATE_STOPPED</a></span></code></th>
<td class="colLast">
<div class="block">Playback is stopped and can be restarted.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_SUPPRESSED">PLAYBACK_STATE_SUPPRESSED</a></span></code></th>
<td class="colLast">
<div class="block">Playback is suppressed (e.g.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_SUPPRESSED_BUFFERING">PLAYBACK_STATE_SUPPRESSED_BUFFERING</a></span></code></th>
<td class="colLast">
<div class="block">Playback is suppressed (e.g.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#playbackCount">playbackCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of individual playbacks for which these stats were collected.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndPlaybackState.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndPlaybackState</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#playbackStateHistory">playbackStateHistory</a></span></code></th>
<td class="colLast">
<div class="block">The playback state history as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndPlaybackState.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndPlaybackStates</code></a>
ordered by <code>EventTime.realTimeMs</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalAudioFormatBitrateTimeProduct">totalAudioFormatBitrateTimeProduct</a></span></code></th>
<td class="colLast">
<div class="block">The accumulated sum of all audio format bitrates, in bits per second, times the time the format
was used for playback, in milliseconds.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalAudioFormatTimeMs">totalAudioFormatTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The total media time for which audio format data is available, in milliseconds.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalAudioUnderruns">totalAudioUnderruns</a></span></code></th>
<td class="colLast">
<div class="block">The total number of audio underruns.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalBandwidthBytes">totalBandwidthBytes</a></span></code></th>
<td class="colLast">
<div class="block">The total bytes transferred during <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalBandwidthTimeMs"><code>totalBandwidthTimeMs</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalBandwidthTimeMs">totalBandwidthTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The total time for which bandwidth measurement data is available, in milliseconds.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalDroppedFrames">totalDroppedFrames</a></span></code></th>
<td class="colLast">
<div class="block">The total number of dropped video frames.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalInitialAudioFormatBitrate">totalInitialAudioFormatBitrate</a></span></code></th>
<td class="colLast">
<div class="block">The total initial audio format bitrate for all playbacks, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no initial audio format data is available.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalInitialVideoFormatBitrate">totalInitialVideoFormatBitrate</a></span></code></th>
<td class="colLast">
<div class="block">The total initial video format bitrate for all playbacks, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no initial video format data is available.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalInitialVideoFormatHeight">totalInitialVideoFormatHeight</a></span></code></th>
<td class="colLast">
<div class="block">The total initial video format height for all playbacks, in pixels, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a>
if no initial video format data is available.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalPauseBufferCount">totalPauseBufferCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of times a playback has been paused while rebuffering.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalPauseCount">totalPauseCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of times a playback has been paused.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalRebufferCount">totalRebufferCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of times a rebuffer occurred.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalSeekCount">totalSeekCount</a></span></code></th>
<td class="colLast">
<div class="block">The total number of times a seek occurred.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalValidJoinTimeMs">totalValidJoinTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The total time spent joining the playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no valid
join time could be determined.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalVideoFormatBitrateTimeMs">totalVideoFormatBitrateTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The total media time for which video format bitrate data is available, in milliseconds.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalVideoFormatBitrateTimeProduct">totalVideoFormatBitrateTimeProduct</a></span></code></th>
<td class="colLast">
<div class="block">The accumulated sum of all video format bitrates, in bits per second, times the time the format
was used for playback, in milliseconds.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalVideoFormatHeightTimeMs">totalVideoFormatHeightTimeMs</a></span></code></th>
<td class="colLast">
<div class="block">The total media time for which video format height data is available, in milliseconds.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalVideoFormatHeightTimeProduct">totalVideoFormatHeightTimeProduct</a></span></code></th>
<td class="colLast">
<div class="block">The accumulated sum of all video format heights, in pixels, times the time the format was used
for playback, in milliseconds.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#validJoinTimeCount">validJoinTimeCount</a></span></code></th>
<td class="colLast">
<div class="block">The number of playbacks with a valid join time as documented in <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalValidJoinTimeMs"><code>totalValidJoinTimeMs</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndFormat</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#videoFormatHistory">videoFormatHistory</a></span></code></th>
<td class="colLast">
<div class="block">The video format history as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndFormats</code></a> ordered by <code>
EventTime.realTimeMs</code>.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getAbandonedBeforeReadyRatio--">getAbandonedBeforeReadyRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of foreground playbacks which were abandoned before they were ready to play,
or <code>0.0</code> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getAudioUnderrunRate--">getAudioUnderrunRate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean rate at which audio underruns occurred, in underruns per play time second, or
<code>0.0</code> if no time was spent playing.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getDroppedFramesRate--">getDroppedFramesRate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean rate at which video frames are dropped, in dropped frames per play time
second, or <code>0.0</code> if no time was spent playing.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getEndedRatio--">getEndedRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of foreground playbacks which reached the ended state at least once, or
<code>0.0</code> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getFatalErrorRate--">getFatalErrorRate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the rate of fatal errors, in errors per play time second, or <code>0.0</code> if no time was
spend playing.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getFatalErrorRatio--">getFatalErrorRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of foreground playbacks which experienced fatal errors, or <code>0.0</code> if no
playback has been in foreground.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getJoinTimeRatio--">getJoinTimeRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of foreground join time to the total time spent playing and waiting, or
<code>0.0</code> if no time was spend playing or waiting.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanAudioFormatBitrate--">getMeanAudioFormatBitrate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean audio format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no
audio format data is available.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanBandwidth--">getMeanBandwidth</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean network bandwidth based on transfer measurements, in bits per second, or
<a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no transfer data is available.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanElapsedTimeMs--">getMeanElapsedTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time covered by any playback state per playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback was recorded.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanInitialAudioFormatBitrate--">getMeanInitialAudioFormatBitrate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean initial audio format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if
no audio format data is available.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanInitialVideoFormatBitrate--">getMeanInitialVideoFormatBitrate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean initial video format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if
no video format data is available.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanInitialVideoFormatHeight--">getMeanInitialVideoFormatHeight</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean initial video format height, in pixels, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no video
format data is available.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanJoinTimeMs--">getMeanJoinTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent joining the playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if
no valid join time is available.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanNonFatalErrorCount--">getMeanNonFatalErrorCount</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean number of non-fatal errors per foreground playback, or <code>0.0</code> if no
playback has been in foreground.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanPauseBufferCount--">getMeanPauseBufferCount</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean number of times a playback has been paused while rebuffering per foreground
playback, or <code>0.0</code> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanPauseCount--">getMeanPauseCount</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean number of times a playback has been paused per foreground playback, or <code>
0.0</code> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanPausedTimeMs--">getMeanPausedTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent in a paused state per foreground playback, in milliseconds, or
<a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanPlayAndWaitTimeMs--">getMeanPlayAndWaitTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent playing or actively waiting for playback per foreground playback,
in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanPlayTimeMs--">getMeanPlayTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent actively playing per foreground playback, in milliseconds, or
<a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanRebufferCount--">getMeanRebufferCount</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean number of times a rebuffer occurred per foreground playback, or <code>0.0</code> if
no playback has been in foreground.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanRebufferTimeMs--">getMeanRebufferTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent rebuffering per foreground playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanSeekCount--">getMeanSeekCount</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean number of times a seek occurred per foreground playback, or <code>0.0</code> if no
playback has been in foreground.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanSeekTimeMs--">getMeanSeekTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent per foreground playback from the start of a seek until playback is
ready again, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanSingleRebufferTimeMs--">getMeanSingleRebufferTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent during a single rebuffer, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a>
if no rebuffer was recorded.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanSingleSeekTimeMs--">getMeanSingleSeekTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent from the start of a single seek until playback is ready again, in
milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no seek occurred.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanTimeBetweenFatalErrors--">getMeanTimeBetweenFatalErrors</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean play time between fatal errors, in seconds.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanTimeBetweenNonFatalErrors--">getMeanTimeBetweenNonFatalErrors</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean play time between non-fatal errors, in seconds.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanTimeBetweenRebuffers--">getMeanTimeBetweenRebuffers</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean play time between rebuffer events, in seconds.</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanVideoFormatBitrate--">getMeanVideoFormatBitrate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean video format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no
video format data is available.</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanVideoFormatHeight--">getMeanVideoFormatHeight</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean video format height, in pixels, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no video format
data is available.</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanWaitTimeMs--">getMeanWaitTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the mean time spent actively waiting for playback per foreground playback, in
milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMediaTimeMsAtRealtimeMs-long-">getMediaTimeMsAtRealtimeMs</a></span>&#8203;(long&nbsp;realtimeMs)</code></th>
<td class="colLast">
<div class="block">Returns the estimated media time at the given realtime, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if the media time history is unknown.</div>
</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getNonFatalErrorRate--">getNonFatalErrorRate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the rate of non-fatal errors, in errors per play time second, or <code>0.0</code> if no time
was spend playing.</div>
</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getPlaybackStateAtTime-long-">getPlaybackStateAtTime</a></span>&#8203;(long&nbsp;realtimeMs)</code></th>
<td class="colLast">
<div class="block">Returns the <code>PlaybackStats.PlaybackState</code> at the given time.</div>
</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getPlaybackStateDurationMs-@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackStateint-">getPlaybackStateDurationMs</a></span>&#8203;(@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int&nbsp;playbackState)</code></th>
<td class="colLast">
<div class="block">Returns the total time spent in a given <code>PlaybackStats.PlaybackState</code>, in milliseconds.</div>
</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getRebufferRate--">getRebufferRate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the rate of rebuffer events, in rebuffers per play time second, or <code>0.0</code> if no
time was spend playing.</div>
</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getRebufferTimeRatio--">getRebufferTimeRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of rebuffer time to the total time spent playing and waiting, or <code>0.0</code>
if no time was spend playing or waiting.</div>
</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getSeekTimeRatio--">getSeekTimeRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of seek time to the total time spent playing and waiting, or <code>0.0</code> if
no time was spend playing or waiting.</div>
</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalElapsedTimeMs--">getTotalElapsedTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time covered by any playback state, in milliseconds.</div>
</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalJoinTimeMs--">getTotalJoinTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent joining the playback in foreground, in milliseconds.</div>
</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPausedTimeMs--">getTotalPausedTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent in a paused state, in milliseconds.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPlayAndWaitTimeMs--">getTotalPlayAndWaitTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent playing or actively waiting for playback, in milliseconds.</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPlayTimeMs--">getTotalPlayTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent actively playing, in milliseconds.</div>
</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalRebufferTimeMs--">getTotalRebufferTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent rebuffering, in milliseconds.</div>
</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalSeekTimeMs--">getTotalSeekTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent from the start of a seek until playback is ready again, in
milliseconds.</div>
</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalWaitTimeMs--">getTotalWaitTimeMs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the total time spent actively waiting for playback, in milliseconds.</div>
</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getWaitTimeRatio--">getWaitTimeRatio</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the ratio of wait times to the total time spent playing and waiting, or <code>0.0</code> if
no time was spend playing or waiting.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>static <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#merge-com.google.android.exoplayer2.analytics.PlaybackStats...-">merge</a></span>&#8203;(<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats</a>...&nbsp;playbackStats)</code></th>
<td class="colLast">
<div class="block">Returns the combined <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics"><code>PlaybackStats</code></a> for all input <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics"><code>PlaybackStats</code></a>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a></h3>
<code><a href="https://developer.android.com/reference/java/lang/Object.html#clone--" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang" class="externalLink" target="_top">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="PLAYBACK_STATE_NOT_STARTED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_NOT_STARTED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_NOT_STARTED</pre>
<div class="block">Playback has not started (initial state).</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_NOT_STARTED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_JOINING_BACKGROUND">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_JOINING_BACKGROUND</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_JOINING_BACKGROUND</pre>
<div class="block">Playback is buffering in the background for initial playback start.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_JOINING_BACKGROUND">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_JOINING_FOREGROUND">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_JOINING_FOREGROUND</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_JOINING_FOREGROUND</pre>
<div class="block">Playback is buffering in the foreground for initial playback start.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_JOINING_FOREGROUND">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_PLAYING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_PLAYING</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_PLAYING</pre>
<div class="block">Playback is actively playing.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_PLAYING">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_PAUSED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_PAUSED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_PAUSED</pre>
<div class="block">Playback is paused but ready to play.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_PAUSED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_SEEKING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_SEEKING</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_SEEKING</pre>
<div class="block">Playback is handling a seek.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_SEEKING">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_BUFFERING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_BUFFERING</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_BUFFERING</pre>
<div class="block">Playback is buffering to resume active playback.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_BUFFERING">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_PAUSED_BUFFERING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_PAUSED_BUFFERING</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_PAUSED_BUFFERING</pre>
<div class="block">Playback is buffering while paused.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_PAUSED_BUFFERING">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_SUPPRESSED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_SUPPRESSED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_SUPPRESSED</pre>
<div class="block">Playback is suppressed (e.g. due to audio focus loss).</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_SUPPRESSED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_SUPPRESSED_BUFFERING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_SUPPRESSED_BUFFERING</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_SUPPRESSED_BUFFERING</pre>
<div class="block">Playback is suppressed (e.g. due to audio focus loss) while buffering to resume a playback.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_SUPPRESSED_BUFFERING">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_ENDED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_ENDED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_ENDED</pre>
<div class="block">Playback has reached the end of the media.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_ENDED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_STOPPED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_STOPPED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_STOPPED</pre>
<div class="block">Playback is stopped and can be restarted.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_STOPPED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_FAILED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_FAILED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_FAILED</pre>
<div class="block">Playback is stopped due a fatal error and can be retried.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_FAILED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_INTERRUPTED_BY_AD">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_INTERRUPTED_BY_AD</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_INTERRUPTED_BY_AD</pre>
<div class="block">Playback is interrupted by an ad.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_INTERRUPTED_BY_AD">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PLAYBACK_STATE_ABANDONED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PLAYBACK_STATE_ABANDONED</h4>
<pre>public static final&nbsp;int PLAYBACK_STATE_ABANDONED</pre>
<div class="block">Playback is abandoned before reaching the end of the media.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.PlaybackStats.PLAYBACK_STATE_ABANDONED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="EMPTY">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EMPTY</h4>
<pre>public static final&nbsp;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats</a> EMPTY</pre>
<div class="block">Empty playback stats.</div>
</li>
</ul>
<a name="playbackCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>playbackCount</h4>
<pre>public final&nbsp;int playbackCount</pre>
<div class="block">The number of individual playbacks for which these stats were collected.</div>
</li>
</ul>
<a name="playbackStateHistory">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>playbackStateHistory</h4>
<pre>public final&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndPlaybackState.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndPlaybackState</a>&gt; playbackStateHistory</pre>
<div class="block">The playback state history as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndPlaybackState.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndPlaybackStates</code></a>
ordered by <code>EventTime.realTimeMs</code>.</div>
</li>
</ul>
<a name="mediaTimeHistory">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mediaTimeHistory</h4>
<pre>public final&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink" target="_top">List</a>&lt;long[]&gt; mediaTimeHistory</pre>
<div class="block">The media time history as an ordered list of long[2] arrays with [0] being the realtime as
returned by <code>SystemClock.elapsedRealtime()</code> and [1] being the media time at this
realtime, in milliseconds.</div>
</li>
</ul>
<a name="firstReportedTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>firstReportedTimeMs</h4>
<pre>public final&nbsp;long firstReportedTimeMs</pre>
<div class="block">The elapsed real-time as returned by <code>SystemClock.elapsedRealtime()</code> of the first
reported playback event, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no event has been reported.</div>
</li>
</ul>
<a name="foregroundPlaybackCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>foregroundPlaybackCount</h4>
<pre>public final&nbsp;int foregroundPlaybackCount</pre>
<div class="block">The number of playbacks which were the active foreground playback at some point.</div>
</li>
</ul>
<a name="abandonedBeforeReadyCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>abandonedBeforeReadyCount</h4>
<pre>public final&nbsp;int abandonedBeforeReadyCount</pre>
<div class="block">The number of playbacks which were abandoned before they were ready to play.</div>
</li>
</ul>
<a name="endedCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>endedCount</h4>
<pre>public final&nbsp;int endedCount</pre>
<div class="block">The number of playbacks which reached the ended state at least once.</div>
</li>
</ul>
<a name="backgroundJoiningCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>backgroundJoiningCount</h4>
<pre>public final&nbsp;int backgroundJoiningCount</pre>
<div class="block">The number of playbacks which were pre-buffered in the background.</div>
</li>
</ul>
<a name="totalValidJoinTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalValidJoinTimeMs</h4>
<pre>public final&nbsp;long totalValidJoinTimeMs</pre>
<div class="block">The total time spent joining the playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no valid
join time could be determined.
<p>Note that this does not include background joining time. A join time may be invalid if the
playback never reached <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PLAYING"><code>PLAYBACK_STATE_PLAYING</code></a> or <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PAUSED"><code>PLAYBACK_STATE_PAUSED</code></a>, or
joining was interrupted by a seek, stop, or error state.</div>
</li>
</ul>
<a name="validJoinTimeCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validJoinTimeCount</h4>
<pre>public final&nbsp;int validJoinTimeCount</pre>
<div class="block">The number of playbacks with a valid join time as documented in <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalValidJoinTimeMs"><code>totalValidJoinTimeMs</code></a>.</div>
</li>
</ul>
<a name="totalPauseCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalPauseCount</h4>
<pre>public final&nbsp;int totalPauseCount</pre>
<div class="block">The total number of times a playback has been paused.</div>
</li>
</ul>
<a name="totalPauseBufferCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalPauseBufferCount</h4>
<pre>public final&nbsp;int totalPauseBufferCount</pre>
<div class="block">The total number of times a playback has been paused while rebuffering.</div>
</li>
</ul>
<a name="totalSeekCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalSeekCount</h4>
<pre>public final&nbsp;int totalSeekCount</pre>
<div class="block">The total number of times a seek occurred. This includes seeks happening before playback
resumed after another seek.</div>
</li>
</ul>
<a name="totalRebufferCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalRebufferCount</h4>
<pre>public final&nbsp;int totalRebufferCount</pre>
<div class="block">The total number of times a rebuffer occurred. This excludes initial joining and buffering
after seek.</div>
</li>
</ul>
<a name="maxRebufferTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>maxRebufferTimeMs</h4>
<pre>public final&nbsp;long maxRebufferTimeMs</pre>
<div class="block">The maximum time spent during a single rebuffer, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no
rebuffer occurred.</div>
</li>
</ul>
<a name="adPlaybackCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>adPlaybackCount</h4>
<pre>public final&nbsp;int adPlaybackCount</pre>
<div class="block">The number of ad playbacks.</div>
</li>
</ul>
<a name="videoFormatHistory">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>videoFormatHistory</h4>
<pre>public final&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndFormat</a>&gt; videoFormatHistory</pre>
<div class="block">The video format history as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndFormats</code></a> ordered by <code>
EventTime.realTimeMs</code>. The <a href="../../../../../com/google/android/exoplayer2/Format.html" title="class in com.google.android.exoplayer2"><code>Format</code></a> may be null if no video format was used.</div>
</li>
</ul>
<a name="audioFormatHistory">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>audioFormatHistory</h4>
<pre>public final&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndFormat</a>&gt; audioFormatHistory</pre>
<div class="block">The audio format history as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndFormat.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndFormats</code></a> ordered by <code>
EventTime.realTimeMs</code>. The <a href="../../../../../com/google/android/exoplayer2/Format.html" title="class in com.google.android.exoplayer2"><code>Format</code></a> may be null if no audio format was used.</div>
</li>
</ul>
<a name="totalVideoFormatHeightTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalVideoFormatHeightTimeMs</h4>
<pre>public final&nbsp;long totalVideoFormatHeightTimeMs</pre>
<div class="block">The total media time for which video format height data is available, in milliseconds.</div>
</li>
</ul>
<a name="totalVideoFormatHeightTimeProduct">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalVideoFormatHeightTimeProduct</h4>
<pre>public final&nbsp;long totalVideoFormatHeightTimeProduct</pre>
<div class="block">The accumulated sum of all video format heights, in pixels, times the time the format was used
for playback, in milliseconds.</div>
</li>
</ul>
<a name="totalVideoFormatBitrateTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalVideoFormatBitrateTimeMs</h4>
<pre>public final&nbsp;long totalVideoFormatBitrateTimeMs</pre>
<div class="block">The total media time for which video format bitrate data is available, in milliseconds.</div>
</li>
</ul>
<a name="totalVideoFormatBitrateTimeProduct">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalVideoFormatBitrateTimeProduct</h4>
<pre>public final&nbsp;long totalVideoFormatBitrateTimeProduct</pre>
<div class="block">The accumulated sum of all video format bitrates, in bits per second, times the time the format
was used for playback, in milliseconds.</div>
</li>
</ul>
<a name="totalAudioFormatTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalAudioFormatTimeMs</h4>
<pre>public final&nbsp;long totalAudioFormatTimeMs</pre>
<div class="block">The total media time for which audio format data is available, in milliseconds.</div>
</li>
</ul>
<a name="totalAudioFormatBitrateTimeProduct">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalAudioFormatBitrateTimeProduct</h4>
<pre>public final&nbsp;long totalAudioFormatBitrateTimeProduct</pre>
<div class="block">The accumulated sum of all audio format bitrates, in bits per second, times the time the format
was used for playback, in milliseconds.</div>
</li>
</ul>
<a name="initialVideoFormatHeightCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>initialVideoFormatHeightCount</h4>
<pre>public final&nbsp;int initialVideoFormatHeightCount</pre>
<div class="block">The number of playbacks with initial video format height data.</div>
</li>
</ul>
<a name="initialVideoFormatBitrateCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>initialVideoFormatBitrateCount</h4>
<pre>public final&nbsp;int initialVideoFormatBitrateCount</pre>
<div class="block">The number of playbacks with initial video format bitrate data.</div>
</li>
</ul>
<a name="totalInitialVideoFormatHeight">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalInitialVideoFormatHeight</h4>
<pre>public final&nbsp;int totalInitialVideoFormatHeight</pre>
<div class="block">The total initial video format height for all playbacks, in pixels, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a>
if no initial video format data is available.</div>
</li>
</ul>
<a name="totalInitialVideoFormatBitrate">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalInitialVideoFormatBitrate</h4>
<pre>public final&nbsp;long totalInitialVideoFormatBitrate</pre>
<div class="block">The total initial video format bitrate for all playbacks, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no initial video format data is available.</div>
</li>
</ul>
<a name="initialAudioFormatBitrateCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>initialAudioFormatBitrateCount</h4>
<pre>public final&nbsp;int initialAudioFormatBitrateCount</pre>
<div class="block">The number of playbacks with initial audio format bitrate data.</div>
</li>
</ul>
<a name="totalInitialAudioFormatBitrate">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalInitialAudioFormatBitrate</h4>
<pre>public final&nbsp;long totalInitialAudioFormatBitrate</pre>
<div class="block">The total initial audio format bitrate for all playbacks, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no initial audio format data is available.</div>
</li>
</ul>
<a name="totalBandwidthTimeMs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalBandwidthTimeMs</h4>
<pre>public final&nbsp;long totalBandwidthTimeMs</pre>
<div class="block">The total time for which bandwidth measurement data is available, in milliseconds.</div>
</li>
</ul>
<a name="totalBandwidthBytes">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalBandwidthBytes</h4>
<pre>public final&nbsp;long totalBandwidthBytes</pre>
<div class="block">The total bytes transferred during <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalBandwidthTimeMs"><code>totalBandwidthTimeMs</code></a>.</div>
</li>
</ul>
<a name="totalDroppedFrames">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalDroppedFrames</h4>
<pre>public final&nbsp;long totalDroppedFrames</pre>
<div class="block">The total number of dropped video frames.</div>
</li>
</ul>
<a name="totalAudioUnderruns">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>totalAudioUnderruns</h4>
<pre>public final&nbsp;long totalAudioUnderruns</pre>
<div class="block">The total number of audio underruns.</div>
</li>
</ul>
<a name="fatalErrorPlaybackCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fatalErrorPlaybackCount</h4>
<pre>public final&nbsp;int fatalErrorPlaybackCount</pre>
<div class="block">The total number of playback with at least one fatal error. Errors are fatal if playback
stopped due to this error.</div>
</li>
</ul>
<a name="fatalErrorCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fatalErrorCount</h4>
<pre>public final&nbsp;int fatalErrorCount</pre>
<div class="block">The total number of fatal errors. Errors are fatal if playback stopped due to this error.</div>
</li>
</ul>
<a name="nonFatalErrorCount">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nonFatalErrorCount</h4>
<pre>public final&nbsp;int nonFatalErrorCount</pre>
<div class="block">The total number of non-fatal errors. Error are non-fatal if playback can recover from the
error without stopping.</div>
</li>
</ul>
<a name="fatalErrorHistory">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fatalErrorHistory</h4>
<pre>public final&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndException</a>&gt; fatalErrorHistory</pre>
<div class="block">The history of fatal errors as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndExceptions</code></a> ordered by
<code>EventTime.realTimeMs</code>. Errors are fatal if playback stopped due to this error.</div>
</li>
</ul>
<a name="nonFatalErrorHistory">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>nonFatalErrorHistory</h4>
<pre>public final&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics" target="_top">PlaybackStats.EventTimeAndException</a>&gt; nonFatalErrorHistory</pre>
<div class="block">The history of non-fatal errors as <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics"><code>EventTimeAndExceptions</code></a> ordered
by <code>EventTime.realTimeMs</code>. Errors are non-fatal if playback can recover from the error
without stopping.</div>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="merge-com.google.android.exoplayer2.analytics.PlaybackStats...-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>merge</h4>
<pre>public static&nbsp;<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats</a>&nbsp;merge&#8203;(<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStats</a>...&nbsp;playbackStats)</pre>
<div class="block">Returns the combined <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics"><code>PlaybackStats</code></a> for all input <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics"><code>PlaybackStats</code></a>.
<p>Note that the full history of events is not kept as the history only makes sense in the
context of a single playback.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playbackStats</code> - Array of <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics"><code>PlaybackStats</code></a> to combine.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The combined <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html" title="class in com.google.android.exoplayer2.analytics"><code>PlaybackStats</code></a>.</dd>
</dl>
</li>
</ul>
<a name="getPlaybackStateDurationMs-@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackStateint-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaybackStateDurationMs</h4>
<pre>public&nbsp;long&nbsp;getPlaybackStateDurationMs&#8203;(@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int&nbsp;playbackState)</pre>
<div class="block">Returns the total time spent in a given <code>PlaybackStats.PlaybackState</code>, in milliseconds.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playbackState</code> - A <code>PlaybackStats.PlaybackState</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Total spent in the given playback state, in milliseconds</dd>
</dl>
</li>
</ul>
<a name="getPlaybackStateAtTime-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaybackStateAtTime</h4>
<pre>public&nbsp;@com.google.android.exoplayer2.analytics.PlaybackStats.PlaybackState int&nbsp;getPlaybackStateAtTime&#8203;(long&nbsp;realtimeMs)</pre>
<div class="block">Returns the <code>PlaybackStats.PlaybackState</code> at the given time.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>realtimeMs</code> - The time as returned by <a href="https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime--" title="class or interface in android.os" class="externalLink" target="_top"><code>SystemClock.elapsedRealtime()</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The <code>PlaybackStats.PlaybackState</code> at that time, or <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_NOT_STARTED"><code>PLAYBACK_STATE_NOT_STARTED</code></a> if the
given time is before the first known playback state in the history.</dd>
</dl>
</li>
</ul>
<a name="getMediaTimeMsAtRealtimeMs-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMediaTimeMsAtRealtimeMs</h4>
<pre>public&nbsp;long&nbsp;getMediaTimeMsAtRealtimeMs&#8203;(long&nbsp;realtimeMs)</pre>
<div class="block">Returns the estimated media time at the given realtime, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if the media time history is unknown.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>realtimeMs</code> - The realtime as returned by <a href="https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime--" title="class or interface in android.os" class="externalLink" target="_top"><code>SystemClock.elapsedRealtime()</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The estimated media time in milliseconds at this realtime, <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no
estimate can be given.</dd>
</dl>
</li>
</ul>
<a name="getMeanJoinTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanJoinTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanJoinTimeMs()</pre>
<div class="block">Returns the mean time spent joining the playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if
no valid join time is available. Only includes playbacks with valid join times as documented in
<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#totalValidJoinTimeMs"><code>totalValidJoinTimeMs</code></a>.</div>
</li>
</ul>
<a name="getTotalJoinTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalJoinTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalJoinTimeMs()</pre>
<div class="block">Returns the total time spent joining the playback in foreground, in milliseconds. This does
include invalid join times where the playback never reached <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PLAYING"><code>PLAYBACK_STATE_PLAYING</code></a> or
<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#PLAYBACK_STATE_PAUSED"><code>PLAYBACK_STATE_PAUSED</code></a>, or joining was interrupted by a seek, stop, or error state.</div>
</li>
</ul>
<a name="getTotalPlayTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalPlayTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalPlayTimeMs()</pre>
<div class="block">Returns the total time spent actively playing, in milliseconds.</div>
</li>
</ul>
<a name="getMeanPlayTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanPlayTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanPlayTimeMs()</pre>
<div class="block">Returns the mean time spent actively playing per foreground playback, in milliseconds, or
<a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getTotalPausedTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalPausedTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalPausedTimeMs()</pre>
<div class="block">Returns the total time spent in a paused state, in milliseconds.</div>
</li>
</ul>
<a name="getMeanPausedTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanPausedTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanPausedTimeMs()</pre>
<div class="block">Returns the mean time spent in a paused state per foreground playback, in milliseconds, or
<a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getTotalRebufferTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalRebufferTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalRebufferTimeMs()</pre>
<div class="block">Returns the total time spent rebuffering, in milliseconds. This excludes initial join times,
buffer times after a seek and buffering while paused.</div>
</li>
</ul>
<a name="getMeanRebufferTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanRebufferTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanRebufferTimeMs()</pre>
<div class="block">Returns the mean time spent rebuffering per foreground playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground. This excludes initial join times, buffer
times after a seek and buffering while paused.</div>
</li>
</ul>
<a name="getMeanSingleRebufferTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanSingleRebufferTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanSingleRebufferTimeMs()</pre>
<div class="block">Returns the mean time spent during a single rebuffer, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a>
if no rebuffer was recorded. This excludes initial join times and buffer times after a seek.</div>
</li>
</ul>
<a name="getTotalSeekTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalSeekTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalSeekTimeMs()</pre>
<div class="block">Returns the total time spent from the start of a seek until playback is ready again, in
milliseconds.</div>
</li>
</ul>
<a name="getMeanSeekTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanSeekTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanSeekTimeMs()</pre>
<div class="block">Returns the mean time spent per foreground playback from the start of a seek until playback is
ready again, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getMeanSingleSeekTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanSingleSeekTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanSingleSeekTimeMs()</pre>
<div class="block">Returns the mean time spent from the start of a single seek until playback is ready again, in
milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no seek occurred.</div>
</li>
</ul>
<a name="getTotalWaitTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalWaitTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalWaitTimeMs()</pre>
<div class="block">Returns the total time spent actively waiting for playback, in milliseconds. This includes all
join times, rebuffer times and seek times, but excludes times without user intention to play,
e.g. all paused states.</div>
</li>
</ul>
<a name="getMeanWaitTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanWaitTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanWaitTimeMs()</pre>
<div class="block">Returns the mean time spent actively waiting for playback per foreground playback, in
milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> 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.</div>
</li>
</ul>
<a name="getTotalPlayAndWaitTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalPlayAndWaitTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalPlayAndWaitTimeMs()</pre>
<div class="block">Returns the total time spent playing or actively waiting for playback, in milliseconds.</div>
</li>
</ul>
<a name="getMeanPlayAndWaitTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanPlayAndWaitTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanPlayAndWaitTimeMs()</pre>
<div class="block">Returns the mean time spent playing or actively waiting for playback per foreground playback,
in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getTotalElapsedTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalElapsedTimeMs</h4>
<pre>public&nbsp;long&nbsp;getTotalElapsedTimeMs()</pre>
<div class="block">Returns the total time covered by any playback state, in milliseconds.</div>
</li>
</ul>
<a name="getMeanElapsedTimeMs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanElapsedTimeMs</h4>
<pre>public&nbsp;long&nbsp;getMeanElapsedTimeMs()</pre>
<div class="block">Returns the mean time covered by any playback state per playback, in milliseconds, or <a href="../../../../../com/google/android/exoplayer2/C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if no playback was recorded.</div>
</li>
</ul>
<a name="getAbandonedBeforeReadyRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAbandonedBeforeReadyRatio</h4>
<pre>public&nbsp;float&nbsp;getAbandonedBeforeReadyRatio()</pre>
<div class="block">Returns the ratio of foreground playbacks which were abandoned before they were ready to play,
or <code>0.0</code> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getEndedRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getEndedRatio</h4>
<pre>public&nbsp;float&nbsp;getEndedRatio()</pre>
<div class="block">Returns the ratio of foreground playbacks which reached the ended state at least once, or
<code>0.0</code> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getMeanPauseCount--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanPauseCount</h4>
<pre>public&nbsp;float&nbsp;getMeanPauseCount()</pre>
<div class="block">Returns the mean number of times a playback has been paused per foreground playback, or <code>
0.0</code> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getMeanPauseBufferCount--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanPauseBufferCount</h4>
<pre>public&nbsp;float&nbsp;getMeanPauseBufferCount()</pre>
<div class="block">Returns the mean number of times a playback has been paused while rebuffering per foreground
playback, or <code>0.0</code> if no playback has been in foreground.</div>
</li>
</ul>
<a name="getMeanSeekCount--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanSeekCount</h4>
<pre>public&nbsp;float&nbsp;getMeanSeekCount()</pre>
<div class="block">Returns the mean number of times a seek occurred per foreground playback, or <code>0.0</code> if no
playback has been in foreground. This includes seeks happening before playback resumed after
another seek.</div>
</li>
</ul>
<a name="getMeanRebufferCount--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanRebufferCount</h4>
<pre>public&nbsp;float&nbsp;getMeanRebufferCount()</pre>
<div class="block">Returns the mean number of times a rebuffer occurred per foreground playback, or <code>0.0</code> if
no playback has been in foreground. This excludes initial joining and buffering after seek.</div>
</li>
</ul>
<a name="getWaitTimeRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getWaitTimeRatio</h4>
<pre>public&nbsp;float&nbsp;getWaitTimeRatio()</pre>
<div class="block">Returns the ratio of wait times to the total time spent playing and waiting, or <code>0.0</code> if
no time was spend playing or waiting. This is equivalent to <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalWaitTimeMs--"><code>getTotalWaitTimeMs()</code></a> /
<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPlayAndWaitTimeMs--"><code>getTotalPlayAndWaitTimeMs()</code></a> and also to <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getJoinTimeRatio--"><code>getJoinTimeRatio()</code></a> + <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getRebufferTimeRatio--"><code>getRebufferTimeRatio()</code></a> + <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getSeekTimeRatio--"><code>getSeekTimeRatio()</code></a>.</div>
</li>
</ul>
<a name="getJoinTimeRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getJoinTimeRatio</h4>
<pre>public&nbsp;float&nbsp;getJoinTimeRatio()</pre>
<div class="block">Returns the ratio of foreground join time to the total time spent playing and waiting, or
<code>0.0</code> if no time was spend playing or waiting. This is equivalent to <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalJoinTimeMs--"><code>getTotalJoinTimeMs()</code></a> / <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPlayAndWaitTimeMs--"><code>getTotalPlayAndWaitTimeMs()</code></a>.</div>
</li>
</ul>
<a name="getRebufferTimeRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRebufferTimeRatio</h4>
<pre>public&nbsp;float&nbsp;getRebufferTimeRatio()</pre>
<div class="block">Returns the ratio of rebuffer time to the total time spent playing and waiting, or <code>0.0</code>
if no time was spend playing or waiting. This is equivalent to <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalRebufferTimeMs--"><code>getTotalRebufferTimeMs()</code></a> / <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPlayAndWaitTimeMs--"><code>getTotalPlayAndWaitTimeMs()</code></a>.</div>
</li>
</ul>
<a name="getSeekTimeRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSeekTimeRatio</h4>
<pre>public&nbsp;float&nbsp;getSeekTimeRatio()</pre>
<div class="block">Returns the ratio of seek time to the total time spent playing and waiting, or <code>0.0</code> if
no time was spend playing or waiting. This is equivalent to <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalSeekTimeMs--"><code>getTotalSeekTimeMs()</code></a> /
<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getTotalPlayAndWaitTimeMs--"><code>getTotalPlayAndWaitTimeMs()</code></a>.</div>
</li>
</ul>
<a name="getRebufferRate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRebufferRate</h4>
<pre>public&nbsp;float&nbsp;getRebufferRate()</pre>
<div class="block">Returns the rate of rebuffer events, in rebuffers per play time second, or <code>0.0</code> if no
time was spend playing. This is equivalent to 1.0 / <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanTimeBetweenRebuffers--"><code>getMeanTimeBetweenRebuffers()</code></a>.</div>
</li>
</ul>
<a name="getMeanTimeBetweenRebuffers--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanTimeBetweenRebuffers</h4>
<pre>public&nbsp;float&nbsp;getMeanTimeBetweenRebuffers()</pre>
<div class="block">Returns the mean play time between rebuffer events, in seconds. This is equivalent to 1.0 /
<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getRebufferRate--"><code>getRebufferRate()</code></a>. Note that this may return <a href="https://developer.android.com/reference/java/lang/Float.html#POSITIVE_INFINITY" title="class or interface in java.lang" class="externalLink" target="_top"><code>Float.POSITIVE_INFINITY</code></a>.</div>
</li>
</ul>
<a name="getMeanInitialVideoFormatHeight--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanInitialVideoFormatHeight</h4>
<pre>public&nbsp;int&nbsp;getMeanInitialVideoFormatHeight()</pre>
<div class="block">Returns the mean initial video format height, in pixels, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no video
format data is available.</div>
</li>
</ul>
<a name="getMeanInitialVideoFormatBitrate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanInitialVideoFormatBitrate</h4>
<pre>public&nbsp;int&nbsp;getMeanInitialVideoFormatBitrate()</pre>
<div class="block">Returns the mean initial video format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if
no video format data is available.</div>
</li>
</ul>
<a name="getMeanInitialAudioFormatBitrate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanInitialAudioFormatBitrate</h4>
<pre>public&nbsp;int&nbsp;getMeanInitialAudioFormatBitrate()</pre>
<div class="block">Returns the mean initial audio format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if
no audio format data is available.</div>
</li>
</ul>
<a name="getMeanVideoFormatHeight--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanVideoFormatHeight</h4>
<pre>public&nbsp;int&nbsp;getMeanVideoFormatHeight()</pre>
<div class="block">Returns the mean video format height, in pixels, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no video format
data is available. This is a weighted average taking the time the format was used for playback
into account.</div>
</li>
</ul>
<a name="getMeanVideoFormatBitrate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanVideoFormatBitrate</h4>
<pre>public&nbsp;int&nbsp;getMeanVideoFormatBitrate()</pre>
<div class="block">Returns the mean video format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no
video format data is available. This is a weighted average taking the time the format was used
for playback into account.</div>
</li>
</ul>
<a name="getMeanAudioFormatBitrate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanAudioFormatBitrate</h4>
<pre>public&nbsp;int&nbsp;getMeanAudioFormatBitrate()</pre>
<div class="block">Returns the mean audio format bitrate, in bits per second, or <a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no
audio format data is available. This is a weighted average taking the time the format was used
for playback into account.</div>
</li>
</ul>
<a name="getMeanBandwidth--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanBandwidth</h4>
<pre>public&nbsp;int&nbsp;getMeanBandwidth()</pre>
<div class="block">Returns the mean network bandwidth based on transfer measurements, in bits per second, or
<a href="../../../../../com/google/android/exoplayer2/C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if no transfer data is available.</div>
</li>
</ul>
<a name="getDroppedFramesRate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDroppedFramesRate</h4>
<pre>public&nbsp;float&nbsp;getDroppedFramesRate()</pre>
<div class="block">Returns the mean rate at which video frames are dropped, in dropped frames per play time
second, or <code>0.0</code> if no time was spent playing.</div>
</li>
</ul>
<a name="getAudioUnderrunRate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAudioUnderrunRate</h4>
<pre>public&nbsp;float&nbsp;getAudioUnderrunRate()</pre>
<div class="block">Returns the mean rate at which audio underruns occurred, in underruns per play time second, or
<code>0.0</code> if no time was spent playing.</div>
</li>
</ul>
<a name="getFatalErrorRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFatalErrorRatio</h4>
<pre>public&nbsp;float&nbsp;getFatalErrorRatio()</pre>
<div class="block">Returns the ratio of foreground playbacks which experienced fatal errors, or <code>0.0</code> if no
playback has been in foreground.</div>
</li>
</ul>
<a name="getFatalErrorRate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFatalErrorRate</h4>
<pre>public&nbsp;float&nbsp;getFatalErrorRate()</pre>
<div class="block">Returns the rate of fatal errors, in errors per play time second, or <code>0.0</code> if no time was
spend playing. This is equivalent to 1.0 / <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanTimeBetweenFatalErrors--"><code>getMeanTimeBetweenFatalErrors()</code></a>.</div>
</li>
</ul>
<a name="getMeanTimeBetweenFatalErrors--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanTimeBetweenFatalErrors</h4>
<pre>public&nbsp;float&nbsp;getMeanTimeBetweenFatalErrors()</pre>
<div class="block">Returns the mean play time between fatal errors, in seconds. This is equivalent to 1.0 / <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getFatalErrorRate--"><code>getFatalErrorRate()</code></a>. Note that this may return <a href="https://developer.android.com/reference/java/lang/Float.html#POSITIVE_INFINITY" title="class or interface in java.lang" class="externalLink" target="_top"><code>Float.POSITIVE_INFINITY</code></a>.</div>
</li>
</ul>
<a name="getMeanNonFatalErrorCount--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMeanNonFatalErrorCount</h4>
<pre>public&nbsp;float&nbsp;getMeanNonFatalErrorCount()</pre>
<div class="block">Returns the mean number of non-fatal errors per foreground playback, or <code>0.0</code> if no
playback has been in foreground.</div>
</li>
</ul>
<a name="getNonFatalErrorRate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNonFatalErrorRate</h4>
<pre>public&nbsp;float&nbsp;getNonFatalErrorRate()</pre>
<div class="block">Returns the rate of non-fatal errors, in errors per play time second, or <code>0.0</code> if no time
was spend playing. This is equivalent to 1.0 / <a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getMeanTimeBetweenNonFatalErrors--"><code>getMeanTimeBetweenNonFatalErrors()</code></a>.</div>
</li>
</ul>
<a name="getMeanTimeBetweenNonFatalErrors--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getMeanTimeBetweenNonFatalErrors</h4>
<pre>public&nbsp;float&nbsp;getMeanTimeBetweenNonFatalErrors()</pre>
<div class="block">Returns the mean play time between non-fatal errors, in seconds. This is equivalent to 1.0 /
<a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.html#getNonFatalErrorRate--"><code>getNonFatalErrorRate()</code></a>. Note that this may return <a href="https://developer.android.com/reference/java/lang/Float.html#POSITIVE_INFINITY" title="class or interface in java.lang" class="externalLink" target="_top"><code>Float.POSITIVE_INFINITY</code></a>.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../com/google/android/exoplayer2/analytics/PlaybackStats.EventTimeAndException.html" title="class in com.google.android.exoplayer2.analytics"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?com/google/android/exoplayer2/analytics/PlaybackStats.html" target="_top">Frames</a></li>
<li><a href="PlaybackStats.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>