<!DOCTYPE HTML>
<!-- 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>AnalyticsListener (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-3.5.1.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="AnalyticsListener (ExoPlayer library)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":18,"i1":18,"i2":50,"i3":18,"i4":18,"i5":18,"i6":18,"i7":50,"i8":18,"i9":18,"i10":18,"i11":18,"i12":18,"i13":18,"i14":18,"i15":50,"i16":50,"i17":50,"i18":50,"i19":18,"i20":18,"i21":18,"i22":18,"i23":50,"i24":18,"i25":18,"i26":18,"i27":18,"i28":18,"i29":18,"i30":18,"i31":18,"i32":18,"i33":18,"i34":50,"i35":18,"i36":18,"i37":18,"i38":18,"i39":18,"i40":18,"i41":18,"i42":18,"i43":18,"i44":18,"i45":50,"i46":18,"i47":18,"i48":50,"i49":18,"i50":18,"i51":18,"i52":18,"i53":18,"i54":50,"i55":50,"i56":18,"i57":18,"i58":50,"i59":18,"i60":18,"i61":18,"i62":18,"i63":18,"i64":50,"i65":18,"i66":18,"i67":18,"i68":18,"i69":18,"i70":50,"i71":18,"i72":50,"i73":18,"i74":18};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.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" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.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 id="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>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.analytics</a></div>
<h2 title="Interface AnalyticsListener" class="title">Interface AnalyticsListener</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="../util/EventLogger.html" title="class in com.google.android.exoplayer2.util">EventLogger</a></code>, <code><a href="../testutil/ExoHostedTest.html" title="class in com.google.android.exoplayer2.testutil">ExoHostedTest</a></code>, <code><a href="PlaybackStatsListener.html" title="class in com.google.android.exoplayer2.analytics">PlaybackStatsListener</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">AnalyticsListener</span></pre>
<div class="block">A listener for analytics events.

 <p>All events are recorded with an <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> specifying the elapsed real time and media
 time at the time of the event.

 <p>All methods have no-op default implementations to allow selective overrides.

 <p>Listeners can choose to implement individual events (e.g. <a href="#onIsPlayingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)"><code>onIsPlayingChanged(EventTime, boolean)</code></a>) or <a href="#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)"><code>onEvents(Player, Events)</code></a>, which is called
 after one or more events occurred together.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!--   -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<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">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="AnalyticsListener.EventFlags.html" title="annotation in com.google.android.exoplayer2.analytics">AnalyticsListener.EventFlags</a></span></code></th>
<td class="colLast">
<div class="block">Events that can be reported via <a href="#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)"><code>onEvents(Player, Events)</code></a>.</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="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a></span></code></th>
<td class="colLast">
<div class="block">A set of <a href="AnalyticsListener.EventFlags.html" title="annotation in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventFlags</code></a>.</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="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a></span></code></th>
<td class="colLast">
<div class="block">Time information of an event.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!--   -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<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>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#EVENT_AUDIO_ATTRIBUTES_CHANGED">EVENT_AUDIO_ATTRIBUTES_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">Audio attributes changed.</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="#EVENT_AUDIO_CODEC_ERROR">EVENT_AUDIO_CODEC_ERROR</a></span></code></th>
<td class="colLast">
<div class="block">The audio codec encountered an error.</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="#EVENT_AUDIO_DECODER_INITIALIZED">EVENT_AUDIO_DECODER_INITIALIZED</a></span></code></th>
<td class="colLast">
<div class="block">An audio renderer created a decoder.</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="#EVENT_AUDIO_DECODER_RELEASED">EVENT_AUDIO_DECODER_RELEASED</a></span></code></th>
<td class="colLast">
<div class="block">An audio renderer released a decoder.</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="#EVENT_AUDIO_DISABLED">EVENT_AUDIO_DISABLED</a></span></code></th>
<td class="colLast">
<div class="block">An audio renderer was disabled.</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="#EVENT_AUDIO_ENABLED">EVENT_AUDIO_ENABLED</a></span></code></th>
<td class="colLast">
<div class="block">An audio renderer was enabled.</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="#EVENT_AUDIO_INPUT_FORMAT_CHANGED">EVENT_AUDIO_INPUT_FORMAT_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">The format consumed by an audio renderer changed.</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="#EVENT_AUDIO_POSITION_ADVANCING">EVENT_AUDIO_POSITION_ADVANCING</a></span></code></th>
<td class="colLast">
<div class="block">The audio position has increased for the first time since the last pause or position reset.</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="#EVENT_AUDIO_SESSION_ID">EVENT_AUDIO_SESSION_ID</a></span></code></th>
<td class="colLast">
<div class="block">An audio session id was set.</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="#EVENT_AUDIO_SINK_ERROR">EVENT_AUDIO_SINK_ERROR</a></span></code></th>
<td class="colLast">
<div class="block">The audio sink encountered a non-fatal error.</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="#EVENT_AUDIO_UNDERRUN">EVENT_AUDIO_UNDERRUN</a></span></code></th>
<td class="colLast">
<div class="block">An audio underrun occurred.</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="#EVENT_AVAILABLE_COMMANDS_CHANGED">EVENT_AVAILABLE_COMMANDS_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getAvailableCommands()"><code>Player.getAvailableCommands()</code></a> changed.</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="#EVENT_BANDWIDTH_ESTIMATE">EVENT_BANDWIDTH_ESTIMATE</a></span></code></th>
<td class="colLast">
<div class="block">The bandwidth estimate has been updated.</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="#EVENT_DOWNSTREAM_FORMAT_CHANGED">EVENT_DOWNSTREAM_FORMAT_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">The downstream format sent to renderers changed.</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="#EVENT_DRM_KEYS_LOADED">EVENT_DRM_KEYS_LOADED</a></span></code></th>
<td class="colLast">
<div class="block">DRM keys were loaded.</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="#EVENT_DRM_KEYS_REMOVED">EVENT_DRM_KEYS_REMOVED</a></span></code></th>
<td class="colLast">
<div class="block">DRM keys were removed.</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="#EVENT_DRM_KEYS_RESTORED">EVENT_DRM_KEYS_RESTORED</a></span></code></th>
<td class="colLast">
<div class="block">DRM keys were restored.</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="#EVENT_DRM_SESSION_ACQUIRED">EVENT_DRM_SESSION_ACQUIRED</a></span></code></th>
<td class="colLast">
<div class="block">A DRM session has been acquired.</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="#EVENT_DRM_SESSION_MANAGER_ERROR">EVENT_DRM_SESSION_MANAGER_ERROR</a></span></code></th>
<td class="colLast">
<div class="block">A non-fatal DRM session manager error occurred.</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="#EVENT_DRM_SESSION_RELEASED">EVENT_DRM_SESSION_RELEASED</a></span></code></th>
<td class="colLast">
<div class="block">A DRM session has been released.</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="#EVENT_DROPPED_VIDEO_FRAMES">EVENT_DROPPED_VIDEO_FRAMES</a></span></code></th>
<td class="colLast">
<div class="block">Video frames have been dropped.</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="#EVENT_IS_LOADING_CHANGED">EVENT_IS_LOADING_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#isLoading()"><code>Player.isLoading()</code></a> ()} changed.</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="#EVENT_IS_PLAYING_CHANGED">EVENT_IS_PLAYING_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#isPlaying()"><code>Player.isPlaying()</code></a> changed.</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="#EVENT_LOAD_CANCELED">EVENT_LOAD_CANCELED</a></span></code></th>
<td class="colLast">
<div class="block">A source canceled loading data.</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="#EVENT_LOAD_COMPLETED">EVENT_LOAD_COMPLETED</a></span></code></th>
<td class="colLast">
<div class="block">A source started completed loading data.</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="#EVENT_LOAD_ERROR">EVENT_LOAD_ERROR</a></span></code></th>
<td class="colLast">
<div class="block">A source had a non-fatal error loading data.</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="#EVENT_LOAD_STARTED">EVENT_LOAD_STARTED</a></span></code></th>
<td class="colLast">
<div class="block">A source started loading data.</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="#EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED">EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getMaxSeekToPreviousPosition()"><code>Player.getMaxSeekToPreviousPosition()</code></a> changed.</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="#EVENT_MEDIA_ITEM_TRANSITION">EVENT_MEDIA_ITEM_TRANSITION</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getCurrentMediaItem()"><code>Player.getCurrentMediaItem()</code></a> changed or the player started repeating the current item.</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="#EVENT_MEDIA_METADATA_CHANGED">EVENT_MEDIA_METADATA_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getMediaMetadata()"><code>Player.getMediaMetadata()</code></a> changed.</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="#EVENT_METADATA">EVENT_METADATA</a></span></code></th>
<td class="colLast">
<div class="block">Metadata associated with the current playback time was reported.</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="#EVENT_PLAY_WHEN_READY_CHANGED">EVENT_PLAY_WHEN_READY_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getPlayWhenReady()"><code>Player.getPlayWhenReady()</code></a> changed.</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="#EVENT_PLAYBACK_PARAMETERS_CHANGED">EVENT_PLAYBACK_PARAMETERS_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getPlaybackParameters()"><code>Player.getPlaybackParameters()</code></a> changed.</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="#EVENT_PLAYBACK_STATE_CHANGED">EVENT_PLAYBACK_STATE_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> changed.</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="#EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED">EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getPlaybackSuppressionReason()"><code>Player.getPlaybackSuppressionReason()</code></a> changed.</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="#EVENT_PLAYER_ERROR">EVENT_PLAYER_ERROR</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getPlayerError()"><code>Player.getPlayerError()</code></a> changed.</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="#EVENT_PLAYER_RELEASED">EVENT_PLAYER_RELEASED</a></span></code></th>
<td class="colLast">
<div class="block">The player was released.</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="#EVENT_PLAYLIST_METADATA_CHANGED">EVENT_PLAYLIST_METADATA_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getPlaylistMetadata()"><code>Player.getPlaylistMetadata()</code></a> changed.</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="#EVENT_POSITION_DISCONTINUITY">EVENT_POSITION_DISCONTINUITY</a></span></code></th>
<td class="colLast">
<div class="block">A position discontinuity occurred.</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="#EVENT_RENDERED_FIRST_FRAME">EVENT_RENDERED_FIRST_FRAME</a></span></code></th>
<td class="colLast">
<div class="block">The first frame has been rendered since setting the surface, since the renderer was reset or
 since the stream changed.</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="#EVENT_REPEAT_MODE_CHANGED">EVENT_REPEAT_MODE_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getRepeatMode()"><code>Player.getRepeatMode()</code></a> changed.</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="#EVENT_SEEK_BACK_INCREMENT_CHANGED">EVENT_SEEK_BACK_INCREMENT_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getSeekBackIncrement()"><code>Player.getSeekBackIncrement()</code></a> changed.</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="#EVENT_SEEK_FORWARD_INCREMENT_CHANGED">EVENT_SEEK_FORWARD_INCREMENT_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getSeekForwardIncrement()"><code>Player.getSeekForwardIncrement()</code></a> changed.</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="#EVENT_SHUFFLE_MODE_ENABLED_CHANGED">EVENT_SHUFFLE_MODE_ENABLED_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getShuffleModeEnabled()"><code>Player.getShuffleModeEnabled()</code></a> changed.</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="#EVENT_SKIP_SILENCE_ENABLED_CHANGED">EVENT_SKIP_SILENCE_ENABLED_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">Skipping silences was enabled or disabled in the audio stream.</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="#EVENT_STATIC_METADATA_CHANGED">EVENT_STATIC_METADATA_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">See <a href="../Player.html#EVENT_MEDIA_METADATA_CHANGED"><code>Player.EVENT_MEDIA_METADATA_CHANGED</code></a>.</div>
</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="#EVENT_SURFACE_SIZE_CHANGED">EVENT_SURFACE_SIZE_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">The surface size changed.</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="#EVENT_TIMELINE_CHANGED">EVENT_TIMELINE_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getCurrentTimeline()"><code>Player.getCurrentTimeline()</code></a> changed.</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="#EVENT_TRACKS_CHANGED">EVENT_TRACKS_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block"><a href="../Player.html#getCurrentTrackGroups()"><code>Player.getCurrentTrackGroups()</code></a> or <a href="../Player.html#getCurrentTrackSelections()"><code>Player.getCurrentTrackSelections()</code></a> changed.</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="#EVENT_UPSTREAM_DISCARDED">EVENT_UPSTREAM_DISCARDED</a></span></code></th>
<td class="colLast">
<div class="block">Data was removed from the end of the media buffer.</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="#EVENT_VIDEO_CODEC_ERROR">EVENT_VIDEO_CODEC_ERROR</a></span></code></th>
<td class="colLast">
<div class="block">The video codec encountered an error.</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="#EVENT_VIDEO_DECODER_INITIALIZED">EVENT_VIDEO_DECODER_INITIALIZED</a></span></code></th>
<td class="colLast">
<div class="block">A video renderer created a decoder.</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="#EVENT_VIDEO_DECODER_RELEASED">EVENT_VIDEO_DECODER_RELEASED</a></span></code></th>
<td class="colLast">
<div class="block">A video renderer released a decoder.</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="#EVENT_VIDEO_DISABLED">EVENT_VIDEO_DISABLED</a></span></code></th>
<td class="colLast">
<div class="block">A video renderer was disabled.</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="#EVENT_VIDEO_ENABLED">EVENT_VIDEO_ENABLED</a></span></code></th>
<td class="colLast">
<div class="block">A video renderer was enabled.</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="#EVENT_VIDEO_FRAME_PROCESSING_OFFSET">EVENT_VIDEO_FRAME_PROCESSING_OFFSET</a></span></code></th>
<td class="colLast">
<div class="block">Video frame processing offset data has been reported.</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="#EVENT_VIDEO_INPUT_FORMAT_CHANGED">EVENT_VIDEO_INPUT_FORMAT_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">The format consumed by a video renderer changed.</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="#EVENT_VIDEO_SIZE_CHANGED">EVENT_VIDEO_SIZE_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">The video size changed.</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="#EVENT_VOLUME_CHANGED">EVENT_VOLUME_CHANGED</a></span></code></th>
<td class="colLast">
<div class="block">The volume changed.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</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="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated 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>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioAttributesChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.audio.AudioAttributes)">onAudioAttributesChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                        <a href="../audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a>&nbsp;audioAttributes)</code></th>
<td class="colLast">
<div class="block">Called when the audio attributes change.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioCodecError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onAudioCodecError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                 <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;audioCodecError)</code></th>
<td class="colLast">
<div class="block">Called when an audio decoder encounters an error.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long)">onAudioDecoderInitialized</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                         long&nbsp;initializationDurationMs)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onAudioDecoderInitialized(EventTime, String, long, long)</code></a>.</div>
</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)">onAudioDecoderInitialized</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                         long&nbsp;initializedTimestampMs,
                         long&nbsp;initializationDurationMs)</code></th>
<td class="colLast">
<div class="block">Called when an audio renderer creates a decoder.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDecoderReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onAudioDecoderReleased</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                      <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName)</code></th>
<td class="colLast">
<div class="block">Called when an audio renderer releases a decoder.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioDisabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
               <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
<td class="colLast">
<div class="block">Called when an audio renderer is disabled.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioEnabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
              <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
<td class="colLast">
<div class="block">Called when an audio renderer is enabled.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format)">onAudioInputFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onAudioInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onAudioInputFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
                         <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</code></th>
<td class="colLast">
<div class="block">Called when the format of the media being consumed by an audio renderer changes.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioPositionAdvancing(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onAudioPositionAdvancing</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                        long&nbsp;playoutStartSystemTimeMs)</code></th>
<td class="colLast">
<div class="block">Called when the audio position has increased for the first time since the last pause or
 position reset.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioSessionIdChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onAudioSessionIdChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                       int&nbsp;audioSessionId)</code></th>
<td class="colLast">
<div class="block">Called when the audio session ID changes.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioSinkError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onAudioSinkError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;audioSinkError)</code></th>
<td class="colLast">
<div class="block">Called when <a href="../audio/AudioSink.html" title="interface in com.google.android.exoplayer2.audio"><code>AudioSink</code></a> has encountered an error.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioUnderrun(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">onAudioUnderrun</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
               int&nbsp;bufferSize,
               long&nbsp;bufferSizeMs,
               long&nbsp;elapsedSinceLastFeedMs)</code></th>
<td class="colLast">
<div class="block">Called when an audio underrun occurs.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAvailableCommandsChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.Commands)">onAvailableCommandsChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                          <a href="../Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a>&nbsp;availableCommands)</code></th>
<td class="colLast">
<div class="block">Called when the player's available commands changed.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onBandwidthEstimate(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">onBandwidthEstimate</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                   int&nbsp;totalLoadTimeMs,
                   long&nbsp;totalBytesLoaded,
                   long&nbsp;bitrateEstimate)</code></th>
<td class="colLast">
<div class="block">Called when the bandwidth estimate for the current data source has been updated.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDecoderDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.decoder.DecoderCounters)">onDecoderDisabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                 int&nbsp;trackType,
                 <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> and <a href="#onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDecoderEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.decoder.DecoderCounters)">onDecoderEnabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                int&nbsp;trackType,
                <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> and <a href="#onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,java.lang.String,long)">onDecoderInitialized</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    int&nbsp;trackType,
                    <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                    long&nbsp;initializationDurationMs)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, java.lang.String, long, long)</code></a> and <a href="#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, java.lang.String, long, long)</code></a>
     instead.</div>
</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDecoderInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.Format)">onDecoderInputFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                           int&nbsp;trackType,
                           <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onAudioInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>
     and <a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onVideoInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDownstreamFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">onDownstreamFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
<td class="colLast">
<div class="block">Called when the downstream format sent to the renderers changed.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmKeysLoaded(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmKeysLoaded</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block">Called each time drm keys are loaded.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmKeysRemoved(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmKeysRemoved</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block">Called each time offline drm keys are removed.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmKeysRestored(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmKeysRestored</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block">Called each time offline drm keys are restored.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmSessionAcquired</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Implement <a href="#onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onDrmSessionAcquired(EventTime, int)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onDrmSessionAcquired</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    int&nbsp;state)</code></th>
<td class="colLast">
<div class="block">Called each time a drm session is acquired.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionManagerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onDrmSessionManagerError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                        <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;error)</code></th>
<td class="colLast">
<div class="block">Called when a drm error occurs.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmSessionReleased</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block">Called each time a drm session is released.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDroppedVideoFrames(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long)">onDroppedVideoFrames</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    int&nbsp;droppedFrames,
                    long&nbsp;elapsedMs)</code></th>
<td class="colLast">
<div class="block">Called after video frames have been dropped.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)">onEvents</a></span>&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
        <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a>&nbsp;events)</code></th>
<td class="colLast">
<div class="block">Called after one or more events occurred.</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onIsLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onIsLoadingChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                  boolean&nbsp;isLoading)</code></th>
<td class="colLast">
<div class="block">Called when the player starts or stops loading data from a source.</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onIsPlayingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onIsPlayingChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                  boolean&nbsp;isPlaying)</code></th>
<td class="colLast">
<div class="block">Called when the player starts or stops playing.</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadCanceled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCanceled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
              <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
              <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
<td class="colLast">
<div class="block">Called when a media source canceled loading data.</div>
</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadCompleted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCompleted</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
               <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
               <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
<td class="colLast">
<div class="block">Called when a media source completed loading data.</div>
</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">onLoadError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
           <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
           <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData,
           <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a>&nbsp;error,
           boolean&nbsp;wasCanceled)</code></th>
<td class="colLast">
<div class="block">Called when a media source loading error occurred.</div>
</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onLoadingChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                boolean&nbsp;isLoading)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onIsLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)"><code>onIsLoadingChanged(EventTime, boolean)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadStarted</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
             <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
             <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
<td class="colLast">
<div class="block">Called when a media source started loading data.</div>
</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMaxSeekToPreviousPositionChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onMaxSeekToPreviousPositionChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  int&nbsp;maxSeekToPreviousPositionMs)</code></th>
<td class="colLast">
<div class="block">Called when the maximum position for which <a href="../Player.html#seekToPrevious()"><code>Player.seekToPrevious()</code></a> seeks to the
 previous window changes.</div>
</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,int)">onMediaItemTransition</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                     <a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;mediaItem,
                     int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block">Called when playback transitions to a different media item.</div>
</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMediaMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)">onMediaMetadataChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                      <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;mediaMetadata)</code></th>
<td class="colLast">
<div class="block">Called when the combined <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.</div>
</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMetadata(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.metadata.Metadata)">onMetadata</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
          <a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata">Metadata</a>&nbsp;metadata)</code></th>
<td class="colLast">
<div class="block">Called when there is <a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata"><code>Metadata</code></a> associated with the current playback time.</div>
</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaybackParametersChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackParameters)">onPlaybackParametersChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                           <a href="../PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</code></th>
<td class="colLast">
<div class="block">Called when the playback parameters changed.</div>
</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onPlaybackStateChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                      int&nbsp;state)</code></th>
<td class="colLast">
<div class="block">Called when the playback state changed.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaybackSuppressionReasonChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onPlaybackSuppressionReasonChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  int&nbsp;playbackSuppressionReason)</code></th>
<td class="colLast">
<div class="block">Called when playback suppression reason changed.</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">onPlayerError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
             <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</code></th>
<td class="colLast">
<div class="block">Called when a fatal player error occurred.</div>
</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onPlayerReleased</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block">Called when the <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> is released.</div>
</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)">onPlayerStateChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    boolean&nbsp;playWhenReady,
                    int&nbsp;playbackState)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onPlaybackStateChanged(EventTime, int)</code></a> and <a href="#onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)"><code>onPlayWhenReadyChanged(EventTime, boolean, int)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaylistMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)">onPlaylistMetadataChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;playlistMetadata)</code></th>
<td class="colLast">
<div class="block">Called when the playlist <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.</div>
</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)">onPlayWhenReadyChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                      boolean&nbsp;playWhenReady,
                      int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block">Called when the value changed that indicates whether playback will proceed when ready.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onPositionDiscontinuity</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                       int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)"><code>onPositionDiscontinuity(EventTime, Player.PositionInfo,
     Player.PositionInfo, int)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i49" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">onPositionDiscontinuity</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                       <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
                       <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
                       int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block">Called when a position discontinuity occurred.</div>
</td>
</tr>
<tr id="i50" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRenderedFirstFrame(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Object,long)">onRenderedFirstFrame</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;output,
                    long&nbsp;renderTimeMs)</code></th>
<td class="colLast">
<div class="block">Called when a frame is rendered for the first time since setting the surface, or since the
 renderer was reset, or since the stream being rendered was changed.</div>
</td>
</tr>
<tr id="i51" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRepeatModeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onRepeatModeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                   int&nbsp;repeatMode)</code></th>
<td class="colLast">
<div class="block">Called when the repeat mode changed.</div>
</td>
</tr>
<tr id="i52" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekBackIncrementChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onSeekBackIncrementChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                          long&nbsp;seekBackIncrementMs)</code></th>
<td class="colLast">
<div class="block">Called when the seek back increment changed.</div>
</td>
</tr>
<tr id="i53" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekForwardIncrementChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onSeekForwardIncrementChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             long&nbsp;seekForwardIncrementMs)</code></th>
<td class="colLast">
<div class="block">Called when the seek forward increment changed.</div>
</td>
</tr>
<tr id="i54" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekProcessed(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onSeekProcessed</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Seeks are processed without delay.</div>
</div>
</td>
</tr>
<tr id="i55" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onSeekStarted</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)"><code>onPositionDiscontinuity(EventTime, Player.PositionInfo,
     Player.PositionInfo, int)</code></a> instead, listening to changes with <a href="../Player.html#DISCONTINUITY_REASON_SEEK"><code>Player.DISCONTINUITY_REASON_SEEK</code></a>.</div>
</div>
</td>
</tr>
<tr id="i56" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onShuffleModeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onShuffleModeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    boolean&nbsp;shuffleModeEnabled)</code></th>
<td class="colLast">
<div class="block">Called when the shuffle mode changed.</div>
</td>
</tr>
<tr id="i57" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSkipSilenceEnabledChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onSkipSilenceEnabledChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                           boolean&nbsp;skipSilenceEnabled)</code></th>
<td class="colLast">
<div class="block">Called when skipping silences is enabled or disabled in the audio stream.</div>
</td>
</tr>
<tr id="i58" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onStaticMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.util.List)">onStaticMetadataChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                       <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="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata" target="_top">Metadata</a>&gt;&nbsp;metadataList)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="../Player.html#getMediaMetadata()"><code>Player.getMediaMetadata()</code></a> and <a href="#onMediaMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)"><code>onMediaMetadataChanged(EventTime,
     MediaMetadata)</code></a> for access to structured metadata, or access the raw static metadata
     directly from the <a href="../trackselection/TrackSelection.html#getFormat(int)"><code>track selections' formats</code></a>.</div>
</div>
</td>
</tr>
<tr id="i59" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSurfaceSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,int)">onSurfaceSizeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                    int&nbsp;width,
                    int&nbsp;height)</code></th>
<td class="colLast">
<div class="block">Called when the output surface size changed.</div>
</td>
</tr>
<tr id="i60" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTimelineChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onTimelineChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                 int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block">Called when the timeline changed.</div>
</td>
</tr>
<tr id="i61" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTracksChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">onTracksChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
               <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a>&nbsp;trackGroups,
               <a href="../trackselection/TrackSelectionArray.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionArray</a>&nbsp;trackSelections)</code></th>
<td class="colLast">
<div class="block">Called when the available or selected tracks for the renderers changed.</div>
</td>
</tr>
<tr id="i62" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onUpstreamDiscarded(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">onUpstreamDiscarded</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                   <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
<td class="colLast">
<div class="block">Called when data is removed from the back of a media buffer, typically so that it can be
 re-buffered in a different format.</div>
</td>
</tr>
<tr id="i63" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoCodecError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onVideoCodecError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                 <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;videoCodecError)</code></th>
<td class="colLast">
<div class="block">Called when a video decoder encounters an error.</div>
</td>
</tr>
<tr id="i64" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long)">onVideoDecoderInitialized</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                         long&nbsp;initializationDurationMs)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onVideoDecoderInitialized(EventTime, String, long, long)</code></a>.</div>
</div>
</td>
</tr>
<tr id="i65" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)">onVideoDecoderInitialized</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                         long&nbsp;initializedTimestampMs,
                         long&nbsp;initializationDurationMs)</code></th>
<td class="colLast">
<div class="block">Called when a video renderer creates a decoder.</div>
</td>
</tr>
<tr id="i66" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onVideoDecoderReleased</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                      <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName)</code></th>
<td class="colLast">
<div class="block">Called when a video renderer releases a decoder.</div>
</td>
</tr>
<tr id="i67" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoDisabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
               <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
<td class="colLast">
<div class="block">Called when a video renderer is disabled.</div>
</td>
</tr>
<tr id="i68" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoEnabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
              <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
<td class="colLast">
<div class="block">Called when a video renderer is enabled.</div>
</td>
</tr>
<tr id="i69" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoFrameProcessingOffset(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long,int)">onVideoFrameProcessingOffset</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                            long&nbsp;totalProcessingOffsetUs,
                            int&nbsp;frameCount)</code></th>
<td class="colLast">
<div class="block">Called when there is an update to the video frame processing offset reported by a video
 renderer.</div>
</td>
</tr>
<tr id="i70" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format)">onVideoInputFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onVideoInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</td>
</tr>
<tr id="i71" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onVideoInputFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
                         <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</code></th>
<td class="colLast">
<div class="block">Called when the format of the media being consumed by a video renderer changes.</div>
</td>
</tr>
<tr id="i72" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,int,int,float)">onVideoSizeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                  int&nbsp;width,
                  int&nbsp;height,
                  int&nbsp;unappliedRotationDegrees,
                  float&nbsp;pixelWidthHeightRatio)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Implement <a href="#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)"><code>onVideoSizeChanged(EventTime eventTime, VideoSize)</code></a> instead.</div>
</div>
</td>
</tr>
<tr id="i73" class="rowColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                  <a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</code></th>
<td class="colLast">
<div class="block">Called before a frame is rendered for the first time since setting the surface, and each time
 there's a change in the size or pixel aspect ratio of the video being rendered.</div>
</td>
</tr>
<tr id="i74" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVolumeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,float)">onVolumeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
               float&nbsp;volume)</code></th>
<td class="colLast">
<div class="block">Called when the volume changes.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!--   -->
</a>
<h3>Field Detail</h3>
<a id="EVENT_TIMELINE_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_TIMELINE_CHANGED</h4>
<pre>static final&nbsp;int EVENT_TIMELINE_CHANGED</pre>
<div class="block"><a href="../Player.html#getCurrentTimeline()"><code>Player.getCurrentTimeline()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_TIMELINE_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_MEDIA_ITEM_TRANSITION">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_MEDIA_ITEM_TRANSITION</h4>
<pre>static final&nbsp;int EVENT_MEDIA_ITEM_TRANSITION</pre>
<div class="block"><a href="../Player.html#getCurrentMediaItem()"><code>Player.getCurrentMediaItem()</code></a> changed or the player started repeating the current item.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_MEDIA_ITEM_TRANSITION">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_TRACKS_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_TRACKS_CHANGED</h4>
<pre>static final&nbsp;int EVENT_TRACKS_CHANGED</pre>
<div class="block"><a href="../Player.html#getCurrentTrackGroups()"><code>Player.getCurrentTrackGroups()</code></a> or <a href="../Player.html#getCurrentTrackSelections()"><code>Player.getCurrentTrackSelections()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_TRACKS_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_STATIC_METADATA_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_STATIC_METADATA_CHANGED</h4>
<pre><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
static final&nbsp;int EVENT_STATIC_METADATA_CHANGED</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">See <a href="../Player.html#EVENT_MEDIA_METADATA_CHANGED"><code>Player.EVENT_MEDIA_METADATA_CHANGED</code></a>.</div>
</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_STATIC_METADATA_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_IS_LOADING_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_IS_LOADING_CHANGED</h4>
<pre>static final&nbsp;int EVENT_IS_LOADING_CHANGED</pre>
<div class="block"><a href="../Player.html#isLoading()"><code>Player.isLoading()</code></a> ()} changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_IS_LOADING_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAYBACK_STATE_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAYBACK_STATE_CHANGED</h4>
<pre>static final&nbsp;int EVENT_PLAYBACK_STATE_CHANGED</pre>
<div class="block"><a href="../Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAYBACK_STATE_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAY_WHEN_READY_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAY_WHEN_READY_CHANGED</h4>
<pre>static final&nbsp;int EVENT_PLAY_WHEN_READY_CHANGED</pre>
<div class="block"><a href="../Player.html#getPlayWhenReady()"><code>Player.getPlayWhenReady()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAY_WHEN_READY_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED</h4>
<pre>static final&nbsp;int EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED</pre>
<div class="block"><a href="../Player.html#getPlaybackSuppressionReason()"><code>Player.getPlaybackSuppressionReason()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_IS_PLAYING_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_IS_PLAYING_CHANGED</h4>
<pre>static final&nbsp;int EVENT_IS_PLAYING_CHANGED</pre>
<div class="block"><a href="../Player.html#isPlaying()"><code>Player.isPlaying()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_IS_PLAYING_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_REPEAT_MODE_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_REPEAT_MODE_CHANGED</h4>
<pre>static final&nbsp;int EVENT_REPEAT_MODE_CHANGED</pre>
<div class="block"><a href="../Player.html#getRepeatMode()"><code>Player.getRepeatMode()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_REPEAT_MODE_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_SHUFFLE_MODE_ENABLED_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_SHUFFLE_MODE_ENABLED_CHANGED</h4>
<pre>static final&nbsp;int EVENT_SHUFFLE_MODE_ENABLED_CHANGED</pre>
<div class="block"><a href="../Player.html#getShuffleModeEnabled()"><code>Player.getShuffleModeEnabled()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_SHUFFLE_MODE_ENABLED_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAYER_ERROR">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAYER_ERROR</h4>
<pre>static final&nbsp;int EVENT_PLAYER_ERROR</pre>
<div class="block"><a href="../Player.html#getPlayerError()"><code>Player.getPlayerError()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAYER_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_POSITION_DISCONTINUITY">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_POSITION_DISCONTINUITY</h4>
<pre>static final&nbsp;int EVENT_POSITION_DISCONTINUITY</pre>
<div class="block">A position discontinuity occurred. See <a href="../Player.Listener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)"><code>Player.Listener.onPositionDiscontinuity(Player.PositionInfo, Player.PositionInfo, int)</code></a>.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_POSITION_DISCONTINUITY">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAYBACK_PARAMETERS_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAYBACK_PARAMETERS_CHANGED</h4>
<pre>static final&nbsp;int EVENT_PLAYBACK_PARAMETERS_CHANGED</pre>
<div class="block"><a href="../Player.html#getPlaybackParameters()"><code>Player.getPlaybackParameters()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAYBACK_PARAMETERS_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AVAILABLE_COMMANDS_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AVAILABLE_COMMANDS_CHANGED</h4>
<pre>static final&nbsp;int EVENT_AVAILABLE_COMMANDS_CHANGED</pre>
<div class="block"><a href="../Player.html#getAvailableCommands()"><code>Player.getAvailableCommands()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AVAILABLE_COMMANDS_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_MEDIA_METADATA_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_MEDIA_METADATA_CHANGED</h4>
<pre>static final&nbsp;int EVENT_MEDIA_METADATA_CHANGED</pre>
<div class="block"><a href="../Player.html#getMediaMetadata()"><code>Player.getMediaMetadata()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_MEDIA_METADATA_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAYLIST_METADATA_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAYLIST_METADATA_CHANGED</h4>
<pre>static final&nbsp;int EVENT_PLAYLIST_METADATA_CHANGED</pre>
<div class="block"><a href="../Player.html#getPlaylistMetadata()"><code>Player.getPlaylistMetadata()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAYLIST_METADATA_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_SEEK_BACK_INCREMENT_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_SEEK_BACK_INCREMENT_CHANGED</h4>
<pre>static final&nbsp;int EVENT_SEEK_BACK_INCREMENT_CHANGED</pre>
<div class="block"><a href="../Player.html#getSeekBackIncrement()"><code>Player.getSeekBackIncrement()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_SEEK_BACK_INCREMENT_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_SEEK_FORWARD_INCREMENT_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_SEEK_FORWARD_INCREMENT_CHANGED</h4>
<pre>static final&nbsp;int EVENT_SEEK_FORWARD_INCREMENT_CHANGED</pre>
<div class="block"><a href="../Player.html#getSeekForwardIncrement()"><code>Player.getSeekForwardIncrement()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_SEEK_FORWARD_INCREMENT_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED</h4>
<pre>static final&nbsp;int EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED</pre>
<div class="block"><a href="../Player.html#getMaxSeekToPreviousPosition()"><code>Player.getMaxSeekToPreviousPosition()</code></a> changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_LOAD_STARTED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_LOAD_STARTED</h4>
<pre>static final&nbsp;int EVENT_LOAD_STARTED</pre>
<div class="block">A source started loading data.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_LOAD_STARTED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_LOAD_COMPLETED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_LOAD_COMPLETED</h4>
<pre>static final&nbsp;int EVENT_LOAD_COMPLETED</pre>
<div class="block">A source started completed loading data.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_LOAD_COMPLETED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_LOAD_CANCELED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_LOAD_CANCELED</h4>
<pre>static final&nbsp;int EVENT_LOAD_CANCELED</pre>
<div class="block">A source canceled loading data.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_LOAD_CANCELED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_LOAD_ERROR">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_LOAD_ERROR</h4>
<pre>static final&nbsp;int EVENT_LOAD_ERROR</pre>
<div class="block">A source had a non-fatal error loading data.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_LOAD_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DOWNSTREAM_FORMAT_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DOWNSTREAM_FORMAT_CHANGED</h4>
<pre>static final&nbsp;int EVENT_DOWNSTREAM_FORMAT_CHANGED</pre>
<div class="block">The downstream format sent to renderers changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DOWNSTREAM_FORMAT_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_UPSTREAM_DISCARDED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_UPSTREAM_DISCARDED</h4>
<pre>static final&nbsp;int EVENT_UPSTREAM_DISCARDED</pre>
<div class="block">Data was removed from the end of the media buffer.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_UPSTREAM_DISCARDED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_BANDWIDTH_ESTIMATE">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_BANDWIDTH_ESTIMATE</h4>
<pre>static final&nbsp;int EVENT_BANDWIDTH_ESTIMATE</pre>
<div class="block">The bandwidth estimate has been updated.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_BANDWIDTH_ESTIMATE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_METADATA">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_METADATA</h4>
<pre>static final&nbsp;int EVENT_METADATA</pre>
<div class="block">Metadata associated with the current playback time was reported.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_METADATA">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_ENABLED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_ENABLED</h4>
<pre>static final&nbsp;int EVENT_AUDIO_ENABLED</pre>
<div class="block">An audio renderer was enabled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_ENABLED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_DECODER_INITIALIZED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_DECODER_INITIALIZED</h4>
<pre>static final&nbsp;int EVENT_AUDIO_DECODER_INITIALIZED</pre>
<div class="block">An audio renderer created a decoder.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_DECODER_INITIALIZED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_INPUT_FORMAT_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_INPUT_FORMAT_CHANGED</h4>
<pre>static final&nbsp;int EVENT_AUDIO_INPUT_FORMAT_CHANGED</pre>
<div class="block">The format consumed by an audio renderer changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_INPUT_FORMAT_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_POSITION_ADVANCING">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_POSITION_ADVANCING</h4>
<pre>static final&nbsp;int EVENT_AUDIO_POSITION_ADVANCING</pre>
<div class="block">The audio position has increased for the first time since the last pause or position reset.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_POSITION_ADVANCING">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_UNDERRUN">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_UNDERRUN</h4>
<pre>static final&nbsp;int EVENT_AUDIO_UNDERRUN</pre>
<div class="block">An audio underrun occurred.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_UNDERRUN">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_DECODER_RELEASED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_DECODER_RELEASED</h4>
<pre>static final&nbsp;int EVENT_AUDIO_DECODER_RELEASED</pre>
<div class="block">An audio renderer released a decoder.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_DECODER_RELEASED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_DISABLED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_DISABLED</h4>
<pre>static final&nbsp;int EVENT_AUDIO_DISABLED</pre>
<div class="block">An audio renderer was disabled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_DISABLED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_SESSION_ID">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_SESSION_ID</h4>
<pre>static final&nbsp;int EVENT_AUDIO_SESSION_ID</pre>
<div class="block">An audio session id was set.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_SESSION_ID">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_ATTRIBUTES_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_ATTRIBUTES_CHANGED</h4>
<pre>static final&nbsp;int EVENT_AUDIO_ATTRIBUTES_CHANGED</pre>
<div class="block">Audio attributes changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_ATTRIBUTES_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_SKIP_SILENCE_ENABLED_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_SKIP_SILENCE_ENABLED_CHANGED</h4>
<pre>static final&nbsp;int EVENT_SKIP_SILENCE_ENABLED_CHANGED</pre>
<div class="block">Skipping silences was enabled or disabled in the audio stream.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_SKIP_SILENCE_ENABLED_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_SINK_ERROR">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_SINK_ERROR</h4>
<pre>static final&nbsp;int EVENT_AUDIO_SINK_ERROR</pre>
<div class="block">The audio sink encountered a non-fatal error.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_SINK_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VOLUME_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VOLUME_CHANGED</h4>
<pre>static final&nbsp;int EVENT_VOLUME_CHANGED</pre>
<div class="block">The volume changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VOLUME_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_ENABLED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_ENABLED</h4>
<pre>static final&nbsp;int EVENT_VIDEO_ENABLED</pre>
<div class="block">A video renderer was enabled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_ENABLED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_DECODER_INITIALIZED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_DECODER_INITIALIZED</h4>
<pre>static final&nbsp;int EVENT_VIDEO_DECODER_INITIALIZED</pre>
<div class="block">A video renderer created a decoder.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_DECODER_INITIALIZED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_INPUT_FORMAT_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_INPUT_FORMAT_CHANGED</h4>
<pre>static final&nbsp;int EVENT_VIDEO_INPUT_FORMAT_CHANGED</pre>
<div class="block">The format consumed by a video renderer changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_INPUT_FORMAT_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DROPPED_VIDEO_FRAMES">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DROPPED_VIDEO_FRAMES</h4>
<pre>static final&nbsp;int EVENT_DROPPED_VIDEO_FRAMES</pre>
<div class="block">Video frames have been dropped.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DROPPED_VIDEO_FRAMES">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_DECODER_RELEASED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_DECODER_RELEASED</h4>
<pre>static final&nbsp;int EVENT_VIDEO_DECODER_RELEASED</pre>
<div class="block">A video renderer released a decoder.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_DECODER_RELEASED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_DISABLED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_DISABLED</h4>
<pre>static final&nbsp;int EVENT_VIDEO_DISABLED</pre>
<div class="block">A video renderer was disabled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_DISABLED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_FRAME_PROCESSING_OFFSET">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_FRAME_PROCESSING_OFFSET</h4>
<pre>static final&nbsp;int EVENT_VIDEO_FRAME_PROCESSING_OFFSET</pre>
<div class="block">Video frame processing offset data has been reported.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_FRAME_PROCESSING_OFFSET">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_RENDERED_FIRST_FRAME">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_RENDERED_FIRST_FRAME</h4>
<pre>static final&nbsp;int EVENT_RENDERED_FIRST_FRAME</pre>
<div class="block">The first frame has been rendered since setting the surface, since the renderer was reset or
 since the stream changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_RENDERED_FIRST_FRAME">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_SIZE_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_VIDEO_SIZE_CHANGED</h4>
<pre>static final&nbsp;int EVENT_VIDEO_SIZE_CHANGED</pre>
<div class="block">The video size changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_SIZE_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_SURFACE_SIZE_CHANGED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_SURFACE_SIZE_CHANGED</h4>
<pre>static final&nbsp;int EVENT_SURFACE_SIZE_CHANGED</pre>
<div class="block">The surface size changed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_SURFACE_SIZE_CHANGED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DRM_SESSION_ACQUIRED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DRM_SESSION_ACQUIRED</h4>
<pre>static final&nbsp;int EVENT_DRM_SESSION_ACQUIRED</pre>
<div class="block">A DRM session has been acquired.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DRM_SESSION_ACQUIRED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DRM_KEYS_LOADED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DRM_KEYS_LOADED</h4>
<pre>static final&nbsp;int EVENT_DRM_KEYS_LOADED</pre>
<div class="block">DRM keys were loaded.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DRM_KEYS_LOADED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DRM_SESSION_MANAGER_ERROR">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DRM_SESSION_MANAGER_ERROR</h4>
<pre>static final&nbsp;int EVENT_DRM_SESSION_MANAGER_ERROR</pre>
<div class="block">A non-fatal DRM session manager error occurred.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DRM_SESSION_MANAGER_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DRM_KEYS_RESTORED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DRM_KEYS_RESTORED</h4>
<pre>static final&nbsp;int EVENT_DRM_KEYS_RESTORED</pre>
<div class="block">DRM keys were restored.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DRM_KEYS_RESTORED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DRM_KEYS_REMOVED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DRM_KEYS_REMOVED</h4>
<pre>static final&nbsp;int EVENT_DRM_KEYS_REMOVED</pre>
<div class="block">DRM keys were removed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DRM_KEYS_REMOVED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_DRM_SESSION_RELEASED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_DRM_SESSION_RELEASED</h4>
<pre>static final&nbsp;int EVENT_DRM_SESSION_RELEASED</pre>
<div class="block">A DRM session has been released.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_DRM_SESSION_RELEASED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_PLAYER_RELEASED">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_PLAYER_RELEASED</h4>
<pre>static final&nbsp;int EVENT_PLAYER_RELEASED</pre>
<div class="block">The player was released.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_PLAYER_RELEASED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_AUDIO_CODEC_ERROR">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>EVENT_AUDIO_CODEC_ERROR</h4>
<pre>static final&nbsp;int EVENT_AUDIO_CODEC_ERROR</pre>
<div class="block">The audio codec encountered an error.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_AUDIO_CODEC_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="EVENT_VIDEO_CODEC_ERROR">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>EVENT_VIDEO_CODEC_ERROR</h4>
<pre>static final&nbsp;int EVENT_VIDEO_CODEC_ERROR</pre>
<div class="block">The video codec encountered an error.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#com.google.android.exoplayer2.analytics.AnalyticsListener.EVENT_VIDEO_CODEC_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a id="onPlayerStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlayerStateChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onPlayerStateChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  boolean&nbsp;playWhenReady,
                                  <a href="../Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a>
                                  int&nbsp;playbackState)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onPlaybackStateChanged(EventTime, int)</code></a> and <a href="#onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)"><code>onPlayWhenReadyChanged(EventTime, boolean, int)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlaybackStateChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlaybackStateChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                    <a href="../Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a>
                                    int&nbsp;state)</pre>
<div class="block">Called when the playback state changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>state</code> - The new <a href="../Player.State.html" title="annotation in com.google.android.exoplayer2"><code>playback state</code></a>.</dd>
</dl>
</li>
</ul>
<a id="onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlayWhenReadyChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlayWhenReadyChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                    boolean&nbsp;playWhenReady,
                                    <a href="../Player.PlayWhenReadyChangeReason.html" title="annotation in com.google.android.exoplayer2">@PlayWhenReadyChangeReason</a>
                                    int&nbsp;reason)</pre>
<div class="block">Called when the value changed that indicates whether playback will proceed when ready.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>playWhenReady</code> - Whether playback will proceed when ready.</dd>
<dd><code>reason</code> - The <a href="../Player.PlayWhenReadyChangeReason.html" title="annotation in com.google.android.exoplayer2"><code>reason</code></a> of the change.</dd>
</dl>
</li>
</ul>
<a id="onPlaybackSuppressionReasonChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlaybackSuppressionReasonChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlaybackSuppressionReasonChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                                <a href="../Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2">@PlaybackSuppressionReason</a>
                                                int&nbsp;playbackSuppressionReason)</pre>
<div class="block">Called when playback suppression reason changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>playbackSuppressionReason</code> - The new <a href="../Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.PlaybackSuppressionReason</code></a>.</dd>
</dl>
</li>
</ul>
<a id="onIsPlayingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onIsPlayingChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onIsPlayingChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                boolean&nbsp;isPlaying)</pre>
<div class="block">Called when the player starts or stops playing.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>isPlaying</code> - Whether the player is playing.</dd>
</dl>
</li>
</ul>
<a id="onTimelineChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onTimelineChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onTimelineChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                               <a href="../Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2">@TimelineChangeReason</a>
                               int&nbsp;reason)</pre>
<div class="block">Called when the timeline changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>reason</code> - The reason for the timeline change.</dd>
</dl>
</li>
</ul>
<a id="onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onMediaItemTransition</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onMediaItemTransition&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                   @Nullable
                                   <a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;mediaItem,
                                   <a href="../Player.MediaItemTransitionReason.html" title="annotation in com.google.android.exoplayer2">@MediaItemTransitionReason</a>
                                   int&nbsp;reason)</pre>
<div class="block">Called when playback transitions to a different media item.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>mediaItem</code> - The media item.</dd>
<dd><code>reason</code> - The reason for the media item transition.</dd>
</dl>
</li>
</ul>
<a id="onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPositionDiscontinuity</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onPositionDiscontinuity&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                     <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a>
                                     int&nbsp;reason)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)"><code>onPositionDiscontinuity(EventTime, Player.PositionInfo,
     Player.PositionInfo, int)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPositionDiscontinuity</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPositionDiscontinuity&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                     <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
                                     <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
                                     <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a>
                                     int&nbsp;reason)</pre>
<div class="block">Called when a position discontinuity occurred.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>oldPosition</code> - The position before the discontinuity.</dd>
<dd><code>newPosition</code> - The position after the discontinuity.</dd>
<dd><code>reason</code> - The reason for the position discontinuity.</dd>
</dl>
</li>
</ul>
<a id="onSeekStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSeekStarted</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onSeekStarted&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)"><code>onPositionDiscontinuity(EventTime, Player.PositionInfo,
     Player.PositionInfo, int)</code></a> instead, listening to changes with <a href="../Player.html#DISCONTINUITY_REASON_SEEK"><code>Player.DISCONTINUITY_REASON_SEEK</code></a>.</div>
</div>
</li>
</ul>
<a id="onSeekProcessed(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSeekProcessed</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onSeekProcessed&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Seeks are processed without delay. Use <a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onPositionDiscontinuity(EventTime,
     int)</code></a> with reason <a href="../Player.html#DISCONTINUITY_REASON_SEEK"><code>Player.DISCONTINUITY_REASON_SEEK</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onPlaybackParametersChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackParameters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlaybackParametersChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlaybackParametersChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                         <a href="../PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</pre>
<div class="block">Called when the playback parameters changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>playbackParameters</code> - The new playback parameters.</dd>
</dl>
</li>
</ul>
<a id="onSeekBackIncrementChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSeekBackIncrementChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onSeekBackIncrementChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                        long&nbsp;seekBackIncrementMs)</pre>
<div class="block">Called when the seek back increment changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>seekBackIncrementMs</code> - The seek back increment, in milliseconds.</dd>
</dl>
</li>
</ul>
<a id="onSeekForwardIncrementChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSeekForwardIncrementChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onSeekForwardIncrementChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                           long&nbsp;seekForwardIncrementMs)</pre>
<div class="block">Called when the seek forward increment changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>seekForwardIncrementMs</code> - The seek forward increment, in milliseconds.</dd>
</dl>
</li>
</ul>
<a id="onMaxSeekToPreviousPositionChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onMaxSeekToPreviousPositionChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onMaxSeekToPreviousPositionChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                                int&nbsp;maxSeekToPreviousPositionMs)</pre>
<div class="block">Called when the maximum position for which <a href="../Player.html#seekToPrevious()"><code>Player.seekToPrevious()</code></a> seeks to the
 previous window changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>maxSeekToPreviousPositionMs</code> - The maximum seek to previous position, in milliseconds.</dd>
</dl>
</li>
</ul>
<a id="onRepeatModeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onRepeatModeChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onRepeatModeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                 <a href="../Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a>
                                 int&nbsp;repeatMode)</pre>
<div class="block">Called when the repeat mode changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>repeatMode</code> - The new repeat mode.</dd>
</dl>
</li>
</ul>
<a id="onShuffleModeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onShuffleModeChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onShuffleModeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  boolean&nbsp;shuffleModeEnabled)</pre>
<div class="block">Called when the shuffle mode changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>shuffleModeEnabled</code> - Whether the shuffle mode is enabled.</dd>
</dl>
</li>
</ul>
<a id="onIsLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onIsLoadingChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onIsLoadingChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                boolean&nbsp;isLoading)</pre>
<div class="block">Called when the player starts or stops loading data from a source.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>isLoading</code> - Whether the player is loading.</dd>
</dl>
</li>
</ul>
<a id="onLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onLoadingChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onLoadingChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                              boolean&nbsp;isLoading)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onIsLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)"><code>onIsLoadingChanged(EventTime, boolean)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onAvailableCommandsChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.Commands)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAvailableCommandsChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAvailableCommandsChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                        <a href="../Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a>&nbsp;availableCommands)</pre>
<div class="block">Called when the player's available commands changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>availableCommands</code> - The available commands.</dd>
</dl>
</li>
</ul>
<a id="onPlayerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlayerError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlayerError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                           <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</pre>
<div class="block">Called when a fatal player error occurred.

 <p>Implementations of <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> may pass an instance of a subclass of <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2"><code>PlaybackException</code></a> to this method in order to include more information about the error.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>error</code> - The error.</dd>
</dl>
</li>
</ul>
<a id="onTracksChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onTracksChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onTracksChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             <a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a>&nbsp;trackGroups,
                             <a href="../trackselection/TrackSelectionArray.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionArray</a>&nbsp;trackSelections)</pre>
<div class="block">Called when the available or selected tracks for the renderers changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>trackGroups</code> - The available tracks. May be empty.</dd>
<dd><code>trackSelections</code> - The track selections for each renderer. May contain null elements.</dd>
</dl>
</li>
</ul>
<a id="onStaticMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.util.List)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onStaticMetadataChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onStaticMetadataChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                     <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="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata" target="_top">Metadata</a>&gt;&nbsp;metadataList)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="../Player.html#getMediaMetadata()"><code>Player.getMediaMetadata()</code></a> and <a href="#onMediaMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)"><code>onMediaMetadataChanged(EventTime,
     MediaMetadata)</code></a> for access to structured metadata, or access the raw static metadata
     directly from the <a href="../trackselection/TrackSelection.html#getFormat(int)"><code>track selections' formats</code></a>.</div>
</div>
</li>
</ul>
<a id="onMediaMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onMediaMetadataChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onMediaMetadataChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                    <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;mediaMetadata)</pre>
<div class="block">Called when the combined <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.

 <p>The provided <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> is a combination of the <a href="../MediaItem.html#mediaMetadata"><code>MediaItem.mediaMetadata</code></a>
 and the static and dynamic metadata from the <a href="../trackselection/TrackSelection.html#getFormat(int)"><code>track
 selections' formats</code></a> and <a href="../metadata/MetadataOutput.html#onMetadata(com.google.android.exoplayer2.metadata.Metadata)"><code>MetadataOutput.onMetadata(Metadata)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>mediaMetadata</code> - The combined <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>.</dd>
</dl>
</li>
</ul>
<a id="onPlaylistMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlaylistMetadataChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlaylistMetadataChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;playlistMetadata)</pre>
<div class="block">Called when the playlist <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>playlistMetadata</code> - The playlist <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>.</dd>
</dl>
</li>
</ul>
<a id="onLoadStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onLoadStarted</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onLoadStarted&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                           <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
                           <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
<div class="block">Called when a media source started loading data.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> defining the load event.</dd>
<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the data being loaded.</dd>
</dl>
</li>
</ul>
<a id="onLoadCompleted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onLoadCompleted</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onLoadCompleted&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
                             <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
<div class="block">Called when a media source completed loading data.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> defining the load event.</dd>
<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the data being loaded.</dd>
</dl>
</li>
</ul>
<a id="onLoadCanceled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onLoadCanceled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onLoadCanceled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                            <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
                            <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
<div class="block">Called when a media source canceled loading data.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> defining the load event.</dd>
<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the data being loaded.</dd>
</dl>
</li>
</ul>
<a id="onLoadError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onLoadError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onLoadError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                         <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
                         <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData,
                         <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a>&nbsp;error,
                         boolean&nbsp;wasCanceled)</pre>
<div class="block">Called when a media source loading error occurred.

 <p>This method being called does not indicate that playback has failed, or that it will fail.
 The player may be able to recover from the error. Hence applications should <em>not</em>
 implement this method to display a user visible error or initiate an application level retry.
 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)</code></a> is the appropriate place to implement such behavior. This
 method is called to provide the application with an opportunity to log the error if it wishes
 to do so.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> defining the load event.</dd>
<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the data being loaded.</dd>
<dd><code>error</code> - The load error.</dd>
<dd><code>wasCanceled</code> - Whether the load was canceled as a result of the error.</dd>
</dl>
</li>
</ul>
<a id="onDownstreamFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDownstreamFormatChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDownstreamFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
<div class="block">Called when the downstream format sent to the renderers changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the newly selected media data.</dd>
</dl>
</li>
</ul>
<a id="onUpstreamDiscarded(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onUpstreamDiscarded</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onUpstreamDiscarded&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
<div class="block">Called when data is removed from the back of a media buffer, typically so that it can be
 re-buffered in a different format.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the media being discarded.</dd>
</dl>
</li>
</ul>
<a id="onBandwidthEstimate(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onBandwidthEstimate</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onBandwidthEstimate&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                 int&nbsp;totalLoadTimeMs,
                                 long&nbsp;totalBytesLoaded,
                                 long&nbsp;bitrateEstimate)</pre>
<div class="block">Called when the bandwidth estimate for the current data source has been updated.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>totalLoadTimeMs</code> - The total time spend loading this update is based on, in milliseconds.</dd>
<dd><code>totalBytesLoaded</code> - The total bytes loaded this update is based on.</dd>
<dd><code>bitrateEstimate</code> - The bandwidth estimate, in bits per second.</dd>
</dl>
</li>
</ul>
<a id="onMetadata(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.metadata.Metadata)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onMetadata</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onMetadata&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                        <a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata">Metadata</a>&nbsp;metadata)</pre>
<div class="block">Called when there is <a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata"><code>Metadata</code></a> associated with the current playback time.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>metadata</code> - The metadata.</dd>
</dl>
</li>
</ul>
<a id="onDecoderEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDecoderEnabled</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onDecoderEnabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                              int&nbsp;trackType,
                              <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> and <a href="#onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,java.lang.String,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDecoderInitialized</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onDecoderInitialized&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  int&nbsp;trackType,
                                  <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                                  long&nbsp;initializationDurationMs)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, java.lang.String, long, long)</code></a> and <a href="#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, java.lang.String, long, long)</code></a>
     instead.</div>
</div>
</li>
</ul>
<a id="onDecoderInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.Format)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDecoderInputFormatChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onDecoderInputFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                         int&nbsp;trackType,
                                         <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onAudioInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>
     and <a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onVideoInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>. instead.</div>
</div>
</li>
</ul>
<a id="onDecoderDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDecoderDisabled</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onDecoderDisabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                               int&nbsp;trackType,
                               <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> and <a href="#onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)"><code>onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime, com.google.android.exoplayer2.decoder.DecoderCounters)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioEnabled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioEnabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                            <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
<div class="block">Called when an audio renderer is enabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderCounters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that will be updated by the renderer for as long
     as it remains enabled.</dd>
</dl>
</li>
</ul>
<a id="onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioDecoderInitialized</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioDecoderInitialized&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                                       long&nbsp;initializedTimestampMs,
                                       long&nbsp;initializationDurationMs)</pre>
<div class="block">Called when an audio renderer creates a decoder.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderName</code> - The decoder that was created.</dd>
<dd><code>initializedTimestampMs</code> - <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> when initialization
     finished.</dd>
<dd><code>initializationDurationMs</code> - The time taken to initialize the decoder in milliseconds.</dd>
</dl>
</li>
</ul>
<a id="onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioDecoderInitialized</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onAudioDecoderInitialized&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                                       long&nbsp;initializationDurationMs)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onAudioDecoderInitialized(EventTime, String, long, long)</code></a>.</div>
</div>
</li>
</ul>
<a id="onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioInputFormatChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onAudioInputFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onAudioInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</li>
</ul>
<a id="onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioInputFormatChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioInputFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
                                       @Nullable
                                       <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</pre>
<div class="block">Called when the format of the media being consumed by an audio renderer changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>format</code> - The new format.</dd>
<dd><code>decoderReuseEvaluation</code> - The result of the evaluation to determine whether an existing
     decoder instance can be reused for the new format, or <code>null</code> if the renderer did not
     have a decoder.</dd>
</dl>
</li>
</ul>
<a id="onAudioPositionAdvancing(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioPositionAdvancing</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioPositionAdvancing&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                      long&nbsp;playoutStartSystemTimeMs)</pre>
<div class="block">Called when the audio position has increased for the first time since the last pause or
 position reset.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>playoutStartSystemTimeMs</code> - The approximate derived <a href="https://developer.android.com/reference/java/lang/System.html#currentTimeMillis()" title="class or interface in java.lang" class="externalLink" target="_top"><code>System.currentTimeMillis()</code></a> at
     which playout started.</dd>
</dl>
</li>
</ul>
<a id="onAudioUnderrun(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioUnderrun</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioUnderrun&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             int&nbsp;bufferSize,
                             long&nbsp;bufferSizeMs,
                             long&nbsp;elapsedSinceLastFeedMs)</pre>
<div class="block">Called when an audio underrun occurs.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>bufferSize</code> - The size of the audio output buffer, in bytes.</dd>
<dd><code>bufferSizeMs</code> - The size of the audio output buffer, in milliseconds, if it contains PCM
     encoded audio. <a href="../C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if the output buffer contains non-PCM encoded audio.</dd>
<dd><code>elapsedSinceLastFeedMs</code> - The time since audio was last written to the output buffer.</dd>
</dl>
</li>
</ul>
<a id="onAudioDecoderReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioDecoderReleased</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioDecoderReleased&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                    <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName)</pre>
<div class="block">Called when an audio renderer releases a decoder.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderName</code> - The decoder that was released.</dd>
</dl>
</li>
</ul>
<a id="onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioDisabled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioDisabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
<div class="block">Called when an audio renderer is disabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderCounters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that were updated by the renderer.</dd>
</dl>
</li>
</ul>
<a id="onAudioSessionIdChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioSessionIdChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioSessionIdChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                     int&nbsp;audioSessionId)</pre>
<div class="block">Called when the audio session ID changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>audioSessionId</code> - The audio session ID.</dd>
</dl>
</li>
</ul>
<a id="onAudioAttributesChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.audio.AudioAttributes)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioAttributesChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioAttributesChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                      <a href="../audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a>&nbsp;audioAttributes)</pre>
<div class="block">Called when the audio attributes change.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>audioAttributes</code> - The audio attributes.</dd>
</dl>
</li>
</ul>
<a id="onSkipSilenceEnabledChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSkipSilenceEnabledChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onSkipSilenceEnabledChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                         boolean&nbsp;skipSilenceEnabled)</pre>
<div class="block">Called when skipping silences is enabled or disabled in the audio stream.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>skipSilenceEnabled</code> - Whether skipping silences in the audio stream is enabled.</dd>
</dl>
</li>
</ul>
<a id="onAudioSinkError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioSinkError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioSinkError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                              <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;audioSinkError)</pre>
<div class="block">Called when <a href="../audio/AudioSink.html" title="interface in com.google.android.exoplayer2.audio"><code>AudioSink</code></a> has encountered an error.

 <p>This method being called does not indicate that playback has failed, or that it will fail.
 The player may be able to recover from the error. Hence applications should <em>not</em>
 implement this method to display a user visible error or initiate an application level retry.
 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)</code></a> is the appropriate place to implement such behavior. This
 method is called to provide the application with an opportunity to log the error if it wishes
 to do so.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>audioSinkError</code> - The error that occurred. Typically an <a href="../audio/AudioSink.InitializationException.html" title="class in com.google.android.exoplayer2.audio"><code>AudioSink.InitializationException</code></a>, a <a href="../audio/AudioSink.WriteException.html" title="class in com.google.android.exoplayer2.audio"><code>AudioSink.WriteException</code></a>, or an <a href="../audio/AudioSink.UnexpectedDiscontinuityException.html" title="class in com.google.android.exoplayer2.audio"><code>AudioSink.UnexpectedDiscontinuityException</code></a>.</dd>
</dl>
</li>
</ul>
<a id="onAudioCodecError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onAudioCodecError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onAudioCodecError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                               <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;audioCodecError)</pre>
<div class="block">Called when an audio decoder encounters an error.

 <p>This method being called does not indicate that playback has failed, or that it will fail.
 The player may be able to recover from the error. Hence applications should <em>not</em>
 implement this method to display a user visible error or initiate an application level retry.
 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)</code></a> is the appropriate place to implement such behavior. This
 method is called to provide the application with an opportunity to log the error if it wishes
 to do so.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>audioCodecError</code> - The error. Typically a <a href="https://developer.android.com/reference/android/media/MediaCodec.CodecException.html" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.CodecException</code></a> if the renderer uses
     <a href="https://developer.android.com/reference/android/media/MediaCodec.html" title="class or interface in android.media" class="externalLink"><code>MediaCodec</code></a>, or a <a href="../decoder/DecoderException.html" title="class in com.google.android.exoplayer2.decoder" target="_top"><code>DecoderException</code></a> if the renderer uses a software decoder.</dd>
</dl>
</li>
</ul>
<a id="onVolumeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,float)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVolumeChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVolumeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             float&nbsp;volume)</pre>
<div class="block">Called when the volume changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>volume</code> - The new volume, with 0 being silence and 1 being unity gain.</dd>
</dl>
</li>
</ul>
<a id="onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoEnabled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoEnabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                            <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
<div class="block">Called when a video renderer is enabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderCounters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that will be updated by the renderer for as long
     as it remains enabled.</dd>
</dl>
</li>
</ul>
<a id="onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDecoderInitialized</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoDecoderInitialized&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                                       long&nbsp;initializedTimestampMs,
                                       long&nbsp;initializationDurationMs)</pre>
<div class="block">Called when a video renderer creates a decoder.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderName</code> - The decoder that was created.</dd>
<dd><code>initializedTimestampMs</code> - <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> when initialization
     finished.</dd>
<dd><code>initializationDurationMs</code> - The time taken to initialize the decoder in milliseconds.</dd>
</dl>
</li>
</ul>
<a id="onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDecoderInitialized</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onVideoDecoderInitialized&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName,
                                       long&nbsp;initializationDurationMs)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)"><code>onVideoDecoderInitialized(EventTime, String, long, long)</code></a>.</div>
</div>
</li>
</ul>
<a id="onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoInputFormatChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onVideoInputFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Use <a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)"><code>onVideoInputFormatChanged(EventTime, Format, DecoderReuseEvaluation)</code></a>.</div>
</div>
</li>
</ul>
<a id="onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoInputFormatChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoInputFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                       <a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
                                       @Nullable
                                       <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</pre>
<div class="block">Called when the format of the media being consumed by a video renderer changes.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>format</code> - The new format.</dd>
<dd><code>decoderReuseEvaluation</code> - The result of the evaluation to determine whether an existing
     decoder instance can be reused for the new format, or <code>null</code> if the renderer did not
     have a decoder.</dd>
</dl>
</li>
</ul>
<a id="onDroppedVideoFrames(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDroppedVideoFrames</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDroppedVideoFrames&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  int&nbsp;droppedFrames,
                                  long&nbsp;elapsedMs)</pre>
<div class="block">Called after video frames have been dropped.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>droppedFrames</code> - The number of dropped frames since the last call to this method.</dd>
<dd><code>elapsedMs</code> - The duration in milliseconds over which the frames were dropped. This duration
     is timed from when the renderer was started or from when dropped frames were last reported
     (whichever was more recent), and not from when the first of the reported drops occurred.</dd>
</dl>
</li>
</ul>
<a id="onVideoDecoderReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDecoderReleased</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoDecoderReleased&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                    <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;decoderName)</pre>
<div class="block">Called when a video renderer releases a decoder.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderName</code> - The decoder that was released.</dd>
</dl>
</li>
</ul>
<a id="onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoDisabled</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoDisabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                             <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
<div class="block">Called when a video renderer is disabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>decoderCounters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that were updated by the renderer.</dd>
</dl>
</li>
</ul>
<a id="onVideoFrameProcessingOffset(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoFrameProcessingOffset</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoFrameProcessingOffset&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                          long&nbsp;totalProcessingOffsetUs,
                                          int&nbsp;frameCount)</pre>
<div class="block">Called when there is an update to the video frame processing offset reported by a video
 renderer.

 <p>The processing offset for a video frame is the difference between the time at which the
 frame became available to render, and the time at which it was scheduled to be rendered. A
 positive value indicates the frame became available early enough, whereas a negative value
 indicates that the frame wasn't available until after the time at which it should have been
 rendered.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>totalProcessingOffsetUs</code> - The sum of the video frame processing offsets for frames
     rendered since the last call to this method.</dd>
<dd><code>frameCount</code> - The number to samples included in <code>totalProcessingOffsetUs</code>.</dd>
</dl>
</li>
</ul>
<a id="onVideoCodecError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoCodecError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoCodecError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                               <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;videoCodecError)</pre>
<div class="block">Called when a video decoder encounters an error.

 <p>This method being called does not indicate that playback has failed, or that it will fail.
 The player may be able to recover from the error. Hence applications should <em>not</em>
 implement this method to display a user visible error or initiate an application level retry.
 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)</code></a> is the appropriate place to implement such behavior. This
 method is called to provide the application with an opportunity to log the error if it wishes
 to do so.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>videoCodecError</code> - The error. Typically a <a href="https://developer.android.com/reference/android/media/MediaCodec.CodecException.html" title="class or interface in android.media" class="externalLink" target="_top"><code>MediaCodec.CodecException</code></a> if the renderer uses
     <a href="https://developer.android.com/reference/android/media/MediaCodec.html" title="class or interface in android.media" class="externalLink"><code>MediaCodec</code></a>, or a <a href="../decoder/DecoderException.html" title="class in com.google.android.exoplayer2.decoder" target="_top"><code>DecoderException</code></a> if the renderer uses a software decoder.</dd>
</dl>
</li>
</ul>
<a id="onRenderedFirstFrame(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Object,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onRenderedFirstFrame</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onRenderedFirstFrame&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;output,
                                  long&nbsp;renderTimeMs)</pre>
<div class="block">Called when a frame is rendered for the first time since setting the surface, or since the
 renderer was reset, or since the stream being rendered was changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>output</code> - The output to which a frame has been rendered. Normally a <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a>,
     however may also be other output types (e.g., a <a href="../video/VideoDecoderOutputBufferRenderer.html" title="interface in com.google.android.exoplayer2.video"><code>VideoDecoderOutputBufferRenderer</code></a>).</dd>
<dd><code>renderTimeMs</code> - <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> when the first frame was rendered.</dd>
</dl>
</li>
</ul>
<a id="onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoSizeChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onVideoSizeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                <a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</pre>
<div class="block">Called before a frame is rendered for the first time since setting the surface, and each time
 there's a change in the size or pixel aspect ratio of the video being rendered.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>videoSize</code> - The new size of the video.</dd>
</dl>
</li>
</ul>
<a id="onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,int,int,float)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onVideoSizeChanged</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onVideoSizeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                int&nbsp;width,
                                int&nbsp;height,
                                int&nbsp;unappliedRotationDegrees,
                                float&nbsp;pixelWidthHeightRatio)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Implement <a href="#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)"><code>onVideoSizeChanged(EventTime eventTime, VideoSize)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onSurfaceSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onSurfaceSizeChanged</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onSurfaceSizeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  int&nbsp;width,
                                  int&nbsp;height)</pre>
<div class="block">Called when the output surface size changed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>width</code> - The surface width in pixels. May be <a href="../C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if unknown, or 0 if the
     video is not rendered onto a surface.</dd>
<dd><code>height</code> - The surface height in pixels. May be <a href="../C.html#LENGTH_UNSET"><code>C.LENGTH_UNSET</code></a> if unknown, or 0 if
     the video is not rendered onto a surface.</dd>
</dl>
</li>
</ul>
<a id="onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmSessionAcquired</h4>
<pre class="methodSignature"><a href="https://developer.android.com/reference/java/lang/Deprecated.html" title="class or interface in java.lang" class="externalLink" target="_top">@Deprecated</a>
default&nbsp;void&nbsp;onDrmSessionAcquired&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
<div class="deprecationComment">Implement <a href="#onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onDrmSessionAcquired(EventTime, int)</code></a> instead.</div>
</div>
</li>
</ul>
<a id="onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmSessionAcquired</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDrmSessionAcquired&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                  <a href="../drm/DrmSession.State.html" title="annotation in com.google.android.exoplayer2.drm">@State</a>
                                  int&nbsp;state)</pre>
<div class="block">Called each time a drm session is acquired.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>state</code> - The <a href="../drm/DrmSession.State.html" title="annotation in com.google.android.exoplayer2.drm"><code>DrmSession.State</code></a> of the session when the acquisition completed.</dd>
</dl>
</li>
</ul>
<a id="onDrmKeysLoaded(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmKeysLoaded</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDrmKeysLoaded&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="block">Called each time drm keys are loaded.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
</dl>
</li>
</ul>
<a id="onDrmSessionManagerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmSessionManagerError</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDrmSessionManagerError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
                                      <a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a>&nbsp;error)</pre>
<div class="block">Called when a drm error occurs.

 <p>This method being called does not indicate that playback has failed, or that it will fail.
 The player may be able to recover from the error. Hence applications should <em>not</em>
 implement this method to display a user visible error or initiate an application level retry.
 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)</code></a> is the appropriate place to implement such behavior. This
 method is called to provide the application with an opportunity to log the error if it wishes
 to do so.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
<dd><code>error</code> - The error.</dd>
</dl>
</li>
</ul>
<a id="onDrmKeysRestored(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmKeysRestored</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDrmKeysRestored&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="block">Called each time offline drm keys are restored.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
</dl>
</li>
</ul>
<a id="onDrmKeysRemoved(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmKeysRemoved</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDrmKeysRemoved&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="block">Called each time offline drm keys are removed.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
</dl>
</li>
</ul>
<a id="onDrmSessionReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onDrmSessionReleased</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onDrmSessionReleased&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="block">Called each time a drm session is released.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
</dl>
</li>
</ul>
<a id="onPlayerReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPlayerReleased</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onPlayerReleased&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime)</pre>
<div class="block">Called when the <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> is released.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>eventTime</code> - The event time.</dd>
</dl>
</li>
</ul>
<a id="onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onEvents</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;onEvents&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
                      <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a>&nbsp;events)</pre>
<div class="block">Called after one or more events occurred.

 <p>State changes and events that happen within one <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> message queue iteration are
 reported together and only after all individual callbacks were triggered.

 <p>Listeners should prefer this method over individual callbacks in the following cases:

 <ul>
   <li>They intend to trigger the same logic for multiple events (e.g. when updating a UI for
       both <a href="#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onPlaybackStateChanged(EventTime, int)</code></a> and <a href="#onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,int)"><code>onPlayWhenReadyChanged(EventTime, boolean, int)</code></a>).
   <li>They need access to the <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> object to trigger further events (e.g. to call
       <a href="../Player.html#seekTo(long)"><code>Player.seekTo(long)</code></a> after a <a href="#onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,int)"><code>onMediaItemTransition(EventTime, MediaItem, int)</code></a>).
   <li>They intend to use multiple state values together or in combination with <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a>
       getter methods. For example using <a href="../Player.html#getCurrentWindowIndex()"><code>Player.getCurrentWindowIndex()</code></a> with the <code>
       timeline</code> provided in <a href="#onTimelineChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onTimelineChanged(EventTime, int)</code></a> is only safe from within
       this method.
   <li>They are interested in events that logically happened together (e.g <a href="#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)"><code>onPlaybackStateChanged(EventTime, int)</code></a> to <a href="../Player.html#STATE_BUFFERING"><code>Player.STATE_BUFFERING</code></a> because of
       <a href="#onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,int)"><code>onMediaItemTransition(EventTime, MediaItem, int)</code></a>).
 </ul></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>player</code> - The <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a>.</dd>
<dd><code>events</code> - The <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.Events</code></a> that occurred in this iteration.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.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" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.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 id="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>
