1<!DOCTYPE HTML>
2<!-- NewPage -->
3<html lang="en">
4<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 -->
5<title>DefaultAnalyticsCollector (ExoPlayer library)</title>
6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
8<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
9<script type="text/javascript" src="../../../../../script.js"></script>
10<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
11<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
12<!--[if IE]>
13<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
14<![endif]-->
15<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
16<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
17</head>
18<body>
19<script type="text/javascript"><!--
20    try {
21        if (location.href.indexOf('is-external=true') == -1) {
22            parent.document.title="DefaultAnalyticsCollector (ExoPlayer library)";
23        }
24    }
25    catch(err) {
26    }
27//-->
28var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10};
29var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
30var altColor = "altColor";
31var rowColor = "rowColor";
32var tableTab = "tableTab";
33var activeTableTab = "activeTableTab";
34var pathtoroot = "../../../../../";
35var useModuleDirectories = false;
36loadScripts(document, 'script');</script>
37<noscript>
38<div>JavaScript is disabled on your browser.</div>
39</noscript>
40<header role="banner">
41<nav role="navigation">
42<div class="fixedNav">
43<!-- ========= START OF TOP NAVBAR ======= -->
44<div class="topNav"><a id="navbar.top">
45<!--   -->
46</a>
47<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
48<a id="navbar.top.firstrow">
49<!--   -->
50</a>
51<ul class="navList" title="Navigation">
52<li><a href="../../../../../index.html">Overview</a></li>
53<li><a href="package-summary.html">Package</a></li>
54<li class="navBarCell1Rev">Class</li>
55<li><a href="package-tree.html">Tree</a></li>
56<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
57<li><a href="../../../../../index-all.html">Index</a></li>
58<li><a href="../../../../../help-doc.html">Help</a></li>
59</ul>
60</div>
61<div class="subNav">
62<ul class="navList" id="allclasses_navbar_top">
63<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
64</ul>
65<ul class="navListSearch">
66<li><label for="search">SEARCH:</label>
67<input type="text" id="search" value="search" disabled="disabled">
68<input type="reset" id="reset" value="reset" disabled="disabled">
69</li>
70</ul>
71<div>
72<script type="text/javascript"><!--
73  allClassesLink = document.getElementById("allclasses_navbar_top");
74  if(window==top) {
75    allClassesLink.style.display = "block";
76  }
77  else {
78    allClassesLink.style.display = "none";
79  }
80  //-->
81</script>
82<noscript>
83<div>JavaScript is disabled on your browser.</div>
84</noscript>
85</div>
86<div>
87<ul class="subNavList">
88<li>Summary:&nbsp;</li>
89<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
90<li>Field&nbsp;|&nbsp;</li>
91<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
92<li><a href="#method.summary">Method</a></li>
93</ul>
94<ul class="subNavList">
95<li>Detail:&nbsp;</li>
96<li>Field&nbsp;|&nbsp;</li>
97<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
98<li><a href="#method.detail">Method</a></li>
99</ul>
100</div>
101<a id="skip.navbar.top">
102<!--   -->
103</a></div>
104<!-- ========= END OF TOP NAVBAR ========= -->
105</div>
106<div class="navPadding">&nbsp;</div>
107<script type="text/javascript"><!--
108$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
109//-->
110</script>
111</nav>
112</header>
113<!-- ======== START OF CLASS DATA ======== -->
114<main role="main">
115<div class="header">
116<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.analytics</a></div>
117<h2 title="Class DefaultAnalyticsCollector" class="title">Class DefaultAnalyticsCollector</h2>
118</div>
119<div class="contentContainer">
120<ul class="inheritance">
121<li><a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">java.lang.Object</a></li>
122<li>
123<ul class="inheritance">
124<li>com.google.android.exoplayer2.analytics.DefaultAnalyticsCollector</li>
125</ul>
126</li>
127</ul>
128<div class="description">
129<ul class="blockList">
130<li class="blockList">
131<dl>
132<dt>All Implemented Interfaces:</dt>
133<dd><code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code>, <code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code>, <code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code>, <code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code>, <code><a href="../upstream/BandwidthMeter.EventListener.html" title="interface in com.google.android.exoplayer2.upstream">BandwidthMeter.EventListener</a></code></dd>
134</dl>
135<hr>
136<pre>public class <span class="typeNameLabel">DefaultAnalyticsCollector</span>
137extends <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>
138implements <a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></pre>
139<div class="block">Data collector that forwards analytics events to <a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics"><code>AnalyticsListeners</code></a>.</div>
140</li>
141</ul>
142</div>
143<div class="summary">
144<ul class="blockList">
145<li class="blockList">
146<!-- ======== NESTED CLASS SUMMARY ======== -->
147<section role="region">
148<ul class="blockList">
149<li class="blockList"><a id="nested.class.summary">
150<!--   -->
151</a>
152<h3>Nested Class Summary</h3>
153<ul class="blockList">
154<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener">
155<!--   -->
156</a>
157<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.upstream.<a href="../upstream/BandwidthMeter.EventListener.html" title="interface in com.google.android.exoplayer2.upstream">BandwidthMeter.EventListener</a></h3>
158<code><a href="../upstream/BandwidthMeter.EventListener.EventDispatcher.html" title="class in com.google.android.exoplayer2.upstream">BandwidthMeter.EventListener.EventDispatcher</a></code></li>
159</ul>
160<ul class="blockList">
161<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.drm.DrmSessionEventListener">
162<!--   -->
163</a>
164<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.drm.<a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></h3>
165<code><a href="../drm/DrmSessionEventListener.EventDispatcher.html" title="class in com.google.android.exoplayer2.drm">DrmSessionEventListener.EventDispatcher</a></code></li>
166</ul>
167<ul class="blockList">
168<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.source.MediaSourceEventListener">
169<!--   -->
170</a>
171<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.source.<a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></h3>
172<code><a href="../source/MediaSourceEventListener.EventDispatcher.html" title="class in com.google.android.exoplayer2.source">MediaSourceEventListener.EventDispatcher</a></code></li>
173</ul>
174</li>
175</ul>
176</section>
177<!-- ======== CONSTRUCTOR SUMMARY ======== -->
178<section role="region">
179<ul class="blockList">
180<li class="blockList"><a id="constructor.summary">
181<!--   -->
182</a>
183<h3>Constructor Summary</h3>
184<table class="memberSummary">
185<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
186<tr>
187<th class="colFirst" scope="col">Constructor</th>
188<th class="colLast" scope="col">Description</th>
189</tr>
190<tr class="altColor">
191<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(com.google.android.exoplayer2.util.Clock)">DefaultAnalyticsCollector</a></span>&#8203;(<a href="../util/Clock.html" title="interface in com.google.android.exoplayer2.util">Clock</a>&nbsp;clock)</code></th>
192<td class="colLast">
193<div class="block">Creates an analytics collector.</div>
194</td>
195</tr>
196</table>
197</li>
198</ul>
199</section>
200<!-- ========== METHOD SUMMARY =========== -->
201<section role="region">
202<ul class="blockList">
203<li class="blockList"><a id="method.summary">
204<!--   -->
205</a>
206<h3>Method Summary</h3>
207<table class="memberSummary">
208<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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
209<tr>
210<th class="colFirst" scope="col">Modifier and Type</th>
211<th class="colSecond" scope="col">Method</th>
212<th class="colLast" scope="col">Description</th>
213</tr>
214<tr id="i0" class="altColor">
215<td class="colFirst"><code>void</code></td>
216<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">addListener</a></span>&#8203;(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>&nbsp;listener)</code></th>
217<td class="colLast">
218<div class="block">Adds a listener for analytics events.</div>
219</td>
220</tr>
221<tr id="i1" class="rowColor">
222<td class="colFirst"><code>protected <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a></code></td>
223<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#generateCurrentPlayerMediaPeriodEventTime()">generateCurrentPlayerMediaPeriodEventTime</a></span>()</code></th>
224<td class="colLast">
225<div class="block">Generates an <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> for the currently playing item in the player.</div>
226</td>
227</tr>
228<tr id="i2" class="altColor">
229<td class="colFirst"><code>protected <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a></code></td>
230<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#generateEventTime(com.google.android.exoplayer2.Timeline,int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">generateEventTime</a></span>&#8203;(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline,
231                 int&nbsp;windowIndex,
232                 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</code></th>
233<td class="colLast">
234<div class="block">Returns a new <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> for the specified timeline, window and media period id.</div>
235</td>
236</tr>
237<tr id="i3" class="rowColor">
238<td class="colFirst"><code>void</code></td>
239<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#notifySeekStarted()">notifySeekStarted</a></span>()</code></th>
240<td class="colLast">
241<div class="block">Notify analytics collector that a seek operation will start.</div>
242</td>
243</tr>
244<tr id="i4" class="altColor">
245<td class="colFirst"><code>void</code></td>
246<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioAttributesChanged(com.google.android.exoplayer2.audio.AudioAttributes)">onAudioAttributesChanged</a></span>&#8203;(<a href="../audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a>&nbsp;audioAttributes)</code></th>
247<td class="colLast">
248<div class="block">Called when the audio attributes change.</div>
249</td>
250</tr>
251<tr id="i5" class="rowColor">
252<td class="colFirst"><code>void</code></td>
253<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioCodecError(java.lang.Exception)">onAudioCodecError</a></span>&#8203;(<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>
254<td class="colLast">
255<div class="block">Called when an audio decoder encounters an error.</div>
256</td>
257</tr>
258<tr id="i6" class="altColor">
259<td class="colFirst"><code>void</code></td>
260<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDecoderInitialized(java.lang.String,long,long)">onAudioDecoderInitialized</a></span>&#8203;(<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,
261                         long&nbsp;initializedTimestampMs,
262                         long&nbsp;initializationDurationMs)</code></th>
263<td class="colLast">
264<div class="block">Called when a audio decoder is created.</div>
265</td>
266</tr>
267<tr id="i7" class="rowColor">
268<td class="colFirst"><code>void</code></td>
269<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDecoderReleased(java.lang.String)">onAudioDecoderReleased</a></span>&#8203;(<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>
270<td class="colLast">
271<div class="block">Called when a audio decoder is released.</div>
272</td>
273</tr>
274<tr id="i8" class="altColor">
275<td class="colFirst"><code>void</code></td>
276<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioDisabled</a></span>&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</code></th>
277<td class="colLast">
278<div class="block">Called when the audio renderer is disabled.</div>
279</td>
280</tr>
281<tr id="i9" class="rowColor">
282<td class="colFirst"><code>void</code></td>
283<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioEnabled</a></span>&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</code></th>
284<td class="colLast">
285<div class="block">Called when the audio renderer is enabled.</div>
286</td>
287</tr>
288<tr id="i10" class="altColor">
289<td class="colFirst"><code>void</code></td>
290<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onAudioInputFormatChanged</a></span>&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
291                         <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</code></th>
292<td class="colLast">
293<div class="block">Called when the format of the media being consumed by the audio renderer changes.</div>
294</td>
295</tr>
296<tr id="i11" class="rowColor">
297<td class="colFirst"><code>void</code></td>
298<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioPositionAdvancing(long)">onAudioPositionAdvancing</a></span>&#8203;(long&nbsp;playoutStartSystemTimeMs)</code></th>
299<td class="colLast">
300<div class="block">Called when the audio position has increased for the first time since the last pause or
301 position reset.</div>
302</td>
303</tr>
304<tr id="i12" class="altColor">
305<td class="colFirst"><code>void</code></td>
306<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioSessionIdChanged(int)">onAudioSessionIdChanged</a></span>&#8203;(int&nbsp;audioSessionId)</code></th>
307<td class="colLast">
308<div class="block">Called when the audio session ID changes.</div>
309</td>
310</tr>
311<tr id="i13" class="rowColor">
312<td class="colFirst"><code>void</code></td>
313<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioSinkError(java.lang.Exception)">onAudioSinkError</a></span>&#8203;(<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>
314<td class="colLast">
315<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>
316</td>
317</tr>
318<tr id="i14" class="altColor">
319<td class="colFirst"><code>void</code></td>
320<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAudioUnderrun(int,long,long)">onAudioUnderrun</a></span>&#8203;(int&nbsp;bufferSize,
321               long&nbsp;bufferSizeMs,
322               long&nbsp;elapsedSinceLastFeedMs)</code></th>
323<td class="colLast">
324<div class="block">Called when an audio underrun occurs.</div>
325</td>
326</tr>
327<tr id="i15" class="rowColor">
328<td class="colFirst"><code>void</code></td>
329<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)">onAvailableCommandsChanged</a></span>&#8203;(<a href="../Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a>&nbsp;availableCommands)</code></th>
330<td class="colLast">
331<div class="block">Called when the value returned from <a href="../Player.html#isCommandAvailable(@com.google.android.exoplayer2.Player.Commandint)"><code>Player.isCommandAvailable(int)</code></a> changes for at least one
332 <a href="../Player.Command.html" title="annotation in com.google.android.exoplayer2"><code>Player.Command</code></a>.</div>
333</td>
334</tr>
335<tr id="i16" class="altColor">
336<td class="colFirst"><code>void</code></td>
337<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onBandwidthSample(int,long,long)">onBandwidthSample</a></span>&#8203;(int&nbsp;elapsedMs,
338                 long&nbsp;bytesTransferred,
339                 long&nbsp;bitrateEstimate)</code></th>
340<td class="colLast">
341<div class="block">Called periodically to indicate that bytes have been transferred or the estimated bitrate has
342 changed.</div>
343</td>
344</tr>
345<tr id="i17" class="rowColor">
346<td class="colFirst"><code>void</code></td>
347<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onCues(java.util.List)">onCues</a></span>&#8203;(<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="../text/Cue.html" title="class in com.google.android.exoplayer2.text" target="_top">Cue</a>&gt;&nbsp;cues)</code></th>
348<td class="colLast">
349<div class="block">Called when there is a change in the <a href="../text/Cue.html" title="class in com.google.android.exoplayer2.text"><code>Cues</code></a>.</div>
350</td>
351</tr>
352<tr id="i18" class="altColor">
353<td class="colFirst"><code>void</code></td>
354<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDeviceInfoChanged(com.google.android.exoplayer2.DeviceInfo)">onDeviceInfoChanged</a></span>&#8203;(<a href="../DeviceInfo.html" title="class in com.google.android.exoplayer2">DeviceInfo</a>&nbsp;deviceInfo)</code></th>
355<td class="colLast">
356<div class="block">Called when the device information changes</div>
357</td>
358</tr>
359<tr id="i19" class="rowColor">
360<td class="colFirst"><code>void</code></td>
361<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDeviceVolumeChanged(int,boolean)">onDeviceVolumeChanged</a></span>&#8203;(int&nbsp;volume,
362                     boolean&nbsp;muted)</code></th>
363<td class="colLast">
364<div class="block">Called when the device volume or mute state changes.</div>
365</td>
366</tr>
367<tr id="i20" class="altColor">
368<td class="colFirst"><code>void</code></td>
369<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDownstreamFormatChanged(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">onDownstreamFormatChanged</a></span>&#8203;(int&nbsp;windowIndex,
370                         <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
371                         <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
372<td class="colLast">
373<div class="block">Called when a downstream format change occurs (i.e.</div>
374</td>
375</tr>
376<tr id="i21" class="rowColor">
377<td class="colFirst"><code>void</code></td>
378<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmKeysLoaded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmKeysLoaded</a></span>&#8203;(int&nbsp;windowIndex,
379               <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</code></th>
380<td class="colLast">
381<div class="block">Called each time keys are loaded.</div>
382</td>
383</tr>
384<tr id="i22" class="altColor">
385<td class="colFirst"><code>void</code></td>
386<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmKeysRemoved(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmKeysRemoved</a></span>&#8203;(int&nbsp;windowIndex,
387                <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</code></th>
388<td class="colLast">
389<div class="block">Called each time offline keys are removed.</div>
390</td>
391</tr>
392<tr id="i23" class="rowColor">
393<td class="colFirst"><code>void</code></td>
394<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmKeysRestored(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmKeysRestored</a></span>&#8203;(int&nbsp;windowIndex,
395                 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</code></th>
396<td class="colLast">
397<div class="block">Called each time offline keys are restored.</div>
398</td>
399</tr>
400<tr id="i24" class="altColor">
401<td class="colFirst"><code>void</code></td>
402<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionAcquired(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,@com.google.android.exoplayer2.drm.DrmSession.Stateint)">onDrmSessionAcquired</a></span>&#8203;(int&nbsp;windowIndex,
403                    <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
404                    @com.google.android.exoplayer2.drm.DrmSession.State int&nbsp;state)</code></th>
405<td class="colLast">
406<div class="block">Called each time a drm session is acquired.</div>
407</td>
408</tr>
409<tr id="i25" class="rowColor">
410<td class="colFirst"><code>void</code></td>
411<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionManagerError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,java.lang.Exception)">onDrmSessionManagerError</a></span>&#8203;(int&nbsp;windowIndex,
412                        <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
413                        <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>
414<td class="colLast">
415<div class="block">Called when a drm error occurs.</div>
416</td>
417</tr>
418<tr id="i26" class="altColor">
419<td class="colFirst"><code>void</code></td>
420<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDrmSessionReleased(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmSessionReleased</a></span>&#8203;(int&nbsp;windowIndex,
421                    <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</code></th>
422<td class="colLast">
423<div class="block">Called each time a drm session is released.</div>
424</td>
425</tr>
426<tr id="i27" class="rowColor">
427<td class="colFirst"><code>void</code></td>
428<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDroppedFrames(int,long)">onDroppedFrames</a></span>&#8203;(int&nbsp;count,
429               long&nbsp;elapsedMs)</code></th>
430<td class="colLast">
431<div class="block">Called to report the number of frames dropped by the video renderer.</div>
432</td>
433</tr>
434<tr id="i28" class="altColor">
435<td class="colFirst"><code>void</code></td>
436<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)">onEvents</a></span>&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
437        <a href="../Player.Events.html" title="class in com.google.android.exoplayer2">Player.Events</a>&nbsp;events)</code></th>
438<td class="colLast">
439<div class="block">Called when one or more player states changed.</div>
440</td>
441</tr>
442<tr id="i29" class="rowColor">
443<td class="colFirst"><code>void</code></td>
444<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onIsLoadingChanged(boolean)">onIsLoadingChanged</a></span>&#8203;(boolean&nbsp;isLoading)</code></th>
445<td class="colLast">
446<div class="block">Called when the player starts or stops loading the source.</div>
447</td>
448</tr>
449<tr id="i30" class="altColor">
450<td class="colFirst"><code>void</code></td>
451<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onIsPlayingChanged(boolean)">onIsPlayingChanged</a></span>&#8203;(boolean&nbsp;isPlaying)</code></th>
452<td class="colLast">
453<div class="block">Called when the value of <a href="../Player.html#isPlaying()"><code>Player.isPlaying()</code></a> changes.</div>
454</td>
455</tr>
456<tr id="i31" class="rowColor">
457<td class="colFirst"><code>void</code></td>
458<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadCanceled(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCanceled</a></span>&#8203;(int&nbsp;windowIndex,
459              <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
460              <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
461              <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
462<td class="colLast">
463<div class="block">Called when a load is canceled.</div>
464</td>
465</tr>
466<tr id="i32" class="altColor">
467<td class="colFirst"><code>void</code></td>
468<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadCompleted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCompleted</a></span>&#8203;(int&nbsp;windowIndex,
469               <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
470               <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
471               <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
472<td class="colLast">
473<div class="block">Called when a load ends.</div>
474</td>
475</tr>
476<tr id="i33" class="rowColor">
477<td class="colFirst"><code>void</code></td>
478<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">onLoadError</a></span>&#8203;(int&nbsp;windowIndex,
479           <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
480           <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
481           <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData,
482           <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,
483           boolean&nbsp;wasCanceled)</code></th>
484<td class="colLast">
485<div class="block">Called when a load error occurs.</div>
486</td>
487</tr>
488<tr id="i34" class="altColor">
489<td class="colFirst"><code>void</code></td>
490<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadingChanged(boolean)">onLoadingChanged</a></span>&#8203;(boolean&nbsp;isLoading)</code></th>
491<td class="colLast">&nbsp;</td>
492</tr>
493<tr id="i35" class="rowColor">
494<td class="colFirst"><code>void</code></td>
495<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadStarted</a></span>&#8203;(int&nbsp;windowIndex,
496             <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
497             <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
498             <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
499<td class="colLast">
500<div class="block">Called when a load begins.</div>
501</td>
502</tr>
503<tr id="i36" class="altColor">
504<td class="colFirst"><code>void</code></td>
505<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMaxSeekToPreviousPositionChanged(long)">onMaxSeekToPreviousPositionChanged</a></span>&#8203;(long&nbsp;maxSeekToPreviousPositionMs)</code></th>
506<td class="colLast">
507<div class="block">Called when the value of <a href="../Player.html#getMaxSeekToPreviousPosition()"><code>Player.getMaxSeekToPreviousPosition()</code></a> changes.</div>
508</td>
509</tr>
510<tr id="i37" class="rowColor">
511<td class="colFirst"><code>void</code></td>
512<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMediaItemTransition(com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)">onMediaItemTransition</a></span>&#8203;(<a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;mediaItem,
513                     @com.google.android.exoplayer2.Player.MediaItemTransitionReason int&nbsp;reason)</code></th>
514<td class="colLast">
515<div class="block">Called when playback transitions to a media item or starts repeating a media item according
516 to the current <a href="../Player.html#getRepeatMode()"><code>repeat mode</code></a>.</div>
517</td>
518</tr>
519<tr id="i38" class="altColor">
520<td class="colFirst"><code>void</code></td>
521<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMediaMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">onMediaMetadataChanged</a></span>&#8203;(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;mediaMetadata)</code></th>
522<td class="colLast">
523<div class="block">Called when the combined <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.</div>
524</td>
525</tr>
526<tr id="i39" class="rowColor">
527<td class="colFirst"><code>void</code></td>
528<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onMetadata(com.google.android.exoplayer2.metadata.Metadata)">onMetadata</a></span>&#8203;(<a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata">Metadata</a>&nbsp;metadata)</code></th>
529<td class="colLast">
530<div class="block">Called when there is metadata associated with the current playback time.</div>
531</td>
532</tr>
533<tr id="i40" class="altColor">
534<td class="colFirst"><code>void</code></td>
535<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)">onPlaybackParametersChanged</a></span>&#8203;(<a href="../PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</code></th>
536<td class="colLast">
537<div class="block">Called when the current playback parameters change.</div>
538</td>
539</tr>
540<tr id="i41" class="rowColor">
541<td class="colFirst"><code>void</code></td>
542<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)">onPlaybackStateChanged</a></span>&#8203;(@com.google.android.exoplayer2.Player.State int&nbsp;playbackState)</code></th>
543<td class="colLast">
544<div class="block">Called when the value returned from <a href="../Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> changes.</div>
545</td>
546</tr>
547<tr id="i42" class="altColor">
548<td class="colFirst"><code>void</code></td>
549<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaybackSuppressionReasonChanged(@com.google.android.exoplayer2.Player.PlaybackSuppressionReasonint)">onPlaybackSuppressionReasonChanged</a></span>&#8203;(@com.google.android.exoplayer2.Player.PlaybackSuppressionReason int&nbsp;playbackSuppressionReason)</code></th>
550<td class="colLast">
551<div class="block">Called when the value returned from <a href="../Player.html#getPlaybackSuppressionReason()"><code>Player.getPlaybackSuppressionReason()</code></a> changes.</div>
552</td>
553</tr>
554<tr id="i43" class="rowColor">
555<td class="colFirst"><code>void</code></td>
556<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerError(com.google.android.exoplayer2.PlaybackException)">onPlayerError</a></span>&#8203;(<a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</code></th>
557<td class="colLast">
558<div class="block">Called when an error occurs.</div>
559</td>
560</tr>
561<tr id="i44" class="altColor">
562<td class="colFirst"><code>void</code></td>
563<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerErrorChanged(com.google.android.exoplayer2.PlaybackException)">onPlayerErrorChanged</a></span>&#8203;(<a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</code></th>
564<td class="colLast">
565<div class="block">Called when the <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2"><code>PlaybackException</code></a> returned by <a href="../Player.html#getPlayerError()"><code>Player.getPlayerError()</code></a> changes.</div>
566</td>
567</tr>
568<tr id="i45" class="rowColor">
569<td class="colFirst"><code>void</code></td>
570<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerStateChanged(boolean,@com.google.android.exoplayer2.Player.Stateint)">onPlayerStateChanged</a></span>&#8203;(boolean&nbsp;playWhenReady,
571                    @com.google.android.exoplayer2.Player.State int&nbsp;playbackState)</code></th>
572<td class="colLast">&nbsp;</td>
573</tr>
574<tr id="i46" class="altColor">
575<td class="colFirst"><code>void</code></td>
576<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlaylistMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">onPlaylistMetadataChanged</a></span>&#8203;(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;playlistMetadata)</code></th>
577<td class="colLast">
578<div class="block">Called when the playlist <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.</div>
579</td>
580</tr>
581<tr id="i47" class="rowColor">
582<td class="colFirst"><code>void</code></td>
583<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayWhenReadyChanged(boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)">onPlayWhenReadyChanged</a></span>&#8203;(boolean&nbsp;playWhenReady,
584                      @com.google.android.exoplayer2.Player.PlayWhenReadyChangeReason int&nbsp;reason)</code></th>
585<td class="colLast">
586<div class="block">Called when the value returned from <a href="../Player.html#getPlayWhenReady()"><code>Player.getPlayWhenReady()</code></a> changes.</div>
587</td>
588</tr>
589<tr id="i48" class="altColor">
590<td class="colFirst"><code>void</code></td>
591<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPositionDiscontinuity(@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a></span>&#8203;(@com.google.android.exoplayer2.Player.DiscontinuityReason int&nbsp;reason)</code></th>
592<td class="colLast">&nbsp;</td>
593</tr>
594<tr id="i49" class="rowColor">
595<td class="colFirst"><code>void</code></td>
596<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a></span>&#8203;(<a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
597                       <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
598                       @com.google.android.exoplayer2.Player.DiscontinuityReason int&nbsp;reason)</code></th>
599<td class="colLast">
600<div class="block">Called when a position discontinuity occurs.</div>
601</td>
602</tr>
603<tr id="i50" class="altColor">
604<td class="colFirst"><code>void</code></td>
605<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRenderedFirstFrame()">onRenderedFirstFrame</a></span>()</code></th>
606<td class="colLast">
607<div class="block">Called when a frame is rendered for the first time since setting the surface, or since the
608 renderer was reset, or since the stream being rendered was changed.</div>
609</td>
610</tr>
611<tr id="i51" class="rowColor">
612<td class="colFirst"><code>void</code></td>
613<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRenderedFirstFrame(java.lang.Object,long)">onRenderedFirstFrame</a></span>&#8203;(<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,
614                    long&nbsp;renderTimeMs)</code></th>
615<td class="colLast">
616<div class="block">Called when a frame is rendered for the first time since setting the output, or since the
617 renderer was reset, or since the stream being rendered was changed.</div>
618</td>
619</tr>
620<tr id="i52" class="altColor">
621<td class="colFirst"><code>void</code></td>
622<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRepeatModeChanged(@com.google.android.exoplayer2.Player.RepeatModeint)">onRepeatModeChanged</a></span>&#8203;(@com.google.android.exoplayer2.Player.RepeatMode int&nbsp;repeatMode)</code></th>
623<td class="colLast">
624<div class="block">Called when the value of <a href="../Player.html#getRepeatMode()"><code>Player.getRepeatMode()</code></a> changes.</div>
625</td>
626</tr>
627<tr id="i53" class="rowColor">
628<td class="colFirst"><code>void</code></td>
629<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekBackIncrementChanged(long)">onSeekBackIncrementChanged</a></span>&#8203;(long&nbsp;seekBackIncrementMs)</code></th>
630<td class="colLast">
631<div class="block">Called when the value of <a href="../Player.html#getSeekBackIncrement()"><code>Player.getSeekBackIncrement()</code></a> changes.</div>
632</td>
633</tr>
634<tr id="i54" class="altColor">
635<td class="colFirst"><code>void</code></td>
636<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekForwardIncrementChanged(long)">onSeekForwardIncrementChanged</a></span>&#8203;(long&nbsp;seekForwardIncrementMs)</code></th>
637<td class="colLast">
638<div class="block">Called when the value of <a href="../Player.html#getSeekForwardIncrement()"><code>Player.getSeekForwardIncrement()</code></a> changes.</div>
639</td>
640</tr>
641<tr id="i55" class="rowColor">
642<td class="colFirst"><code>void</code></td>
643<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSeekProcessed()">onSeekProcessed</a></span>()</code></th>
644<td class="colLast">&nbsp;</td>
645</tr>
646<tr id="i56" class="altColor">
647<td class="colFirst"><code>void</code></td>
648<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onShuffleModeEnabledChanged(boolean)">onShuffleModeEnabledChanged</a></span>&#8203;(boolean&nbsp;shuffleModeEnabled)</code></th>
649<td class="colLast">
650<div class="block">Called when the value of <a href="../Player.html#getShuffleModeEnabled()"><code>Player.getShuffleModeEnabled()</code></a> changes.</div>
651</td>
652</tr>
653<tr id="i57" class="rowColor">
654<td class="colFirst"><code>void</code></td>
655<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSkipSilenceEnabledChanged(boolean)">onSkipSilenceEnabledChanged</a></span>&#8203;(boolean&nbsp;skipSilenceEnabled)</code></th>
656<td class="colLast">
657<div class="block">Called when skipping silences is enabled or disabled in the audio stream.</div>
658</td>
659</tr>
660<tr id="i58" class="altColor">
661<td class="colFirst"><code>void</code></td>
662<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSurfaceSizeChanged(int,int)">onSurfaceSizeChanged</a></span>&#8203;(int&nbsp;width,
663                    int&nbsp;height)</code></th>
664<td class="colLast">
665<div class="block">Called each time there's a change in the size of the surface onto which the video is being
666 rendered.</div>
667</td>
668</tr>
669<tr id="i59" class="rowColor">
670<td class="colFirst"><code>void</code></td>
671<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTimelineChanged(com.google.android.exoplayer2.Timeline,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)">onTimelineChanged</a></span>&#8203;(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline,
672                 @com.google.android.exoplayer2.Player.TimelineChangeReason int&nbsp;reason)</code></th>
673<td class="colLast">
674<div class="block">Called when the timeline has been refreshed.</div>
675</td>
676</tr>
677<tr id="i60" class="altColor">
678<td class="colFirst"><code>void</code></td>
679<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTracksChanged(com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">onTracksChanged</a></span>&#8203;(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a>&nbsp;trackGroups,
680               <a href="../trackselection/TrackSelectionArray.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionArray</a>&nbsp;trackSelections)</code></th>
681<td class="colLast">
682<div class="block">Called when the available or selected tracks change.</div>
683</td>
684</tr>
685<tr id="i61" class="rowColor">
686<td class="colFirst"><code>void</code></td>
687<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTrackSelectionParametersChanged(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">onTrackSelectionParametersChanged</a></span>&#8203;(<a href="../trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;parameters)</code></th>
688<td class="colLast">
689<div class="block">Called when the value returned from <a href="../Player.html#getTrackSelectionParameters()"><code>Player.getTrackSelectionParameters()</code></a> changes.</div>
690</td>
691</tr>
692<tr id="i62" class="altColor">
693<td class="colFirst"><code>void</code></td>
694<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTracksInfoChanged(com.google.android.exoplayer2.TracksInfo)">onTracksInfoChanged</a></span>&#8203;(<a href="../TracksInfo.html" title="class in com.google.android.exoplayer2">TracksInfo</a>&nbsp;tracksInfo)</code></th>
695<td class="colLast">
696<div class="block">Called when the available or selected tracks change.</div>
697</td>
698</tr>
699<tr id="i63" class="rowColor">
700<td class="colFirst"><code>void</code></td>
701<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onUpstreamDiscarded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">onUpstreamDiscarded</a></span>&#8203;(int&nbsp;windowIndex,
702                   <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
703                   <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
704<td class="colLast">
705<div class="block">Called when data is removed from the back of a media buffer, typically so that it can be
706 re-buffered in a different format.</div>
707</td>
708</tr>
709<tr id="i64" class="altColor">
710<td class="colFirst"><code>void</code></td>
711<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoCodecError(java.lang.Exception)">onVideoCodecError</a></span>&#8203;(<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>
712<td class="colLast">
713<div class="block">Called when a video decoder encounters an error.</div>
714</td>
715</tr>
716<tr id="i65" class="rowColor">
717<td class="colFirst"><code>void</code></td>
718<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderInitialized(java.lang.String,long,long)">onVideoDecoderInitialized</a></span>&#8203;(<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,
719                         long&nbsp;initializedTimestampMs,
720                         long&nbsp;initializationDurationMs)</code></th>
721<td class="colLast">
722<div class="block">Called when a video decoder is created.</div>
723</td>
724</tr>
725<tr id="i66" class="altColor">
726<td class="colFirst"><code>void</code></td>
727<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDecoderReleased(java.lang.String)">onVideoDecoderReleased</a></span>&#8203;(<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>
728<td class="colLast">
729<div class="block">Called when a video decoder is released.</div>
730</td>
731</tr>
732<tr id="i67" class="rowColor">
733<td class="colFirst"><code>void</code></td>
734<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoDisabled</a></span>&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</code></th>
735<td class="colLast">
736<div class="block">Called when the video renderer is disabled.</div>
737</td>
738</tr>
739<tr id="i68" class="altColor">
740<td class="colFirst"><code>void</code></td>
741<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoEnabled</a></span>&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</code></th>
742<td class="colLast">
743<div class="block">Called when the video renderer is enabled.</div>
744</td>
745</tr>
746<tr id="i69" class="rowColor">
747<td class="colFirst"><code>void</code></td>
748<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoFrameProcessingOffset(long,int)">onVideoFrameProcessingOffset</a></span>&#8203;(long&nbsp;totalProcessingOffsetUs,
749                            int&nbsp;frameCount)</code></th>
750<td class="colLast">
751<div class="block">Called to report the video processing offset of video frames processed by the video renderer.</div>
752</td>
753</tr>
754<tr id="i70" class="altColor">
755<td class="colFirst"><code>void</code></td>
756<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onVideoInputFormatChanged</a></span>&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
757                         <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</code></th>
758<td class="colLast">
759<div class="block">Called when the format of the media being consumed by the video renderer changes.</div>
760</td>
761</tr>
762<tr id="i71" class="rowColor">
763<td class="colFirst"><code>void</code></td>
764<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a></span>&#8203;(<a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</code></th>
765<td class="colLast">
766<div class="block">Called each time there's a change in the size of the video being rendered.</div>
767</td>
768</tr>
769<tr id="i72" class="altColor">
770<td class="colFirst"><code>void</code></td>
771<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVolumeChanged(float)">onVolumeChanged</a></span>&#8203;(float&nbsp;volume)</code></th>
772<td class="colLast">
773<div class="block">Called when the volume changes.</div>
774</td>
775</tr>
776<tr id="i73" class="rowColor">
777<td class="colFirst"><code>void</code></td>
778<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#release()">release</a></span>()</code></th>
779<td class="colLast">
780<div class="block">Releases the collector.</div>
781</td>
782</tr>
783<tr id="i74" class="altColor">
784<td class="colFirst"><code>void</code></td>
785<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">removeListener</a></span>&#8203;(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>&nbsp;listener)</code></th>
786<td class="colLast">
787<div class="block">Removes a previously added analytics event listener.</div>
788</td>
789</tr>
790<tr id="i75" class="rowColor">
791<td class="colFirst"><code>protected void</code></td>
792<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendEvent(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.util.ListenerSet.Event)">sendEvent</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
793         int&nbsp;eventFlag,
794         <a href="../util/ListenerSet.Event.html" title="interface in com.google.android.exoplayer2.util">ListenerSet.Event</a>&lt;<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>&gt;&nbsp;eventInvocation)</code></th>
795<td class="colLast">
796<div class="block">Sends an event to registered listeners.</div>
797</td>
798</tr>
799<tr id="i76" class="altColor">
800<td class="colFirst"><code>void</code></td>
801<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPlayer(com.google.android.exoplayer2.Player,android.os.Looper)">setPlayer</a></span>&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
802         <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;looper)</code></th>
803<td class="colLast">
804<div class="block">Sets the player for which data will be collected.</div>
805</td>
806</tr>
807<tr id="i77" class="rowColor">
808<td class="colFirst"><code>void</code></td>
809<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateMediaPeriodQueueInfo(java.util.List,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">updateMediaPeriodQueueInfo</a></span>&#8203;(<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="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source" target="_top">MediaSource.MediaPeriodId</a>&gt;&nbsp;queue,
810                          <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;readingPeriod)</code></th>
811<td class="colLast">
812<div class="block">Updates the playback queue information used for event association.</div>
813</td>
814</tr>
815</table>
816<ul class="blockList">
817<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
818<!--   -->
819</a>
820<h3>Methods inherited from class&nbsp;java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a></h3>
821<code><a href="https://developer.android.com/reference/java/lang/Object.html#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink" target="_top">wait</a></code></li>
822</ul>
823<ul class="blockList">
824<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.drm.DrmSessionEventListener">
825<!--   -->
826</a>
827<h3>Methods inherited from interface&nbsp;com.google.android.exoplayer2.drm.<a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></h3>
828<code><a href="../drm/DrmSessionEventListener.html#onDrmSessionAcquired(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmSessionAcquired</a></code></li>
829</ul>
830</li>
831</ul>
832</section>
833</li>
834</ul>
835</div>
836<div class="details">
837<ul class="blockList">
838<li class="blockList">
839<!-- ========= CONSTRUCTOR DETAIL ======== -->
840<section role="region">
841<ul class="blockList">
842<li class="blockList"><a id="constructor.detail">
843<!--   -->
844</a>
845<h3>Constructor Detail</h3>
846<a id="&lt;init&gt;(com.google.android.exoplayer2.util.Clock)">
847<!--   -->
848</a>
849<ul class="blockListLast">
850<li class="blockList">
851<h4>DefaultAnalyticsCollector</h4>
852<pre>public&nbsp;DefaultAnalyticsCollector&#8203;(<a href="../util/Clock.html" title="interface in com.google.android.exoplayer2.util">Clock</a>&nbsp;clock)</pre>
853<div class="block">Creates an analytics collector.</div>
854<dl>
855<dt><span class="paramLabel">Parameters:</span></dt>
856<dd><code>clock</code> - A <a href="../util/Clock.html" title="interface in com.google.android.exoplayer2.util"><code>Clock</code></a> used to generate timestamps.</dd>
857</dl>
858</li>
859</ul>
860</li>
861</ul>
862</section>
863<!-- ============ METHOD DETAIL ========== -->
864<section role="region">
865<ul class="blockList">
866<li class="blockList"><a id="method.detail">
867<!--   -->
868</a>
869<h3>Method Detail</h3>
870<a id="addListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">
871<!--   -->
872</a>
873<ul class="blockList">
874<li class="blockList">
875<h4>addListener</h4>
876<pre class="methodSignature">@CallSuper
877public&nbsp;void&nbsp;addListener&#8203;(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>&nbsp;listener)</pre>
878<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#addListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">AnalyticsCollector</a></code></span></div>
879<div class="block">Adds a listener for analytics events.</div>
880<dl>
881<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
882<dd><code><a href="AnalyticsCollector.html#addListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">addListener</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
883<dt><span class="paramLabel">Parameters:</span></dt>
884<dd><code>listener</code> - The listener to add.</dd>
885</dl>
886</li>
887</ul>
888<a id="removeListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">
889<!--   -->
890</a>
891<ul class="blockList">
892<li class="blockList">
893<h4>removeListener</h4>
894<pre class="methodSignature">@CallSuper
895public&nbsp;void&nbsp;removeListener&#8203;(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>&nbsp;listener)</pre>
896<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#removeListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">AnalyticsCollector</a></code></span></div>
897<div class="block">Removes a previously added analytics event listener.</div>
898<dl>
899<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
900<dd><code><a href="AnalyticsCollector.html#removeListener(com.google.android.exoplayer2.analytics.AnalyticsListener)">removeListener</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
901<dt><span class="paramLabel">Parameters:</span></dt>
902<dd><code>listener</code> - The listener to remove.</dd>
903</dl>
904</li>
905</ul>
906<a id="setPlayer(com.google.android.exoplayer2.Player,android.os.Looper)">
907<!--   -->
908</a>
909<ul class="blockList">
910<li class="blockList">
911<h4>setPlayer</h4>
912<pre class="methodSignature">@CallSuper
913public&nbsp;void&nbsp;setPlayer&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
914                      <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;looper)</pre>
915<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#setPlayer(com.google.android.exoplayer2.Player,android.os.Looper)">AnalyticsCollector</a></code></span></div>
916<div class="block">Sets the player for which data will be collected. Must only be called if no player has been set
917 yet or the current player is idle.</div>
918<dl>
919<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
920<dd><code><a href="AnalyticsCollector.html#setPlayer(com.google.android.exoplayer2.Player,android.os.Looper)">setPlayer</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
921<dt><span class="paramLabel">Parameters:</span></dt>
922<dd><code>player</code> - The <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> for which data will be collected.</dd>
923<dd><code>looper</code> - The <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> used for listener callbacks.</dd>
924</dl>
925</li>
926</ul>
927<a id="release()">
928<!--   -->
929</a>
930<ul class="blockList">
931<li class="blockList">
932<h4>release</h4>
933<pre class="methodSignature">@CallSuper
934public&nbsp;void&nbsp;release()</pre>
935<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#release()">AnalyticsCollector</a></code></span></div>
936<div class="block">Releases the collector. Must be called after the player for which data is collected has been
937 released.</div>
938<dl>
939<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
940<dd><code><a href="AnalyticsCollector.html#release()">release</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
941</dl>
942</li>
943</ul>
944<a id="updateMediaPeriodQueueInfo(java.util.List,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
945<!--   -->
946</a>
947<ul class="blockList">
948<li class="blockList">
949<h4>updateMediaPeriodQueueInfo</h4>
950<pre class="methodSignature">public final&nbsp;void&nbsp;updateMediaPeriodQueueInfo&#8203;(<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="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source" target="_top">MediaSource.MediaPeriodId</a>&gt;&nbsp;queue,
951                                             @Nullable
952                                             <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;readingPeriod)</pre>
953<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#updateMediaPeriodQueueInfo(java.util.List,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">AnalyticsCollector</a></code></span></div>
954<div class="block">Updates the playback queue information used for event association.
955
956 <p>Should only be called by the player controlling the queue and not from app code.</div>
957<dl>
958<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
959<dd><code><a href="AnalyticsCollector.html#updateMediaPeriodQueueInfo(java.util.List,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">updateMediaPeriodQueueInfo</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
960<dt><span class="paramLabel">Parameters:</span></dt>
961<dd><code>queue</code> - The playback queue of media periods identified by their <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a>.</dd>
962<dd><code>readingPeriod</code> - The media period in the queue that is currently being read by renderers,
963     or null if the queue is empty.</dd>
964</dl>
965</li>
966</ul>
967<a id="notifySeekStarted()">
968<!--   -->
969</a>
970<ul class="blockList">
971<li class="blockList">
972<h4>notifySeekStarted</h4>
973<pre class="methodSignature">public final&nbsp;void&nbsp;notifySeekStarted()</pre>
974<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#notifySeekStarted()">AnalyticsCollector</a></code></span></div>
975<div class="block">Notify analytics collector that a seek operation will start. Should be called before the player
976 adjusts its state and position to the seek.</div>
977<dl>
978<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
979<dd><code><a href="AnalyticsCollector.html#notifySeekStarted()">notifySeekStarted</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
980</dl>
981</li>
982</ul>
983<a id="onAudioEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">
984<!--   -->
985</a>
986<ul class="blockList">
987<li class="blockList">
988<h4>onAudioEnabled</h4>
989<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioEnabled&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</pre>
990<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">AnalyticsCollector</a></code></span></div>
991<div class="block">Called when the audio renderer is enabled.</div>
992<dl>
993<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
994<dd><code><a href="AnalyticsCollector.html#onAudioEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioEnabled</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
995<dt><span class="paramLabel">Parameters:</span></dt>
996<dd><code>counters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that will be updated by the audio renderer for as long
997     as it remains enabled.</dd>
998</dl>
999</li>
1000</ul>
1001<a id="onAudioDecoderInitialized(java.lang.String,long,long)">
1002<!--   -->
1003</a>
1004<ul class="blockList">
1005<li class="blockList">
1006<h4>onAudioDecoderInitialized</h4>
1007<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioDecoderInitialized&#8203;(<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,
1008                                            long&nbsp;initializedTimestampMs,
1009                                            long&nbsp;initializationDurationMs)</pre>
1010<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioDecoderInitialized(java.lang.String,long,long)">AnalyticsCollector</a></code></span></div>
1011<div class="block">Called when a audio decoder is created.</div>
1012<dl>
1013<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1014<dd><code><a href="AnalyticsCollector.html#onAudioDecoderInitialized(java.lang.String,long,long)">onAudioDecoderInitialized</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1015<dt><span class="paramLabel">Parameters:</span></dt>
1016<dd><code>decoderName</code> - The audio decoder that was created.</dd>
1017<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
1018     finished.</dd>
1019<dd><code>initializationDurationMs</code> - The time taken to initialize the decoder in milliseconds.</dd>
1020</dl>
1021</li>
1022</ul>
1023<a id="onAudioInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">
1024<!--   -->
1025</a>
1026<ul class="blockList">
1027<li class="blockList">
1028<h4>onAudioInputFormatChanged</h4>
1029<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioInputFormatChanged&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
1030                                            @Nullable
1031                                            <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</pre>
1032<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">AnalyticsCollector</a></code></span></div>
1033<div class="block">Called when the format of the media being consumed by the audio renderer changes.</div>
1034<dl>
1035<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1036<dd><code><a href="AnalyticsCollector.html#onAudioInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onAudioInputFormatChanged</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1037<dt><span class="paramLabel">Parameters:</span></dt>
1038<dd><code>format</code> - The new format.</dd>
1039<dd><code>decoderReuseEvaluation</code> - The result of the evaluation to determine whether an existing
1040     decoder instance can be reused for the new format, or <code>null</code> if the renderer did not
1041     have a decoder.</dd>
1042</dl>
1043</li>
1044</ul>
1045<a id="onAudioPositionAdvancing(long)">
1046<!--   -->
1047</a>
1048<ul class="blockList">
1049<li class="blockList">
1050<h4>onAudioPositionAdvancing</h4>
1051<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioPositionAdvancing&#8203;(long&nbsp;playoutStartSystemTimeMs)</pre>
1052<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioPositionAdvancing(long)">AnalyticsCollector</a></code></span></div>
1053<div class="block">Called when the audio position has increased for the first time since the last pause or
1054 position reset.</div>
1055<dl>
1056<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1057<dd><code><a href="AnalyticsCollector.html#onAudioPositionAdvancing(long)">onAudioPositionAdvancing</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1058<dt><span class="paramLabel">Parameters:</span></dt>
1059<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
1060     which playout started.</dd>
1061</dl>
1062</li>
1063</ul>
1064<a id="onAudioUnderrun(int,long,long)">
1065<!--   -->
1066</a>
1067<ul class="blockList">
1068<li class="blockList">
1069<h4>onAudioUnderrun</h4>
1070<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioUnderrun&#8203;(int&nbsp;bufferSize,
1071                                  long&nbsp;bufferSizeMs,
1072                                  long&nbsp;elapsedSinceLastFeedMs)</pre>
1073<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioUnderrun(int,long,long)">AnalyticsCollector</a></code></span></div>
1074<div class="block">Called when an audio underrun occurs.</div>
1075<dl>
1076<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1077<dd><code><a href="AnalyticsCollector.html#onAudioUnderrun(int,long,long)">onAudioUnderrun</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1078<dt><span class="paramLabel">Parameters:</span></dt>
1079<dd><code>bufferSize</code> - The size of the audio output buffer, in bytes.</dd>
1080<dd><code>bufferSizeMs</code> - The size of the audio output buffer, in milliseconds, if it contains PCM
1081     encoded audio. <a href="../C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if the output buffer contains non-PCM encoded audio.</dd>
1082<dd><code>elapsedSinceLastFeedMs</code> - The time since audio was last written to the output buffer.</dd>
1083</dl>
1084</li>
1085</ul>
1086<a id="onAudioDecoderReleased(java.lang.String)">
1087<!--   -->
1088</a>
1089<ul class="blockList">
1090<li class="blockList">
1091<h4>onAudioDecoderReleased</h4>
1092<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioDecoderReleased&#8203;(<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>
1093<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioDecoderReleased(java.lang.String)">AnalyticsCollector</a></code></span></div>
1094<div class="block">Called when a audio decoder is released.</div>
1095<dl>
1096<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1097<dd><code><a href="AnalyticsCollector.html#onAudioDecoderReleased(java.lang.String)">onAudioDecoderReleased</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1098<dt><span class="paramLabel">Parameters:</span></dt>
1099<dd><code>decoderName</code> - The audio decoder that was released.</dd>
1100</dl>
1101</li>
1102</ul>
1103<a id="onAudioDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">
1104<!--   -->
1105</a>
1106<ul class="blockList">
1107<li class="blockList">
1108<h4>onAudioDisabled</h4>
1109<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioDisabled&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</pre>
1110<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">AnalyticsCollector</a></code></span></div>
1111<div class="block">Called when the audio renderer is disabled.</div>
1112<dl>
1113<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1114<dd><code><a href="AnalyticsCollector.html#onAudioDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioDisabled</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1115<dt><span class="paramLabel">Parameters:</span></dt>
1116<dd><code>counters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that were updated by the audio renderer.</dd>
1117</dl>
1118</li>
1119</ul>
1120<a id="onAudioSinkError(java.lang.Exception)">
1121<!--   -->
1122</a>
1123<ul class="blockList">
1124<li class="blockList">
1125<h4>onAudioSinkError</h4>
1126<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioSinkError&#8203;(<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>
1127<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioSinkError(java.lang.Exception)">AnalyticsCollector</a></code></span></div>
1128<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.
1129
1130 <p>If the sink writes to a platform <a href="https://developer.android.com/reference/android/media/AudioTrack.html" title="class or interface in android.media" class="externalLink"><code>AudioTrack</code></a>, this will be called for all <a href="https://developer.android.com/reference/android/media/AudioTrack.html?is-external=true" title="class or interface in android.media" class="externalLink" target="_top"><code>AudioTrack</code></a> errors.</div>
1131<dl>
1132<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1133<dd><code><a href="AnalyticsCollector.html#onAudioSinkError(java.lang.Exception)">onAudioSinkError</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1134<dt><span class="paramLabel">Parameters:</span></dt>
1135<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>
1136</dl>
1137</li>
1138</ul>
1139<a id="onAudioCodecError(java.lang.Exception)">
1140<!--   -->
1141</a>
1142<ul class="blockList">
1143<li class="blockList">
1144<h4>onAudioCodecError</h4>
1145<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioCodecError&#8203;(<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>
1146<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onAudioCodecError(java.lang.Exception)">AnalyticsCollector</a></code></span></div>
1147<div class="block">Called when an audio decoder encounters an error.</div>
1148<dl>
1149<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1150<dd><code><a href="AnalyticsCollector.html#onAudioCodecError(java.lang.Exception)">onAudioCodecError</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1151<dt><span class="paramLabel">Parameters:</span></dt>
1152<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
1153     <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>
1154</dl>
1155</li>
1156</ul>
1157<a id="onVolumeChanged(float)">
1158<!--   -->
1159</a>
1160<ul class="blockList">
1161<li class="blockList">
1162<h4>onVolumeChanged</h4>
1163<pre class="methodSignature">public final&nbsp;void&nbsp;onVolumeChanged&#8203;(float&nbsp;volume)</pre>
1164<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onVolumeChanged(float)">Player.Listener</a></code></span></div>
1165<div class="block">Called when the volume changes.
1166
1167 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1168 other events that happen in the same <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.</div>
1169<dl>
1170<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1171<dd><code><a href="../Player.Listener.html#onVolumeChanged(float)">onVolumeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1172<dt><span class="paramLabel">Parameters:</span></dt>
1173<dd><code>volume</code> - The new volume, with 0 being silence and 1 being unity gain.</dd>
1174</dl>
1175</li>
1176</ul>
1177<a id="onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">
1178<!--   -->
1179</a>
1180<ul class="blockList">
1181<li class="blockList">
1182<h4>onVideoEnabled</h4>
1183<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoEnabled&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</pre>
1184<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">AnalyticsCollector</a></code></span></div>
1185<div class="block">Called when the video renderer is enabled.</div>
1186<dl>
1187<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1188<dd><code><a href="AnalyticsCollector.html#onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoEnabled</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1189<dt><span class="paramLabel">Parameters:</span></dt>
1190<dd><code>counters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that will be updated by the video renderer for as long
1191     as it remains enabled.</dd>
1192</dl>
1193</li>
1194</ul>
1195<a id="onVideoDecoderInitialized(java.lang.String,long,long)">
1196<!--   -->
1197</a>
1198<ul class="blockList">
1199<li class="blockList">
1200<h4>onVideoDecoderInitialized</h4>
1201<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoDecoderInitialized&#8203;(<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,
1202                                            long&nbsp;initializedTimestampMs,
1203                                            long&nbsp;initializationDurationMs)</pre>
1204<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoDecoderInitialized(java.lang.String,long,long)">AnalyticsCollector</a></code></span></div>
1205<div class="block">Called when a video decoder is created.</div>
1206<dl>
1207<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1208<dd><code><a href="AnalyticsCollector.html#onVideoDecoderInitialized(java.lang.String,long,long)">onVideoDecoderInitialized</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1209<dt><span class="paramLabel">Parameters:</span></dt>
1210<dd><code>decoderName</code> - The decoder that was created.</dd>
1211<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
1212     finished.</dd>
1213<dd><code>initializationDurationMs</code> - The time taken to initialize the decoder in milliseconds.</dd>
1214</dl>
1215</li>
1216</ul>
1217<a id="onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">
1218<!--   -->
1219</a>
1220<ul class="blockList">
1221<li class="blockList">
1222<h4>onVideoInputFormatChanged</h4>
1223<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoInputFormatChanged&#8203;(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a>&nbsp;format,
1224                                            @Nullable
1225                                            <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a>&nbsp;decoderReuseEvaluation)</pre>
1226<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">AnalyticsCollector</a></code></span></div>
1227<div class="block">Called when the format of the media being consumed by the video renderer changes.</div>
1228<dl>
1229<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1230<dd><code><a href="AnalyticsCollector.html#onVideoInputFormatChanged(com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onVideoInputFormatChanged</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1231<dt><span class="paramLabel">Parameters:</span></dt>
1232<dd><code>format</code> - The new format.</dd>
1233<dd><code>decoderReuseEvaluation</code> - The result of the evaluation to determine whether an existing
1234     decoder instance can be reused for the new format, or <code>null</code> if the renderer did not
1235     have a decoder.</dd>
1236</dl>
1237</li>
1238</ul>
1239<a id="onDroppedFrames(int,long)">
1240<!--   -->
1241</a>
1242<ul class="blockList">
1243<li class="blockList">
1244<h4>onDroppedFrames</h4>
1245<pre class="methodSignature">public final&nbsp;void&nbsp;onDroppedFrames&#8203;(int&nbsp;count,
1246                                  long&nbsp;elapsedMs)</pre>
1247<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onDroppedFrames(int,long)">AnalyticsCollector</a></code></span></div>
1248<div class="block">Called to report the number of frames dropped by the video renderer. Dropped frames are
1249 reported whenever the renderer is stopped having dropped frames, and optionally, whenever the
1250 count reaches a specified threshold whilst the renderer is started.</div>
1251<dl>
1252<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1253<dd><code><a href="AnalyticsCollector.html#onDroppedFrames(int,long)">onDroppedFrames</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1254<dt><span class="paramLabel">Parameters:</span></dt>
1255<dd><code>count</code> - The number of dropped frames.</dd>
1256<dd><code>elapsedMs</code> - The duration in milliseconds over which the frames were dropped. This duration
1257     is timed from when the renderer was started or from when dropped frames were last reported
1258     (whichever was more recent), and not from when the first of the reported drops occurred.</dd>
1259</dl>
1260</li>
1261</ul>
1262<a id="onVideoDecoderReleased(java.lang.String)">
1263<!--   -->
1264</a>
1265<ul class="blockList">
1266<li class="blockList">
1267<h4>onVideoDecoderReleased</h4>
1268<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoDecoderReleased&#8203;(<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>
1269<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoDecoderReleased(java.lang.String)">AnalyticsCollector</a></code></span></div>
1270<div class="block">Called when a video decoder is released.</div>
1271<dl>
1272<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1273<dd><code><a href="AnalyticsCollector.html#onVideoDecoderReleased(java.lang.String)">onVideoDecoderReleased</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1274<dt><span class="paramLabel">Parameters:</span></dt>
1275<dd><code>decoderName</code> - The video decoder that was released.</dd>
1276</dl>
1277</li>
1278</ul>
1279<a id="onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">
1280<!--   -->
1281</a>
1282<ul class="blockList">
1283<li class="blockList">
1284<h4>onVideoDisabled</h4>
1285<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoDisabled&#8203;(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;counters)</pre>
1286<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">AnalyticsCollector</a></code></span></div>
1287<div class="block">Called when the video renderer is disabled.</div>
1288<dl>
1289<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1290<dd><code><a href="AnalyticsCollector.html#onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoDisabled</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1291<dt><span class="paramLabel">Parameters:</span></dt>
1292<dd><code>counters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that were updated by the video renderer.</dd>
1293</dl>
1294</li>
1295</ul>
1296<a id="onRenderedFirstFrame(java.lang.Object,long)">
1297<!--   -->
1298</a>
1299<ul class="blockList">
1300<li class="blockList">
1301<h4>onRenderedFirstFrame</h4>
1302<pre class="methodSignature">public final&nbsp;void&nbsp;onRenderedFirstFrame&#8203;(<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,
1303                                       long&nbsp;renderTimeMs)</pre>
1304<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onRenderedFirstFrame(java.lang.Object,long)">AnalyticsCollector</a></code></span></div>
1305<div class="block">Called when a frame is rendered for the first time since setting the output, or since the
1306 renderer was reset, or since the stream being rendered was changed.</div>
1307<dl>
1308<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1309<dd><code><a href="AnalyticsCollector.html#onRenderedFirstFrame(java.lang.Object,long)">onRenderedFirstFrame</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1310<dt><span class="paramLabel">Parameters:</span></dt>
1311<dd><code>output</code> - The output of the video renderer. 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 some video
1312     renderers may have other output types (e.g., a <a href="../video/VideoDecoderOutputBufferRenderer.html" title="interface in com.google.android.exoplayer2.video"><code>VideoDecoderOutputBufferRenderer</code></a>).</dd>
1313<dd><code>renderTimeMs</code> - The <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 frame was rendered.</dd>
1314</dl>
1315</li>
1316</ul>
1317<a id="onVideoFrameProcessingOffset(long,int)">
1318<!--   -->
1319</a>
1320<ul class="blockList">
1321<li class="blockList">
1322<h4>onVideoFrameProcessingOffset</h4>
1323<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoFrameProcessingOffset&#8203;(long&nbsp;totalProcessingOffsetUs,
1324                                               int&nbsp;frameCount)</pre>
1325<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoFrameProcessingOffset(long,int)">AnalyticsCollector</a></code></span></div>
1326<div class="block">Called to report the video processing offset of video frames processed by the video renderer.
1327
1328 <p>Video processing offset represents how early a video frame is processed compared to the
1329 player's current position. For each video frame, the offset is calculated as <em>P<sub>vf</sub>
1330 - P<sub>pl</sub></em> where <em>P<sub>vf</sub></em> is the presentation timestamp of the video
1331 frame and <em>P<sub>pl</sub></em> is the current position of the player. Positive values
1332 indicate the frame was processed early enough whereas negative values indicate that the
1333 player's position had progressed beyond the frame's timestamp when the frame was processed (and
1334 the frame was probably dropped).
1335
1336 <p>The renderer reports the sum of video processing offset samples (one sample per processed
1337 video frame: dropped, skipped or rendered) and the total number of samples.</div>
1338<dl>
1339<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1340<dd><code><a href="AnalyticsCollector.html#onVideoFrameProcessingOffset(long,int)">onVideoFrameProcessingOffset</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1341<dt><span class="paramLabel">Parameters:</span></dt>
1342<dd><code>totalProcessingOffsetUs</code> - The sum of all video frame processing offset samples for the
1343     video frames processed by the renderer in microseconds.</dd>
1344<dd><code>frameCount</code> - The number of samples included in the <code>totalProcessingOffsetUs</code>.</dd>
1345</dl>
1346</li>
1347</ul>
1348<a id="onVideoCodecError(java.lang.Exception)">
1349<!--   -->
1350</a>
1351<ul class="blockList">
1352<li class="blockList">
1353<h4>onVideoCodecError</h4>
1354<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoCodecError&#8203;(<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>
1355<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsCollector.html#onVideoCodecError(java.lang.Exception)">AnalyticsCollector</a></code></span></div>
1356<div class="block">Called when a video decoder encounters an error.
1357
1358 <p>This method being called does not indicate that playback has failed, or that it will fail.
1359 The player may be able to recover from the error. Hence applications should <em>not</em>
1360 implement this method to display a user visible error or initiate an application level retry.
1361 <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
1362 method is called to provide the application with an opportunity to log the error if it wishes
1363 to do so.</div>
1364<dl>
1365<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1366<dd><code><a href="AnalyticsCollector.html#onVideoCodecError(java.lang.Exception)">onVideoCodecError</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsCollector.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsCollector</a></code></dd>
1367<dt><span class="paramLabel">Parameters:</span></dt>
1368<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
1369     <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>
1370</dl>
1371</li>
1372</ul>
1373<a id="onSurfaceSizeChanged(int,int)">
1374<!--   -->
1375</a>
1376<ul class="blockList">
1377<li class="blockList">
1378<h4>onSurfaceSizeChanged</h4>
1379<pre class="methodSignature">public final&nbsp;void&nbsp;onSurfaceSizeChanged&#8203;(int&nbsp;width,
1380                                       int&nbsp;height)</pre>
1381<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onSurfaceSizeChanged(int,int)">Player.Listener</a></code></span></div>
1382<div class="block">Called each time there's a change in the size of the surface onto which the video is being
1383 rendered.
1384
1385 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1386 other events that happen in the same <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.</div>
1387<dl>
1388<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1389<dd><code><a href="../Player.Listener.html#onSurfaceSizeChanged(int,int)">onSurfaceSizeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1390<dt><span class="paramLabel">Parameters:</span></dt>
1391<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
1392     the video is not rendered onto a surface.</dd>
1393<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
1394     the video is not rendered onto a surface.</dd>
1395</dl>
1396</li>
1397</ul>
1398<a id="onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">
1399<!--   -->
1400</a>
1401<ul class="blockList">
1402<li class="blockList">
1403<h4>onLoadStarted</h4>
1404<pre class="methodSignature">public final&nbsp;void&nbsp;onLoadStarted&#8203;(int&nbsp;windowIndex,
1405                                @Nullable
1406                                <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
1407                                <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
1408                                <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
1409<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../source/MediaSourceEventListener.html#onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">MediaSourceEventListener</a></code></span></div>
1410<div class="block">Called when a load begins.</div>
1411<dl>
1412<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1413<dd><code><a href="../source/MediaSourceEventListener.html#onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadStarted</a></code>&nbsp;in interface&nbsp;<code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code></dd>
1414<dt><span class="paramLabel">Parameters:</span></dt>
1415<dd><code>windowIndex</code> - The window index in the timeline of the media source this load belongs to.</dd>
1416<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> this load belongs to. Null if the load does not
1417     belong to a specific media period.</dd>
1418<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> corresponding to the event. The value of <a href="../source/LoadEventInfo.html#uri"><code>LoadEventInfo.uri</code></a> won't reflect potential redirection yet and <a href="../source/LoadEventInfo.html#responseHeaders"><code>LoadEventInfo.responseHeaders</code></a> will be empty.</dd>
1419<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>
1420</dl>
1421</li>
1422</ul>
1423<a id="onLoadCompleted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">
1424<!--   -->
1425</a>
1426<ul class="blockList">
1427<li class="blockList">
1428<h4>onLoadCompleted</h4>
1429<pre class="methodSignature">public final&nbsp;void&nbsp;onLoadCompleted&#8203;(int&nbsp;windowIndex,
1430                                  @Nullable
1431                                  <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
1432                                  <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
1433                                  <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
1434<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../source/MediaSourceEventListener.html#onLoadCompleted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">MediaSourceEventListener</a></code></span></div>
1435<div class="block">Called when a load ends.</div>
1436<dl>
1437<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1438<dd><code><a href="../source/MediaSourceEventListener.html#onLoadCompleted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCompleted</a></code>&nbsp;in interface&nbsp;<code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code></dd>
1439<dt><span class="paramLabel">Parameters:</span></dt>
1440<dd><code>windowIndex</code> - The window index in the timeline of the media source this load belongs to.</dd>
1441<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> this load belongs to. Null if the load does not
1442     belong to a specific media period.</dd>
1443<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> corresponding to the event. The values of <a href="../source/LoadEventInfo.html#elapsedRealtimeMs"><code>LoadEventInfo.elapsedRealtimeMs</code></a> and <a href="../source/LoadEventInfo.html#bytesLoaded"><code>LoadEventInfo.bytesLoaded</code></a> are relative to the
1444     corresponding <a href="../source/MediaSourceEventListener.html#onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)"><code>MediaSourceEventListener.onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)</code></a>
1445     event.</dd>
1446<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>
1447</dl>
1448</li>
1449</ul>
1450<a id="onLoadCanceled(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">
1451<!--   -->
1452</a>
1453<ul class="blockList">
1454<li class="blockList">
1455<h4>onLoadCanceled</h4>
1456<pre class="methodSignature">public final&nbsp;void&nbsp;onLoadCanceled&#8203;(int&nbsp;windowIndex,
1457                                 @Nullable
1458                                 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
1459                                 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
1460                                 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
1461<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../source/MediaSourceEventListener.html#onLoadCanceled(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">MediaSourceEventListener</a></code></span></div>
1462<div class="block">Called when a load is canceled.</div>
1463<dl>
1464<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1465<dd><code><a href="../source/MediaSourceEventListener.html#onLoadCanceled(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCanceled</a></code>&nbsp;in interface&nbsp;<code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code></dd>
1466<dt><span class="paramLabel">Parameters:</span></dt>
1467<dd><code>windowIndex</code> - The window index in the timeline of the media source this load belongs to.</dd>
1468<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> this load belongs to. Null if the load does not
1469     belong to a specific media period.</dd>
1470<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> corresponding to the event. The values of <a href="../source/LoadEventInfo.html#elapsedRealtimeMs"><code>LoadEventInfo.elapsedRealtimeMs</code></a> and <a href="../source/LoadEventInfo.html#bytesLoaded"><code>LoadEventInfo.bytesLoaded</code></a> are relative to the
1471     corresponding <a href="../source/MediaSourceEventListener.html#onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)"><code>MediaSourceEventListener.onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)</code></a>
1472     event.</dd>
1473<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>
1474</dl>
1475</li>
1476</ul>
1477<a id="onLoadError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">
1478<!--   -->
1479</a>
1480<ul class="blockList">
1481<li class="blockList">
1482<h4>onLoadError</h4>
1483<pre class="methodSignature">public final&nbsp;void&nbsp;onLoadError&#8203;(int&nbsp;windowIndex,
1484                              @Nullable
1485                              <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
1486                              <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
1487                              <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData,
1488                              <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,
1489                              boolean&nbsp;wasCanceled)</pre>
1490<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../source/MediaSourceEventListener.html#onLoadError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">MediaSourceEventListener</a></code></span></div>
1491<div class="block">Called when a load error occurs.
1492
1493 <p>The error may or may not have resulted in the load being canceled, as indicated by the
1494 <code>wasCanceled</code> parameter. If the load was canceled, <a href="../source/MediaSourceEventListener.html#onLoadCanceled(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)"><code>MediaSourceEventListener.onLoadCanceled(int, com.google.android.exoplayer2.source.MediaSource.MediaPeriodId, com.google.android.exoplayer2.source.LoadEventInfo, com.google.android.exoplayer2.source.MediaLoadData)</code></a> will
1495 <em>not</em> be called in addition to this method.
1496
1497 <p>This method being called does not indicate that playback has failed, or that it will fail.
1498 The player may be able to recover from the error. Hence applications should <em>not</em>
1499 implement this method to display a user visible error or initiate an application level retry.
1500 <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
1501 method is called to provide the application with an opportunity to log the error if it wishes
1502 to do so.</div>
1503<dl>
1504<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1505<dd><code><a href="../source/MediaSourceEventListener.html#onLoadError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">onLoadError</a></code>&nbsp;in interface&nbsp;<code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code></dd>
1506<dt><span class="paramLabel">Parameters:</span></dt>
1507<dd><code>windowIndex</code> - The window index in the timeline of the media source this load belongs to.</dd>
1508<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> this load belongs to. Null if the load does not
1509     belong to a specific media period.</dd>
1510<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> corresponding to the event. The values of <a href="../source/LoadEventInfo.html#elapsedRealtimeMs"><code>LoadEventInfo.elapsedRealtimeMs</code></a> and <a href="../source/LoadEventInfo.html#bytesLoaded"><code>LoadEventInfo.bytesLoaded</code></a> are relative to the
1511     corresponding <a href="../source/MediaSourceEventListener.html#onLoadStarted(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)"><code>MediaSourceEventListener.onLoadStarted(int, MediaPeriodId, LoadEventInfo, MediaLoadData)</code></a>
1512     event.</dd>
1513<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>
1514<dd><code>error</code> - The load error.</dd>
1515<dd><code>wasCanceled</code> - Whether the load was canceled as a result of the error.</dd>
1516</dl>
1517</li>
1518</ul>
1519<a id="onUpstreamDiscarded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">
1520<!--   -->
1521</a>
1522<ul class="blockList">
1523<li class="blockList">
1524<h4>onUpstreamDiscarded</h4>
1525<pre class="methodSignature">public final&nbsp;void&nbsp;onUpstreamDiscarded&#8203;(int&nbsp;windowIndex,
1526                                      @Nullable
1527                                      <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
1528                                      <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
1529<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../source/MediaSourceEventListener.html#onUpstreamDiscarded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">MediaSourceEventListener</a></code></span></div>
1530<div class="block">Called when data is removed from the back of a media buffer, typically so that it can be
1531 re-buffered in a different format.</div>
1532<dl>
1533<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1534<dd><code><a href="../source/MediaSourceEventListener.html#onUpstreamDiscarded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">onUpstreamDiscarded</a></code>&nbsp;in interface&nbsp;<code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code></dd>
1535<dt><span class="paramLabel">Parameters:</span></dt>
1536<dd><code>windowIndex</code> - The window index in the timeline of the media source this load belongs to.</dd>
1537<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> the media belongs to.</dd>
1538<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>
1539</dl>
1540</li>
1541</ul>
1542<a id="onDownstreamFormatChanged(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">
1543<!--   -->
1544</a>
1545<ul class="blockList">
1546<li class="blockList">
1547<h4>onDownstreamFormatChanged</h4>
1548<pre class="methodSignature">public final&nbsp;void&nbsp;onDownstreamFormatChanged&#8203;(int&nbsp;windowIndex,
1549                                            @Nullable
1550                                            <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
1551                                            <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
1552<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../source/MediaSourceEventListener.html#onDownstreamFormatChanged(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">MediaSourceEventListener</a></code></span></div>
1553<div class="block">Called when a downstream format change occurs (i.e. when the format of the media being read
1554 from one or more <a href="../source/SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a>s provided by the source changes).</div>
1555<dl>
1556<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1557<dd><code><a href="../source/MediaSourceEventListener.html#onDownstreamFormatChanged(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.source.MediaLoadData)">onDownstreamFormatChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../source/MediaSourceEventListener.html" title="interface in com.google.android.exoplayer2.source">MediaSourceEventListener</a></code></dd>
1558<dt><span class="paramLabel">Parameters:</span></dt>
1559<dd><code>windowIndex</code> - The window index in the timeline of the media source this load belongs to.</dd>
1560<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> the media belongs to.</dd>
1561<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 downstream data.</dd>
1562</dl>
1563</li>
1564</ul>
1565<a id="onTimelineChanged(com.google.android.exoplayer2.Timeline,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)">
1566<!--   -->
1567</a>
1568<ul class="blockList">
1569<li class="blockList">
1570<h4>onTimelineChanged</h4>
1571<pre class="methodSignature">public final&nbsp;void&nbsp;onTimelineChanged&#8203;(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline,
1572                                    <a href="../Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2">@TimelineChangeReason</a>
1573                                    @com.google.android.exoplayer2.Player.TimelineChangeReason int&nbsp;reason)</pre>
1574<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)">Player.Listener</a></code></span></div>
1575<div class="block">Called when the timeline has been refreshed.
1576
1577 <p>Note that the current <a href="../MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> or playback position may change as a result of a
1578 timeline change. If playback can't continue smoothly because of this timeline change, a
1579 separate <a href="../Player.Listener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)"><code>Player.Listener.onPositionDiscontinuity(PositionInfo, PositionInfo, int)</code></a> callback will be
1580 triggered.
1581
1582 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1583 other events that happen in the same <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.</div>
1584<dl>
1585<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1586<dd><code><a href="../Player.Listener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)">onTimelineChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1587<dt><span class="paramLabel">Parameters:</span></dt>
1588<dd><code>timeline</code> - The latest timeline. Never null, but may be empty.</dd>
1589<dd><code>reason</code> - The <a href="../Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.TimelineChangeReason</code></a> responsible for this timeline change.</dd>
1590</dl>
1591</li>
1592</ul>
1593<a id="onMediaItemTransition(com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)">
1594<!--   -->
1595</a>
1596<ul class="blockList">
1597<li class="blockList">
1598<h4>onMediaItemTransition</h4>
1599<pre class="methodSignature">public final&nbsp;void&nbsp;onMediaItemTransition&#8203;(@Nullable
1600                                        <a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;mediaItem,
1601                                        <a href="../Player.MediaItemTransitionReason.html" title="annotation in com.google.android.exoplayer2">@MediaItemTransitionReason</a>
1602                                        @com.google.android.exoplayer2.Player.MediaItemTransitionReason int&nbsp;reason)</pre>
1603<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onMediaItemTransition(com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)">Player.Listener</a></code></span></div>
1604<div class="block">Called when playback transitions to a media item or starts repeating a media item according
1605 to the current <a href="../Player.html#getRepeatMode()"><code>repeat mode</code></a>.
1606
1607 <p>Note that this callback is also called when the playlist becomes non-empty or empty as a
1608 consequence of a playlist change.
1609
1610 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1611 other events that happen in the same <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.</div>
1612<dl>
1613<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1614<dd><code><a href="../Player.Listener.html#onMediaItemTransition(com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)">onMediaItemTransition</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1615<dt><span class="paramLabel">Parameters:</span></dt>
1616<dd><code>mediaItem</code> - The <a href="../MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a>. May be null if the playlist becomes empty.</dd>
1617<dd><code>reason</code> - The reason for the transition.</dd>
1618</dl>
1619</li>
1620</ul>
1621<a id="onTracksChanged(com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">
1622<!--   -->
1623</a>
1624<ul class="blockList">
1625<li class="blockList">
1626<h4>onTracksChanged</h4>
1627<pre class="methodSignature">public final&nbsp;void&nbsp;onTracksChanged&#8203;(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a>&nbsp;trackGroups,
1628                                  <a href="../trackselection/TrackSelectionArray.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionArray</a>&nbsp;trackSelections)</pre>
1629<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onTracksChanged(com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">Player.Listener</a></code></span></div>
1630<div class="block">Called when the available or selected tracks change.
1631
1632 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1633 other events that happen in the same <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.</div>
1634<dl>
1635<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1636<dd><code><a href="../Player.Listener.html#onTracksChanged(com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">onTracksChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1637<dt><span class="paramLabel">Parameters:</span></dt>
1638<dd><code>trackGroups</code> - The available tracks. Never null, but may be of length zero.</dd>
1639<dd><code>trackSelections</code> - The selected tracks. Never null, but may contain null elements. A
1640     concrete implementation may include null elements if it has a fixed number of renderer
1641     components, wishes to report a TrackSelection for each of them, and has one or more
1642     renderer components that is not assigned any selected tracks.</dd>
1643</dl>
1644</li>
1645</ul>
1646<a id="onTracksInfoChanged(com.google.android.exoplayer2.TracksInfo)">
1647<!--   -->
1648</a>
1649<ul class="blockList">
1650<li class="blockList">
1651<h4>onTracksInfoChanged</h4>
1652<pre class="methodSignature">public&nbsp;void&nbsp;onTracksInfoChanged&#8203;(<a href="../TracksInfo.html" title="class in com.google.android.exoplayer2">TracksInfo</a>&nbsp;tracksInfo)</pre>
1653<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onTracksInfoChanged(com.google.android.exoplayer2.TracksInfo)">Player.Listener</a></code></span></div>
1654<div class="block">Called when the available or selected tracks change.
1655
1656 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1657 other events that happen in the same <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.</div>
1658<dl>
1659<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1660<dd><code><a href="../Player.Listener.html#onTracksInfoChanged(com.google.android.exoplayer2.TracksInfo)">onTracksInfoChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1661<dt><span class="paramLabel">Parameters:</span></dt>
1662<dd><code>tracksInfo</code> - The available tracks information. Never null, but may be of length zero.</dd>
1663</dl>
1664</li>
1665</ul>
1666<a id="onLoadingChanged(boolean)">
1667<!--   -->
1668</a>
1669<ul class="blockList">
1670<li class="blockList">
1671<h4>onLoadingChanged</h4>
1672<pre class="methodSignature">public&nbsp;void&nbsp;onLoadingChanged&#8203;(boolean&nbsp;isLoading)</pre>
1673<dl>
1674<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1675<dd><code><a href="../Player.Listener.html#onLoadingChanged(boolean)">onLoadingChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1676</dl>
1677</li>
1678</ul>
1679<a id="onIsLoadingChanged(boolean)">
1680<!--   -->
1681</a>
1682<ul class="blockList">
1683<li class="blockList">
1684<h4>onIsLoadingChanged</h4>
1685<pre class="methodSignature">public final&nbsp;void&nbsp;onIsLoadingChanged&#8203;(boolean&nbsp;isLoading)</pre>
1686<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onIsLoadingChanged(boolean)">Player.Listener</a></code></span></div>
1687<div class="block">Called when the player starts or stops loading the source.
1688
1689 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1690 other events that happen in the same <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.</div>
1691<dl>
1692<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1693<dd><code><a href="../Player.Listener.html#onIsLoadingChanged(boolean)">onIsLoadingChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1694<dt><span class="paramLabel">Parameters:</span></dt>
1695<dd><code>isLoading</code> - Whether the source is currently being loaded.</dd>
1696</dl>
1697</li>
1698</ul>
1699<a id="onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)">
1700<!--   -->
1701</a>
1702<ul class="blockList">
1703<li class="blockList">
1704<h4>onAvailableCommandsChanged</h4>
1705<pre class="methodSignature">public&nbsp;void&nbsp;onAvailableCommandsChanged&#8203;(<a href="../Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a>&nbsp;availableCommands)</pre>
1706<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)">Player.Listener</a></code></span></div>
1707<div class="block">Called when the value returned from <a href="../Player.html#isCommandAvailable(@com.google.android.exoplayer2.Player.Commandint)"><code>Player.isCommandAvailable(int)</code></a> changes for at least one
1708 <a href="../Player.Command.html" title="annotation in com.google.android.exoplayer2"><code>Player.Command</code></a>.
1709
1710 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1711 other events that happen in the same <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.</div>
1712<dl>
1713<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1714<dd><code><a href="../Player.Listener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)">onAvailableCommandsChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1715<dt><span class="paramLabel">Parameters:</span></dt>
1716<dd><code>availableCommands</code> - The available <a href="../Player.Commands.html" title="class in com.google.android.exoplayer2"><code>Player.Commands</code></a>.</dd>
1717</dl>
1718</li>
1719</ul>
1720<a id="onPlayerStateChanged(boolean,@com.google.android.exoplayer2.Player.Stateint)">
1721<!--   -->
1722</a>
1723<ul class="blockList">
1724<li class="blockList">
1725<h4>onPlayerStateChanged</h4>
1726<pre class="methodSignature">public final&nbsp;void&nbsp;onPlayerStateChanged&#8203;(boolean&nbsp;playWhenReady,
1727                                       <a href="../Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a>
1728                                       @com.google.android.exoplayer2.Player.State int&nbsp;playbackState)</pre>
1729<dl>
1730<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1731<dd><code><a href="../Player.Listener.html#onPlayerStateChanged(boolean,@com.google.android.exoplayer2.Player.Stateint)">onPlayerStateChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1732</dl>
1733</li>
1734</ul>
1735<a id="onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)">
1736<!--   -->
1737</a>
1738<ul class="blockList">
1739<li class="blockList">
1740<h4>onPlaybackStateChanged</h4>
1741<pre class="methodSignature">public final&nbsp;void&nbsp;onPlaybackStateChanged&#8203;(<a href="../Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a>
1742                                         @com.google.android.exoplayer2.Player.State int&nbsp;playbackState)</pre>
1743<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)">Player.Listener</a></code></span></div>
1744<div class="block">Called when the value returned from <a href="../Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> changes.
1745
1746 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1747 other events that happen in the same <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.</div>
1748<dl>
1749<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1750<dd><code><a href="../Player.Listener.html#onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)">onPlaybackStateChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1751<dt><span class="paramLabel">Parameters:</span></dt>
1752<dd><code>playbackState</code> - The new playback <a href="../Player.State.html" title="annotation in com.google.android.exoplayer2"><code>state</code></a>.</dd>
1753</dl>
1754</li>
1755</ul>
1756<a id="onPlayWhenReadyChanged(boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)">
1757<!--   -->
1758</a>
1759<ul class="blockList">
1760<li class="blockList">
1761<h4>onPlayWhenReadyChanged</h4>
1762<pre class="methodSignature">public final&nbsp;void&nbsp;onPlayWhenReadyChanged&#8203;(boolean&nbsp;playWhenReady,
1763                                         <a href="../Player.PlayWhenReadyChangeReason.html" title="annotation in com.google.android.exoplayer2">@PlayWhenReadyChangeReason</a>
1764                                         @com.google.android.exoplayer2.Player.PlayWhenReadyChangeReason int&nbsp;reason)</pre>
1765<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlayWhenReadyChanged(boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)">Player.Listener</a></code></span></div>
1766<div class="block">Called when the value returned from <a href="../Player.html#getPlayWhenReady()"><code>Player.getPlayWhenReady()</code></a> changes.
1767
1768 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1769 other events that happen in the same <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.</div>
1770<dl>
1771<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1772<dd><code><a href="../Player.Listener.html#onPlayWhenReadyChanged(boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)">onPlayWhenReadyChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1773<dt><span class="paramLabel">Parameters:</span></dt>
1774<dd><code>playWhenReady</code> - Whether playback will proceed when ready.</dd>
1775<dd><code>reason</code> - The <a href="../Player.PlayWhenReadyChangeReason.html" title="annotation in com.google.android.exoplayer2"><code>reason</code></a> for the change.</dd>
1776</dl>
1777</li>
1778</ul>
1779<a id="onPlaybackSuppressionReasonChanged(@com.google.android.exoplayer2.Player.PlaybackSuppressionReasonint)">
1780<!--   -->
1781</a>
1782<ul class="blockList">
1783<li class="blockList">
1784<h4>onPlaybackSuppressionReasonChanged</h4>
1785<pre class="methodSignature">public final&nbsp;void&nbsp;onPlaybackSuppressionReasonChanged&#8203;(<a href="../Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2">@PlaybackSuppressionReason</a>
1786                                                     @com.google.android.exoplayer2.Player.PlaybackSuppressionReason int&nbsp;playbackSuppressionReason)</pre>
1787<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlaybackSuppressionReasonChanged(@com.google.android.exoplayer2.Player.PlaybackSuppressionReasonint)">Player.Listener</a></code></span></div>
1788<div class="block">Called when the value returned from <a href="../Player.html#getPlaybackSuppressionReason()"><code>Player.getPlaybackSuppressionReason()</code></a> changes.
1789
1790 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1791 other events that happen in the same <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.</div>
1792<dl>
1793<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1794<dd><code><a href="../Player.Listener.html#onPlaybackSuppressionReasonChanged(@com.google.android.exoplayer2.Player.PlaybackSuppressionReasonint)">onPlaybackSuppressionReasonChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1795<dt><span class="paramLabel">Parameters:</span></dt>
1796<dd><code>playbackSuppressionReason</code> - The current <a href="../Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.PlaybackSuppressionReason</code></a>.</dd>
1797</dl>
1798</li>
1799</ul>
1800<a id="onIsPlayingChanged(boolean)">
1801<!--   -->
1802</a>
1803<ul class="blockList">
1804<li class="blockList">
1805<h4>onIsPlayingChanged</h4>
1806<pre class="methodSignature">public&nbsp;void&nbsp;onIsPlayingChanged&#8203;(boolean&nbsp;isPlaying)</pre>
1807<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onIsPlayingChanged(boolean)">Player.Listener</a></code></span></div>
1808<div class="block">Called when the value of <a href="../Player.html#isPlaying()"><code>Player.isPlaying()</code></a> changes.
1809
1810 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1811 other events that happen in the same <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.</div>
1812<dl>
1813<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1814<dd><code><a href="../Player.Listener.html#onIsPlayingChanged(boolean)">onIsPlayingChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1815<dt><span class="paramLabel">Parameters:</span></dt>
1816<dd><code>isPlaying</code> - Whether the player is playing.</dd>
1817</dl>
1818</li>
1819</ul>
1820<a id="onRepeatModeChanged(@com.google.android.exoplayer2.Player.RepeatModeint)">
1821<!--   -->
1822</a>
1823<ul class="blockList">
1824<li class="blockList">
1825<h4>onRepeatModeChanged</h4>
1826<pre class="methodSignature">public final&nbsp;void&nbsp;onRepeatModeChanged&#8203;(<a href="../Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a>
1827                                      @com.google.android.exoplayer2.Player.RepeatMode int&nbsp;repeatMode)</pre>
1828<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onRepeatModeChanged(@com.google.android.exoplayer2.Player.RepeatModeint)">Player.Listener</a></code></span></div>
1829<div class="block">Called when the value of <a href="../Player.html#getRepeatMode()"><code>Player.getRepeatMode()</code></a> changes.
1830
1831 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1832 other events that happen in the same <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.</div>
1833<dl>
1834<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1835<dd><code><a href="../Player.Listener.html#onRepeatModeChanged(@com.google.android.exoplayer2.Player.RepeatModeint)">onRepeatModeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1836<dt><span class="paramLabel">Parameters:</span></dt>
1837<dd><code>repeatMode</code> - The <a href="../Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a> used for playback.</dd>
1838</dl>
1839</li>
1840</ul>
1841<a id="onShuffleModeEnabledChanged(boolean)">
1842<!--   -->
1843</a>
1844<ul class="blockList">
1845<li class="blockList">
1846<h4>onShuffleModeEnabledChanged</h4>
1847<pre class="methodSignature">public final&nbsp;void&nbsp;onShuffleModeEnabledChanged&#8203;(boolean&nbsp;shuffleModeEnabled)</pre>
1848<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onShuffleModeEnabledChanged(boolean)">Player.Listener</a></code></span></div>
1849<div class="block">Called when the value of <a href="../Player.html#getShuffleModeEnabled()"><code>Player.getShuffleModeEnabled()</code></a> changes.
1850
1851 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1852 other events that happen in the same <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.</div>
1853<dl>
1854<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1855<dd><code><a href="../Player.Listener.html#onShuffleModeEnabledChanged(boolean)">onShuffleModeEnabledChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1856<dt><span class="paramLabel">Parameters:</span></dt>
1857<dd><code>shuffleModeEnabled</code> - Whether shuffling of <a href="../MediaItem.html" title="class in com.google.android.exoplayer2"><code>media items</code></a> is enabled.</dd>
1858</dl>
1859</li>
1860</ul>
1861<a id="onPlayerError(com.google.android.exoplayer2.PlaybackException)">
1862<!--   -->
1863</a>
1864<ul class="blockList">
1865<li class="blockList">
1866<h4>onPlayerError</h4>
1867<pre class="methodSignature">public final&nbsp;void&nbsp;onPlayerError&#8203;(<a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</pre>
1868<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)">Player.Listener</a></code></span></div>
1869<div class="block">Called when an error occurs. The playback state will transition to <a href="../Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a>
1870 immediately after this method is called. The player instance can still be used, and <a href="../Player.html#release()"><code>Player.release()</code></a> must still be called on the player should it no longer be required.
1871
1872 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1873 other events that happen in the same <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.
1874
1875 <p>Implementations of Player may pass an instance of a subclass of <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2"><code>PlaybackException</code></a>
1876 to this method in order to include more information about the error.</div>
1877<dl>
1878<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1879<dd><code><a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)">onPlayerError</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1880<dt><span class="paramLabel">Parameters:</span></dt>
1881<dd><code>error</code> - The error.</dd>
1882</dl>
1883</li>
1884</ul>
1885<a id="onPlayerErrorChanged(com.google.android.exoplayer2.PlaybackException)">
1886<!--   -->
1887</a>
1888<ul class="blockList">
1889<li class="blockList">
1890<h4>onPlayerErrorChanged</h4>
1891<pre class="methodSignature">public&nbsp;void&nbsp;onPlayerErrorChanged&#8203;(@Nullable
1892                                 <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</pre>
1893<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlayerErrorChanged(com.google.android.exoplayer2.PlaybackException)">Player.Listener</a></code></span></div>
1894<div class="block">Called when the <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2"><code>PlaybackException</code></a> returned by <a href="../Player.html#getPlayerError()"><code>Player.getPlayerError()</code></a> changes.
1895
1896 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1897 other events that happen in the same <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.
1898
1899 <p>Implementations of Player may pass an instance of a subclass of <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2"><code>PlaybackException</code></a>
1900 to this method in order to include more information about the error.</div>
1901<dl>
1902<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1903<dd><code><a href="../Player.Listener.html#onPlayerErrorChanged(com.google.android.exoplayer2.PlaybackException)">onPlayerErrorChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1904<dt><span class="paramLabel">Parameters:</span></dt>
1905<dd><code>error</code> - The new error, or null if the error is being cleared.</dd>
1906</dl>
1907</li>
1908</ul>
1909<a id="onPositionDiscontinuity(@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">
1910<!--   -->
1911</a>
1912<ul class="blockList">
1913<li class="blockList">
1914<h4>onPositionDiscontinuity</h4>
1915<pre class="methodSignature">public&nbsp;void&nbsp;onPositionDiscontinuity&#8203;(<a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a>
1916                                    @com.google.android.exoplayer2.Player.DiscontinuityReason int&nbsp;reason)</pre>
1917<dl>
1918<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1919<dd><code><a href="../Player.Listener.html#onPositionDiscontinuity(@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1920</dl>
1921</li>
1922</ul>
1923<a id="onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">
1924<!--   -->
1925</a>
1926<ul class="blockList">
1927<li class="blockList">
1928<h4>onPositionDiscontinuity</h4>
1929<pre class="methodSignature">public final&nbsp;void&nbsp;onPositionDiscontinuity&#8203;(<a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
1930                                          <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
1931                                          <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a>
1932                                          @com.google.android.exoplayer2.Player.DiscontinuityReason int&nbsp;reason)</pre>
1933<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">Player.Listener</a></code></span></div>
1934<div class="block">Called when a position discontinuity occurs.
1935
1936 <p>A position discontinuity occurs when the playing period changes, the playback position
1937 jumps within the period currently being played, or when the playing period has been skipped
1938 or removed.
1939
1940 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1941 other events that happen in the same <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.</div>
1942<dl>
1943<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1944<dd><code><a href="../Player.Listener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1945<dt><span class="paramLabel">Parameters:</span></dt>
1946<dd><code>oldPosition</code> - The position before the discontinuity.</dd>
1947<dd><code>newPosition</code> - The position after the discontinuity.</dd>
1948<dd><code>reason</code> - The <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.DiscontinuityReason</code></a> responsible for the discontinuity.</dd>
1949</dl>
1950</li>
1951</ul>
1952<a id="onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)">
1953<!--   -->
1954</a>
1955<ul class="blockList">
1956<li class="blockList">
1957<h4>onPlaybackParametersChanged</h4>
1958<pre class="methodSignature">public final&nbsp;void&nbsp;onPlaybackParametersChanged&#8203;(<a href="../PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</pre>
1959<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)">Player.Listener</a></code></span></div>
1960<div class="block">Called when the current playback parameters change. The playback parameters may change due to
1961 a call to <a href="../Player.html#setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)"><code>Player.setPlaybackParameters(PlaybackParameters)</code></a>, or the player itself may change
1962 them (for example, if audio playback switches to passthrough or offload mode, where speed
1963 adjustment is no longer possible).
1964
1965 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1966 other events that happen in the same <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.</div>
1967<dl>
1968<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1969<dd><code><a href="../Player.Listener.html#onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)">onPlaybackParametersChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1970<dt><span class="paramLabel">Parameters:</span></dt>
1971<dd><code>playbackParameters</code> - The playback parameters.</dd>
1972</dl>
1973</li>
1974</ul>
1975<a id="onSeekBackIncrementChanged(long)">
1976<!--   -->
1977</a>
1978<ul class="blockList">
1979<li class="blockList">
1980<h4>onSeekBackIncrementChanged</h4>
1981<pre class="methodSignature">public&nbsp;void&nbsp;onSeekBackIncrementChanged&#8203;(long&nbsp;seekBackIncrementMs)</pre>
1982<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onSeekBackIncrementChanged(long)">Player.Listener</a></code></span></div>
1983<div class="block">Called when the value of <a href="../Player.html#getSeekBackIncrement()"><code>Player.getSeekBackIncrement()</code></a> changes.
1984
1985 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
1986 other events that happen in the same <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.</div>
1987<dl>
1988<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
1989<dd><code><a href="../Player.Listener.html#onSeekBackIncrementChanged(long)">onSeekBackIncrementChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
1990<dt><span class="paramLabel">Parameters:</span></dt>
1991<dd><code>seekBackIncrementMs</code> - The <a href="../Player.html#seekBack()"><code>Player.seekBack()</code></a> increment, in milliseconds.</dd>
1992</dl>
1993</li>
1994</ul>
1995<a id="onSeekForwardIncrementChanged(long)">
1996<!--   -->
1997</a>
1998<ul class="blockList">
1999<li class="blockList">
2000<h4>onSeekForwardIncrementChanged</h4>
2001<pre class="methodSignature">public&nbsp;void&nbsp;onSeekForwardIncrementChanged&#8203;(long&nbsp;seekForwardIncrementMs)</pre>
2002<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onSeekForwardIncrementChanged(long)">Player.Listener</a></code></span></div>
2003<div class="block">Called when the value of <a href="../Player.html#getSeekForwardIncrement()"><code>Player.getSeekForwardIncrement()</code></a> changes.
2004
2005 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2006 other events that happen in the same <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.</div>
2007<dl>
2008<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2009<dd><code><a href="../Player.Listener.html#onSeekForwardIncrementChanged(long)">onSeekForwardIncrementChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2010<dt><span class="paramLabel">Parameters:</span></dt>
2011<dd><code>seekForwardIncrementMs</code> - The <a href="../Player.html#seekForward()"><code>Player.seekForward()</code></a> increment, in milliseconds.</dd>
2012</dl>
2013</li>
2014</ul>
2015<a id="onMaxSeekToPreviousPositionChanged(long)">
2016<!--   -->
2017</a>
2018<ul class="blockList">
2019<li class="blockList">
2020<h4>onMaxSeekToPreviousPositionChanged</h4>
2021<pre class="methodSignature">public&nbsp;void&nbsp;onMaxSeekToPreviousPositionChanged&#8203;(long&nbsp;maxSeekToPreviousPositionMs)</pre>
2022<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onMaxSeekToPreviousPositionChanged(long)">Player.Listener</a></code></span></div>
2023<div class="block">Called when the value of <a href="../Player.html#getMaxSeekToPreviousPosition()"><code>Player.getMaxSeekToPreviousPosition()</code></a> changes.
2024
2025 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2026 other events that happen in the same <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.</div>
2027<dl>
2028<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2029<dd><code><a href="../Player.Listener.html#onMaxSeekToPreviousPositionChanged(long)">onMaxSeekToPreviousPositionChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2030<dt><span class="paramLabel">Parameters:</span></dt>
2031<dd><code>maxSeekToPreviousPositionMs</code> - The maximum position for which <a href="../Player.html#seekToPrevious()"><code>Player.seekToPrevious()</code></a>
2032     seeks to the previous position, in milliseconds.</dd>
2033</dl>
2034</li>
2035</ul>
2036<a id="onMediaMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">
2037<!--   -->
2038</a>
2039<ul class="blockList">
2040<li class="blockList">
2041<h4>onMediaMetadataChanged</h4>
2042<pre class="methodSignature">public&nbsp;void&nbsp;onMediaMetadataChanged&#8203;(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;mediaMetadata)</pre>
2043<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onMediaMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">Player.Listener</a></code></span></div>
2044<div class="block">Called when the combined <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.
2045
2046 <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>
2047 and the static and dynamic metadata from the <a href="../trackselection/TrackSelection.html#getFormat(int)"><code>track
2048 selections' formats</code></a> and <a href="../Player.Listener.html#onMetadata(com.google.android.exoplayer2.metadata.Metadata)"><code>Player.Listener.onMetadata(Metadata)</code></a>. If a field is populated in
2049 the <a href="../MediaItem.html#mediaMetadata"><code>MediaItem.mediaMetadata</code></a>, it will be prioritised above the same field coming from
2050 static or dynamic metadata.
2051
2052 <p>This method may be called multiple times in quick succession.
2053
2054 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2055 other events that happen in the same <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.</div>
2056<dl>
2057<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2058<dd><code><a href="../Player.Listener.html#onMediaMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">onMediaMetadataChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2059<dt><span class="paramLabel">Parameters:</span></dt>
2060<dd><code>mediaMetadata</code> - The combined <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>.</dd>
2061</dl>
2062</li>
2063</ul>
2064<a id="onPlaylistMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">
2065<!--   -->
2066</a>
2067<ul class="blockList">
2068<li class="blockList">
2069<h4>onPlaylistMetadataChanged</h4>
2070<pre class="methodSignature">public&nbsp;void&nbsp;onPlaylistMetadataChanged&#8203;(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;playlistMetadata)</pre>
2071<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onPlaylistMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">Player.Listener</a></code></span></div>
2072<div class="block">Called when the playlist <a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> changes.
2073
2074 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2075 other events that happen in the same <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.</div>
2076<dl>
2077<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2078<dd><code><a href="../Player.Listener.html#onPlaylistMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">onPlaylistMetadataChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2079</dl>
2080</li>
2081</ul>
2082<a id="onMetadata(com.google.android.exoplayer2.metadata.Metadata)">
2083<!--   -->
2084</a>
2085<ul class="blockList">
2086<li class="blockList">
2087<h4>onMetadata</h4>
2088<pre class="methodSignature">public final&nbsp;void&nbsp;onMetadata&#8203;(<a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata">Metadata</a>&nbsp;metadata)</pre>
2089<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onMetadata(com.google.android.exoplayer2.metadata.Metadata)">Player.Listener</a></code></span></div>
2090<div class="block">Called when there is metadata associated with the current playback time.
2091
2092 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2093 other events that happen in the same <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.</div>
2094<dl>
2095<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2096<dd><code><a href="../Player.Listener.html#onMetadata(com.google.android.exoplayer2.metadata.Metadata)">onMetadata</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2097<dt><span class="paramLabel">Parameters:</span></dt>
2098<dd><code>metadata</code> - The metadata.</dd>
2099</dl>
2100</li>
2101</ul>
2102<a id="onCues(java.util.List)">
2103<!--   -->
2104</a>
2105<ul class="blockList">
2106<li class="blockList">
2107<h4>onCues</h4>
2108<pre class="methodSignature">public&nbsp;void&nbsp;onCues&#8203;(<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="../text/Cue.html" title="class in com.google.android.exoplayer2.text" target="_top">Cue</a>&gt;&nbsp;cues)</pre>
2109<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onCues(java.util.List)">Player.Listener</a></code></span></div>
2110<div class="block">Called when there is a change in the <a href="../text/Cue.html" title="class in com.google.android.exoplayer2.text"><code>Cues</code></a>.
2111
2112 <p><code>cues</code> is in ascending order of priority. If any of the cue boxes overlap when
2113 displayed, the <a href="../text/Cue.html" title="class in com.google.android.exoplayer2.text"><code>Cue</code></a> nearer the end of the list should be shown on top.
2114
2115 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2116 other events that happen in the same <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.</div>
2117<dl>
2118<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2119<dd><code><a href="../Player.Listener.html#onCues(java.util.List)">onCues</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2120<dt><span class="paramLabel">Parameters:</span></dt>
2121<dd><code>cues</code> - The <a href="../text/Cue.html" title="class in com.google.android.exoplayer2.text"><code>Cues</code></a>. May be empty.</dd>
2122</dl>
2123</li>
2124</ul>
2125<a id="onSeekProcessed()">
2126<!--   -->
2127</a>
2128<ul class="blockList">
2129<li class="blockList">
2130<h4>onSeekProcessed</h4>
2131<pre class="methodSignature">public final&nbsp;void&nbsp;onSeekProcessed()</pre>
2132<dl>
2133<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2134<dd><code><a href="../Player.Listener.html#onSeekProcessed()">onSeekProcessed</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2135</dl>
2136</li>
2137</ul>
2138<a id="onSkipSilenceEnabledChanged(boolean)">
2139<!--   -->
2140</a>
2141<ul class="blockList">
2142<li class="blockList">
2143<h4>onSkipSilenceEnabledChanged</h4>
2144<pre class="methodSignature">public final&nbsp;void&nbsp;onSkipSilenceEnabledChanged&#8203;(boolean&nbsp;skipSilenceEnabled)</pre>
2145<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onSkipSilenceEnabledChanged(boolean)">Player.Listener</a></code></span></div>
2146<div class="block">Called when skipping silences is enabled or disabled in the audio stream.
2147
2148 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2149 other events that happen in the same <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.</div>
2150<dl>
2151<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2152<dd><code><a href="../Player.Listener.html#onSkipSilenceEnabledChanged(boolean)">onSkipSilenceEnabledChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2153<dt><span class="paramLabel">Parameters:</span></dt>
2154<dd><code>skipSilenceEnabled</code> - Whether skipping silences in the audio stream is enabled.</dd>
2155</dl>
2156</li>
2157</ul>
2158<a id="onAudioSessionIdChanged(int)">
2159<!--   -->
2160</a>
2161<ul class="blockList">
2162<li class="blockList">
2163<h4>onAudioSessionIdChanged</h4>
2164<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioSessionIdChanged&#8203;(int&nbsp;audioSessionId)</pre>
2165<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onAudioSessionIdChanged(int)">Player.Listener</a></code></span></div>
2166<div class="block">Called when the audio session ID changes.
2167
2168 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2169 other events that happen in the same <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.</div>
2170<dl>
2171<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2172<dd><code><a href="../Player.Listener.html#onAudioSessionIdChanged(int)">onAudioSessionIdChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2173<dt><span class="paramLabel">Parameters:</span></dt>
2174<dd><code>audioSessionId</code> - The audio session ID.</dd>
2175</dl>
2176</li>
2177</ul>
2178<a id="onAudioAttributesChanged(com.google.android.exoplayer2.audio.AudioAttributes)">
2179<!--   -->
2180</a>
2181<ul class="blockList">
2182<li class="blockList">
2183<h4>onAudioAttributesChanged</h4>
2184<pre class="methodSignature">public final&nbsp;void&nbsp;onAudioAttributesChanged&#8203;(<a href="../audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a>&nbsp;audioAttributes)</pre>
2185<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onAudioAttributesChanged(com.google.android.exoplayer2.audio.AudioAttributes)">Player.Listener</a></code></span></div>
2186<div class="block">Called when the audio attributes change.
2187
2188 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2189 other events that happen in the same <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.</div>
2190<dl>
2191<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2192<dd><code><a href="../Player.Listener.html#onAudioAttributesChanged(com.google.android.exoplayer2.audio.AudioAttributes)">onAudioAttributesChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2193<dt><span class="paramLabel">Parameters:</span></dt>
2194<dd><code>audioAttributes</code> - The audio attributes.</dd>
2195</dl>
2196</li>
2197</ul>
2198<a id="onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">
2199<!--   -->
2200</a>
2201<ul class="blockList">
2202<li class="blockList">
2203<h4>onVideoSizeChanged</h4>
2204<pre class="methodSignature">public final&nbsp;void&nbsp;onVideoSizeChanged&#8203;(<a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</pre>
2205<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">Player.Listener</a></code></span></div>
2206<div class="block">Called each time there's a change in the size of the video being rendered.
2207
2208 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2209 other events that happen in the same <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.</div>
2210<dl>
2211<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2212<dd><code><a href="../Player.Listener.html#onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2213<dt><span class="paramLabel">Parameters:</span></dt>
2214<dd><code>videoSize</code> - The new size of the video.</dd>
2215</dl>
2216</li>
2217</ul>
2218<a id="onTrackSelectionParametersChanged(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">
2219<!--   -->
2220</a>
2221<ul class="blockList">
2222<li class="blockList">
2223<h4>onTrackSelectionParametersChanged</h4>
2224<pre class="methodSignature">public&nbsp;void&nbsp;onTrackSelectionParametersChanged&#8203;(<a href="../trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;parameters)</pre>
2225<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onTrackSelectionParametersChanged(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">Player.Listener</a></code></span></div>
2226<div class="block">Called when the value returned from <a href="../Player.html#getTrackSelectionParameters()"><code>Player.getTrackSelectionParameters()</code></a> changes.
2227
2228 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2229 other events that happen in the same <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.</div>
2230<dl>
2231<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2232<dd><code><a href="../Player.Listener.html#onTrackSelectionParametersChanged(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">onTrackSelectionParametersChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2233<dt><span class="paramLabel">Parameters:</span></dt>
2234<dd><code>parameters</code> - The new <a href="../trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionParameters</code></a>.</dd>
2235</dl>
2236</li>
2237</ul>
2238<a id="onDeviceInfoChanged(com.google.android.exoplayer2.DeviceInfo)">
2239<!--   -->
2240</a>
2241<ul class="blockList">
2242<li class="blockList">
2243<h4>onDeviceInfoChanged</h4>
2244<pre class="methodSignature">public&nbsp;void&nbsp;onDeviceInfoChanged&#8203;(<a href="../DeviceInfo.html" title="class in com.google.android.exoplayer2">DeviceInfo</a>&nbsp;deviceInfo)</pre>
2245<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onDeviceInfoChanged(com.google.android.exoplayer2.DeviceInfo)">Player.Listener</a></code></span></div>
2246<div class="block">Called when the device information changes
2247
2248 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2249 other events that happen in the same <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.</div>
2250<dl>
2251<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2252<dd><code><a href="../Player.Listener.html#onDeviceInfoChanged(com.google.android.exoplayer2.DeviceInfo)">onDeviceInfoChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2253<dt><span class="paramLabel">Parameters:</span></dt>
2254<dd><code>deviceInfo</code> - The new <a href="../DeviceInfo.html" title="class in com.google.android.exoplayer2"><code>DeviceInfo</code></a>.</dd>
2255</dl>
2256</li>
2257</ul>
2258<a id="onDeviceVolumeChanged(int,boolean)">
2259<!--   -->
2260</a>
2261<ul class="blockList">
2262<li class="blockList">
2263<h4>onDeviceVolumeChanged</h4>
2264<pre class="methodSignature">public&nbsp;void&nbsp;onDeviceVolumeChanged&#8203;(int&nbsp;volume,
2265                                  boolean&nbsp;muted)</pre>
2266<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onDeviceVolumeChanged(int,boolean)">Player.Listener</a></code></span></div>
2267<div class="block">Called when the device volume or mute state changes.
2268
2269 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2270 other events that happen in the same <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.</div>
2271<dl>
2272<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2273<dd><code><a href="../Player.Listener.html#onDeviceVolumeChanged(int,boolean)">onDeviceVolumeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2274<dt><span class="paramLabel">Parameters:</span></dt>
2275<dd><code>volume</code> - The new device volume, with 0 being silence and 1 being unity gain.</dd>
2276<dd><code>muted</code> - Whether the device is muted.</dd>
2277</dl>
2278</li>
2279</ul>
2280<a id="onRenderedFirstFrame()">
2281<!--   -->
2282</a>
2283<ul class="blockList">
2284<li class="blockList">
2285<h4>onRenderedFirstFrame</h4>
2286<pre class="methodSignature">public&nbsp;void&nbsp;onRenderedFirstFrame()</pre>
2287<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onRenderedFirstFrame()">Player.Listener</a></code></span></div>
2288<div class="block">Called when a frame is rendered for the first time since setting the surface, or since the
2289 renderer was reset, or since the stream being rendered was changed.
2290
2291 <p><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.Listener.onEvents(Player, Events)</code></a> will also be called to report this event along with
2292 other events that happen in the same <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.</div>
2293<dl>
2294<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2295<dd><code><a href="../Player.Listener.html#onRenderedFirstFrame()">onRenderedFirstFrame</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2296</dl>
2297</li>
2298</ul>
2299<a id="onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)">
2300<!--   -->
2301</a>
2302<ul class="blockList">
2303<li class="blockList">
2304<h4>onEvents</h4>
2305<pre class="methodSignature">public&nbsp;void&nbsp;onEvents&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
2306                     <a href="../Player.Events.html" title="class in com.google.android.exoplayer2">Player.Events</a>&nbsp;events)</pre>
2307<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)">Player.Listener</a></code></span></div>
2308<div class="block">Called when one or more player states changed.
2309
2310 <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
2311 reported together and only after all individual callbacks were triggered.
2312
2313 <p>Only state changes represented by <a href="../Player.Event.html" title="annotation in com.google.android.exoplayer2"><code>events</code></a> are reported through this method.
2314
2315 <p>Listeners should prefer this method over individual callbacks in the following cases:
2316
2317 <ul>
2318   <li>They intend to trigger the same logic for multiple events (e.g. when updating a UI for
2319       both <a href="../Player.Listener.html#onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)"><code>Player.Listener.onPlaybackStateChanged(int)</code></a> and <a href="../Player.Listener.html#onPlayWhenReadyChanged(boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)"><code>Player.Listener.onPlayWhenReadyChanged(boolean,
2320       int)</code></a>).
2321   <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
2322       <a href="../Player.html#seekTo(long)"><code>Player.seekTo(long)</code></a> after a <a href="../Player.Listener.html#onMediaItemTransition(com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)"><code>Player.Listener.onMediaItemTransition(MediaItem, int)</code></a>).
2323   <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>
2324       getter methods. For example using <a href="../Player.html#getCurrentMediaItemIndex()"><code>Player.getCurrentMediaItemIndex()</code></a> with the <code>
2325       timeline</code> provided in <a href="../Player.Listener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)"><code>Player.Listener.onTimelineChanged(Timeline, int)</code></a> is only safe from
2326       within this method.
2327   <li>They are interested in events that logically happened together (e.g <a href="../Player.Listener.html#onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)"><code>Player.Listener.onPlaybackStateChanged(int)</code></a> to <a href="../Player.html#STATE_BUFFERING"><code>Player.STATE_BUFFERING</code></a> because of <a href="../Player.Listener.html#onMediaItemTransition(com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)"><code>Player.Listener.onMediaItemTransition(MediaItem, int)</code></a>).
2328 </ul></div>
2329<dl>
2330<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2331<dd><code><a href="../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)">onEvents</a></code>&nbsp;in interface&nbsp;<code><a href="../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
2332<dt><span class="paramLabel">Parameters:</span></dt>
2333<dd><code>player</code> - The <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> whose state changed. Use the getters to obtain the latest
2334     states.</dd>
2335<dd><code>events</code> - The <a href="../Player.Events.html" title="class in com.google.android.exoplayer2"><code>Player.Events</code></a> that happened in this iteration, indicating which player
2336     states changed.</dd>
2337</dl>
2338</li>
2339</ul>
2340<a id="onBandwidthSample(int,long,long)">
2341<!--   -->
2342</a>
2343<ul class="blockList">
2344<li class="blockList">
2345<h4>onBandwidthSample</h4>
2346<pre class="methodSignature">public final&nbsp;void&nbsp;onBandwidthSample&#8203;(int&nbsp;elapsedMs,
2347                                    long&nbsp;bytesTransferred,
2348                                    long&nbsp;bitrateEstimate)</pre>
2349<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../upstream/BandwidthMeter.EventListener.html#onBandwidthSample(int,long,long)">BandwidthMeter.EventListener</a></code></span></div>
2350<div class="block">Called periodically to indicate that bytes have been transferred or the estimated bitrate has
2351 changed.
2352
2353 <p>Note: The estimated bitrate is typically derived from more information than just <code>
2354 bytesTransferred</code> and <code>elapsedMs</code>.</div>
2355<dl>
2356<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2357<dd><code><a href="../upstream/BandwidthMeter.EventListener.html#onBandwidthSample(int,long,long)">onBandwidthSample</a></code>&nbsp;in interface&nbsp;<code><a href="../upstream/BandwidthMeter.EventListener.html" title="interface in com.google.android.exoplayer2.upstream">BandwidthMeter.EventListener</a></code></dd>
2358<dt><span class="paramLabel">Parameters:</span></dt>
2359<dd><code>elapsedMs</code> - The time taken to transfer <code>bytesTransferred</code>, in milliseconds. This
2360     is at most the elapsed time since the last callback, but may be less if there were
2361     periods during which data was not being transferred.</dd>
2362<dd><code>bytesTransferred</code> - The number of bytes transferred since the last callback.</dd>
2363<dd><code>bitrateEstimate</code> - The estimated bitrate in bits/sec.</dd>
2364</dl>
2365</li>
2366</ul>
2367<a id="onDrmSessionAcquired(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,@com.google.android.exoplayer2.drm.DrmSession.Stateint)">
2368<!--   -->
2369</a>
2370<ul class="blockList">
2371<li class="blockList">
2372<h4>onDrmSessionAcquired</h4>
2373<pre class="methodSignature">public final&nbsp;void&nbsp;onDrmSessionAcquired&#8203;(int&nbsp;windowIndex,
2374                                       @Nullable
2375                                       <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
2376                                       <a href="../drm/DrmSession.State.html" title="annotation in com.google.android.exoplayer2.drm">@State</a>
2377                                       @com.google.android.exoplayer2.drm.DrmSession.State int&nbsp;state)</pre>
2378<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../drm/DrmSessionEventListener.html#onDrmSessionAcquired(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,@com.google.android.exoplayer2.drm.DrmSession.Stateint)">DrmSessionEventListener</a></code></span></div>
2379<div class="block">Called each time a drm session is acquired.</div>
2380<dl>
2381<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2382<dd><code><a href="../drm/DrmSessionEventListener.html#onDrmSessionAcquired(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,@com.google.android.exoplayer2.drm.DrmSession.Stateint)">onDrmSessionAcquired</a></code>&nbsp;in interface&nbsp;<code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code></dd>
2383<dt><span class="paramLabel">Parameters:</span></dt>
2384<dd><code>windowIndex</code> - The window index in the timeline this media period belongs to.</dd>
2385<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> associated with the drm session.</dd>
2386<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>
2387</dl>
2388</li>
2389</ul>
2390<a id="onDrmKeysLoaded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
2391<!--   -->
2392</a>
2393<ul class="blockList">
2394<li class="blockList">
2395<h4>onDrmKeysLoaded</h4>
2396<pre class="methodSignature">public final&nbsp;void&nbsp;onDrmKeysLoaded&#8203;(int&nbsp;windowIndex,
2397                                  @Nullable
2398                                  <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</pre>
2399<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../drm/DrmSessionEventListener.html#onDrmKeysLoaded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">DrmSessionEventListener</a></code></span></div>
2400<div class="block">Called each time keys are loaded.</div>
2401<dl>
2402<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2403<dd><code><a href="../drm/DrmSessionEventListener.html#onDrmKeysLoaded(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmKeysLoaded</a></code>&nbsp;in interface&nbsp;<code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code></dd>
2404<dt><span class="paramLabel">Parameters:</span></dt>
2405<dd><code>windowIndex</code> - The window index in the timeline this media period belongs to.</dd>
2406<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> associated with the drm session.</dd>
2407</dl>
2408</li>
2409</ul>
2410<a id="onDrmSessionManagerError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,java.lang.Exception)">
2411<!--   -->
2412</a>
2413<ul class="blockList">
2414<li class="blockList">
2415<h4>onDrmSessionManagerError</h4>
2416<pre class="methodSignature">public final&nbsp;void&nbsp;onDrmSessionManagerError&#8203;(int&nbsp;windowIndex,
2417                                           @Nullable
2418                                           <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId,
2419                                           <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>
2420<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../drm/DrmSessionEventListener.html#onDrmSessionManagerError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,java.lang.Exception)">DrmSessionEventListener</a></code></span></div>
2421<div class="block">Called when a drm error occurs.
2422
2423 <p>This method being called does not indicate that playback has failed, or that it will fail.
2424 The player may be able to recover from the error and continue. Hence applications should
2425 <em>not</em> implement this method to display a user visible error or initiate an application
2426 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
2427 behavior). This method is called to provide the application with an opportunity to log the
2428 error if it wishes to do so.</div>
2429<dl>
2430<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2431<dd><code><a href="../drm/DrmSessionEventListener.html#onDrmSessionManagerError(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,java.lang.Exception)">onDrmSessionManagerError</a></code>&nbsp;in interface&nbsp;<code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code></dd>
2432<dt><span class="paramLabel">Parameters:</span></dt>
2433<dd><code>windowIndex</code> - The window index in the timeline this media period belongs to.</dd>
2434<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> associated with the drm session.</dd>
2435<dd><code>error</code> - The corresponding exception.</dd>
2436</dl>
2437</li>
2438</ul>
2439<a id="onDrmKeysRestored(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
2440<!--   -->
2441</a>
2442<ul class="blockList">
2443<li class="blockList">
2444<h4>onDrmKeysRestored</h4>
2445<pre class="methodSignature">public final&nbsp;void&nbsp;onDrmKeysRestored&#8203;(int&nbsp;windowIndex,
2446                                    @Nullable
2447                                    <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</pre>
2448<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../drm/DrmSessionEventListener.html#onDrmKeysRestored(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">DrmSessionEventListener</a></code></span></div>
2449<div class="block">Called each time offline keys are restored.</div>
2450<dl>
2451<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2452<dd><code><a href="../drm/DrmSessionEventListener.html#onDrmKeysRestored(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmKeysRestored</a></code>&nbsp;in interface&nbsp;<code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code></dd>
2453<dt><span class="paramLabel">Parameters:</span></dt>
2454<dd><code>windowIndex</code> - The window index in the timeline this media period belongs to.</dd>
2455<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> associated with the drm session.</dd>
2456</dl>
2457</li>
2458</ul>
2459<a id="onDrmKeysRemoved(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
2460<!--   -->
2461</a>
2462<ul class="blockList">
2463<li class="blockList">
2464<h4>onDrmKeysRemoved</h4>
2465<pre class="methodSignature">public final&nbsp;void&nbsp;onDrmKeysRemoved&#8203;(int&nbsp;windowIndex,
2466                                   @Nullable
2467                                   <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</pre>
2468<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../drm/DrmSessionEventListener.html#onDrmKeysRemoved(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">DrmSessionEventListener</a></code></span></div>
2469<div class="block">Called each time offline keys are removed.</div>
2470<dl>
2471<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2472<dd><code><a href="../drm/DrmSessionEventListener.html#onDrmKeysRemoved(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmKeysRemoved</a></code>&nbsp;in interface&nbsp;<code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code></dd>
2473<dt><span class="paramLabel">Parameters:</span></dt>
2474<dd><code>windowIndex</code> - The window index in the timeline this media period belongs to.</dd>
2475<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> associated with the drm session.</dd>
2476</dl>
2477</li>
2478</ul>
2479<a id="onDrmSessionReleased(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
2480<!--   -->
2481</a>
2482<ul class="blockList">
2483<li class="blockList">
2484<h4>onDrmSessionReleased</h4>
2485<pre class="methodSignature">public final&nbsp;void&nbsp;onDrmSessionReleased&#8203;(int&nbsp;windowIndex,
2486                                       @Nullable
2487                                       <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</pre>
2488<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../drm/DrmSessionEventListener.html#onDrmSessionReleased(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">DrmSessionEventListener</a></code></span></div>
2489<div class="block">Called each time a drm session is released.</div>
2490<dl>
2491<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
2492<dd><code><a href="../drm/DrmSessionEventListener.html#onDrmSessionReleased(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">onDrmSessionReleased</a></code>&nbsp;in interface&nbsp;<code><a href="../drm/DrmSessionEventListener.html" title="interface in com.google.android.exoplayer2.drm">DrmSessionEventListener</a></code></dd>
2493<dt><span class="paramLabel">Parameters:</span></dt>
2494<dd><code>windowIndex</code> - The window index in the timeline this media period belongs to.</dd>
2495<dd><code>mediaPeriodId</code> - The <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> associated with the drm session.</dd>
2496</dl>
2497</li>
2498</ul>
2499<a id="sendEvent(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.util.ListenerSet.Event)">
2500<!--   -->
2501</a>
2502<ul class="blockList">
2503<li class="blockList">
2504<h4>sendEvent</h4>
2505<pre class="methodSignature">protected final&nbsp;void&nbsp;sendEvent&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
2506                               int&nbsp;eventFlag,
2507                               <a href="../util/ListenerSet.Event.html" title="interface in com.google.android.exoplayer2.util">ListenerSet.Event</a>&lt;<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>&gt;&nbsp;eventInvocation)</pre>
2508<div class="block">Sends an event to registered listeners.</div>
2509<dl>
2510<dt><span class="paramLabel">Parameters:</span></dt>
2511<dd><code>eventTime</code> - The <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> to report.</dd>
2512<dd><code>eventFlag</code> - An integer flag indicating the type of the event, or <a href="../C.html#INDEX_UNSET"><code>C.INDEX_UNSET</code></a> to
2513     report this event without flag.</dd>
2514<dd><code>eventInvocation</code> - The event.</dd>
2515</dl>
2516</li>
2517</ul>
2518<a id="generateCurrentPlayerMediaPeriodEventTime()">
2519<!--   -->
2520</a>
2521<ul class="blockList">
2522<li class="blockList">
2523<h4>generateCurrentPlayerMediaPeriodEventTime</h4>
2524<pre class="methodSignature">protected final&nbsp;<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;generateCurrentPlayerMediaPeriodEventTime()</pre>
2525<div class="block">Generates an <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> for the currently playing item in the player.</div>
2526</li>
2527</ul>
2528<a id="generateEventTime(com.google.android.exoplayer2.Timeline,int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
2529<!--   -->
2530</a>
2531<ul class="blockListLast">
2532<li class="blockList">
2533<h4>generateEventTime</h4>
2534<pre class="methodSignature">@RequiresNonNull("player")
2535protected final&nbsp;<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;generateEventTime&#8203;(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline,
2536                                                              int&nbsp;windowIndex,
2537                                                              @Nullable
2538                                                              <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</pre>
2539<div class="block">Returns a new <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> for the specified timeline, window and media period id.</div>
2540</li>
2541</ul>
2542</li>
2543</ul>
2544</section>
2545</li>
2546</ul>
2547</div>
2548</div>
2549</main>
2550<!-- ========= END OF CLASS DATA ========= -->
2551<footer role="contentinfo">
2552<nav role="navigation">
2553<!-- ======= START OF BOTTOM NAVBAR ====== -->
2554<div class="bottomNav"><a id="navbar.bottom">
2555<!--   -->
2556</a>
2557<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
2558<a id="navbar.bottom.firstrow">
2559<!--   -->
2560</a>
2561<ul class="navList" title="Navigation">
2562<li><a href="../../../../../index.html">Overview</a></li>
2563<li><a href="package-summary.html">Package</a></li>
2564<li class="navBarCell1Rev">Class</li>
2565<li><a href="package-tree.html">Tree</a></li>
2566<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
2567<li><a href="../../../../../index-all.html">Index</a></li>
2568<li><a href="../../../../../help-doc.html">Help</a></li>
2569</ul>
2570</div>
2571<div class="subNav">
2572<ul class="navList" id="allclasses_navbar_bottom">
2573<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
2574</ul>
2575<div>
2576<script type="text/javascript"><!--
2577  allClassesLink = document.getElementById("allclasses_navbar_bottom");
2578  if(window==top) {
2579    allClassesLink.style.display = "block";
2580  }
2581  else {
2582    allClassesLink.style.display = "none";
2583  }
2584  //-->
2585</script>
2586<noscript>
2587<div>JavaScript is disabled on your browser.</div>
2588</noscript>
2589</div>
2590<div>
2591<ul class="subNavList">
2592<li>Summary:&nbsp;</li>
2593<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
2594<li>Field&nbsp;|&nbsp;</li>
2595<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
2596<li><a href="#method.summary">Method</a></li>
2597</ul>
2598<ul class="subNavList">
2599<li>Detail:&nbsp;</li>
2600<li>Field&nbsp;|&nbsp;</li>
2601<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
2602<li><a href="#method.detail">Method</a></li>
2603</ul>
2604</div>
2605<a id="skip.navbar.bottom">
2606<!--   -->
2607</a></div>
2608<!-- ======== END OF BOTTOM NAVBAR ======= -->
2609</nav>
2610</footer>
2611</body>
2612</html>
2613