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 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: </li> 89<li><a href="#nested.class.summary">Nested</a> | </li> 90<li>Field | </li> 91<li><a href="#constructor.summary">Constr</a> | </li> 92<li><a href="#method.summary">Method</a></li> 93</ul> 94<ul class="subNavList"> 95<li>Detail: </li> 96<li>Field | </li> 97<li><a href="#constructor.detail">Constr</a> | </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"> </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> <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 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 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 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"> </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>​(<a href="../util/Clock.html" title="interface in com.google.android.exoplayer2.util">Clock</a> 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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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>​(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a> 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>​(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a> timeline, 231 int windowIndex, 232 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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>​(<a href="../audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a> 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>​(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a> 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>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> decoderName, 261 long initializedTimestampMs, 262 long 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>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> 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>​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> 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>​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> 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>​(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a> format, 291 <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a> 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>​(long 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>​(int 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>​(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a> 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>​(int bufferSize, 321 long bufferSizeMs, 322 long 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>​(<a href="../Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a> 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>​(int elapsedMs, 338 long bytesTransferred, 339 long 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>​(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="../text/Cue.html" title="class in com.google.android.exoplayer2.text" target="_top">Cue</a>> 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>​(<a href="../DeviceInfo.html" title="class in com.google.android.exoplayer2">DeviceInfo</a> 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>​(int volume, 362 boolean 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>​(int windowIndex, 370 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 371 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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>​(int windowIndex, 379 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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>​(int windowIndex, 387 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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>​(int windowIndex, 395 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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>​(int windowIndex, 403 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 404 @com.google.android.exoplayer2.drm.DrmSession.State int 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>​(int windowIndex, 412 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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> 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>​(int windowIndex, 421 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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>​(int count, 429 long 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>​(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a> player, 437 <a href="../Player.Events.html" title="class in com.google.android.exoplayer2">Player.Events</a> 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>​(boolean 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>​(boolean 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>​(int windowIndex, 459 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 460 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 461 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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>​(int windowIndex, 469 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 470 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 471 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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>​(int windowIndex, 479 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 480 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 481 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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> error, 483 boolean 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>​(boolean isLoading)</code></th> 491<td class="colLast"> </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>​(int windowIndex, 496 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 497 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 498 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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>​(long 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>​(<a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a> mediaItem, 513 @com.google.android.exoplayer2.Player.MediaItemTransitionReason int 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>​(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a> 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>​(<a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata">Metadata</a> 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>​(<a href="../PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a> 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>​(@com.google.android.exoplayer2.Player.State int 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>​(@com.google.android.exoplayer2.Player.PlaybackSuppressionReason int 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>​(<a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a> 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>​(<a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a> 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>​(boolean playWhenReady, 571 @com.google.android.exoplayer2.Player.State int playbackState)</code></th> 572<td class="colLast"> </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>​(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a> 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>​(boolean playWhenReady, 584 @com.google.android.exoplayer2.Player.PlayWhenReadyChangeReason int 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>​(@com.google.android.exoplayer2.Player.DiscontinuityReason int reason)</code></th> 592<td class="colLast"> </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>​(<a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> oldPosition, 597 <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> newPosition, 598 @com.google.android.exoplayer2.Player.DiscontinuityReason int 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>​(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a> output, 614 long 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>​(@com.google.android.exoplayer2.Player.RepeatMode int 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>​(long 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>​(long 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"> </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>​(boolean 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>​(boolean 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>​(int width, 663 int 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>​(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a> timeline, 672 @com.google.android.exoplayer2.Player.TimelineChangeReason int 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>​(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> trackGroups, 680 <a href="../trackselection/TrackSelectionArray.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionArray</a> 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>​(<a href="../trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a> 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>​(<a href="../TracksInfo.html" title="class in com.google.android.exoplayer2">TracksInfo</a> 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>​(int windowIndex, 702 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 703 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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>​(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a> 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>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> decoderName, 719 long initializedTimestampMs, 720 long 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>​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> 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>​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> 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>​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> 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>​(long totalProcessingOffsetUs, 749 int 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>​(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a> format, 757 <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a> 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>​(<a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a> 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>​(float 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>​(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 793 int eventFlag, 794 <a href="../util/ListenerSet.Event.html" title="interface in com.google.android.exoplayer2.util">ListenerSet.Event</a><<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>> 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>​(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a> 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> 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>​(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source" target="_top">MediaSource.MediaPeriodId</a>> queue, 810 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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 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 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="<init>(com.google.android.exoplayer2.util.Clock)"> 847<!-- --> 848</a> 849<ul class="blockListLast"> 850<li class="blockList"> 851<h4>DefaultAnalyticsCollector</h4> 852<pre>public DefaultAnalyticsCollector​(<a href="../util/Clock.html" title="interface in com.google.android.exoplayer2.util">Clock</a> 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 void addListener​(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a> listener)</pre> 878<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void removeListener​(<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a> listener)</pre> 896<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void setPlayer​(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a> 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> looper)</pre> 915<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void release()</pre> 935<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void updateMediaPeriodQueueInfo​(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source" target="_top">MediaSource.MediaPeriodId</a>> queue, 951 @Nullable 952 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> readingPeriod)</pre> 953<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void notifySeekStarted()</pre> 974<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioEnabled​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> counters)</pre> 990<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioDecoderInitialized​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> decoderName, 1008 long initializedTimestampMs, 1009 long initializationDurationMs)</pre> 1010<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioInputFormatChanged​(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a> format, 1030 @Nullable 1031 <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a> decoderReuseEvaluation)</pre> 1032<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioPositionAdvancing​(long playoutStartSystemTimeMs)</pre> 1052<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioUnderrun​(int bufferSize, 1071 long bufferSizeMs, 1072 long elapsedSinceLastFeedMs)</pre> 1073<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioDecoderReleased​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> decoderName)</pre> 1093<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioDisabled​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> counters)</pre> 1110<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioSinkError​(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a> audioSinkError)</pre> 1127<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioCodecError​(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a> audioCodecError)</pre> 1146<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVolumeChanged​(float volume)</pre> 1164<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoEnabled​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> counters)</pre> 1184<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoDecoderInitialized​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> decoderName, 1202 long initializedTimestampMs, 1203 long initializationDurationMs)</pre> 1204<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoInputFormatChanged​(<a href="../Format.html" title="class in com.google.android.exoplayer2">Format</a> format, 1224 @Nullable 1225 <a href="../decoder/DecoderReuseEvaluation.html" title="class in com.google.android.exoplayer2.decoder">DecoderReuseEvaluation</a> decoderReuseEvaluation)</pre> 1226<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDroppedFrames​(int count, 1246 long elapsedMs)</pre> 1247<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoDecoderReleased​(<a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a> decoderName)</pre> 1269<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoDisabled​(<a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> counters)</pre> 1286<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onRenderedFirstFrame​(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a> output, 1303 long renderTimeMs)</pre> 1304<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoFrameProcessingOffset​(long totalProcessingOffsetUs, 1324 int frameCount)</pre> 1325<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoCodecError​(<a href="https://developer.android.com/reference/java/lang/Exception.html" title="class or interface in java.lang" class="externalLink" target="_top">Exception</a> videoCodecError)</pre> 1355<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onSurfaceSizeChanged​(int width, 1380 int height)</pre> 1381<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onLoadStarted​(int windowIndex, 1405 @Nullable 1406 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 1407 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 1408 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> mediaLoadData)</pre> 1409<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onLoadCompleted​(int windowIndex, 1430 @Nullable 1431 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 1432 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 1433 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> mediaLoadData)</pre> 1434<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onLoadCanceled​(int windowIndex, 1457 @Nullable 1458 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 1459 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 1460 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> mediaLoadData)</pre> 1461<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onLoadError​(int windowIndex, 1484 @Nullable 1485 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 1486 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 1487 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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> error, 1489 boolean wasCanceled)</pre> 1490<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onUpstreamDiscarded​(int windowIndex, 1526 @Nullable 1527 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 1528 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> mediaLoadData)</pre> 1529<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDownstreamFormatChanged​(int windowIndex, 1549 @Nullable 1550 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId, 1551 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> mediaLoadData)</pre> 1552<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onTimelineChanged​(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a> timeline, 1572 <a href="../Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2">@TimelineChangeReason</a> 1573 @com.google.android.exoplayer2.Player.TimelineChangeReason int reason)</pre> 1574<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onMediaItemTransition​(@Nullable 1600 <a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a> mediaItem, 1601 <a href="../Player.MediaItemTransitionReason.html" title="annotation in com.google.android.exoplayer2">@MediaItemTransitionReason</a> 1602 @com.google.android.exoplayer2.Player.MediaItemTransitionReason int reason)</pre> 1603<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onTracksChanged​(<a href="../source/TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a> trackGroups, 1628 <a href="../trackselection/TrackSelectionArray.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionArray</a> trackSelections)</pre> 1629<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onTracksInfoChanged​(<a href="../TracksInfo.html" title="class in com.google.android.exoplayer2">TracksInfo</a> tracksInfo)</pre> 1653<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onLoadingChanged​(boolean 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> in interface <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 void onIsLoadingChanged​(boolean isLoading)</pre> 1686<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAvailableCommandsChanged​(<a href="../Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a> availableCommands)</pre> 1706<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlayerStateChanged​(boolean playWhenReady, 1727 <a href="../Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a> 1728 @com.google.android.exoplayer2.Player.State int 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> in interface <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 void onPlaybackStateChanged​(<a href="../Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a> 1742 @com.google.android.exoplayer2.Player.State int playbackState)</pre> 1743<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlayWhenReadyChanged​(boolean playWhenReady, 1763 <a href="../Player.PlayWhenReadyChangeReason.html" title="annotation in com.google.android.exoplayer2">@PlayWhenReadyChangeReason</a> 1764 @com.google.android.exoplayer2.Player.PlayWhenReadyChangeReason int reason)</pre> 1765<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlaybackSuppressionReasonChanged​(<a href="../Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2">@PlaybackSuppressionReason</a> 1786 @com.google.android.exoplayer2.Player.PlaybackSuppressionReason int playbackSuppressionReason)</pre> 1787<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onIsPlayingChanged​(boolean isPlaying)</pre> 1807<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onRepeatModeChanged​(<a href="../Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a> 1827 @com.google.android.exoplayer2.Player.RepeatMode int repeatMode)</pre> 1828<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onShuffleModeEnabledChanged​(boolean shuffleModeEnabled)</pre> 1848<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlayerError​(<a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a> error)</pre> 1868<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlayerErrorChanged​(@Nullable 1892 <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a> error)</pre> 1893<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPositionDiscontinuity​(<a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a> 1916 @com.google.android.exoplayer2.Player.DiscontinuityReason int 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> in interface <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 void onPositionDiscontinuity​(<a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> oldPosition, 1930 <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> newPosition, 1931 <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a> 1932 @com.google.android.exoplayer2.Player.DiscontinuityReason int reason)</pre> 1933<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlaybackParametersChanged​(<a href="../PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a> playbackParameters)</pre> 1959<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onSeekBackIncrementChanged​(long seekBackIncrementMs)</pre> 1982<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onSeekForwardIncrementChanged​(long seekForwardIncrementMs)</pre> 2002<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onMaxSeekToPreviousPositionChanged​(long maxSeekToPreviousPositionMs)</pre> 2022<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onMediaMetadataChanged​(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a> mediaMetadata)</pre> 2043<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlaylistMetadataChanged​(<a href="../MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a> playlistMetadata)</pre> 2071<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onMetadata​(<a href="../metadata/Metadata.html" title="class in com.google.android.exoplayer2.metadata">Metadata</a> metadata)</pre> 2089<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onCues​(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a><<a href="../text/Cue.html" title="class in com.google.android.exoplayer2.text" target="_top">Cue</a>> cues)</pre> 2109<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void 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> in interface <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 void onSkipSilenceEnabledChanged​(boolean skipSilenceEnabled)</pre> 2145<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioSessionIdChanged​(int audioSessionId)</pre> 2165<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAudioAttributesChanged​(<a href="../audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a> audioAttributes)</pre> 2185<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoSizeChanged​(<a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a> videoSize)</pre> 2205<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onTrackSelectionParametersChanged​(<a href="../trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a> parameters)</pre> 2225<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDeviceInfoChanged​(<a href="../DeviceInfo.html" title="class in com.google.android.exoplayer2">DeviceInfo</a> deviceInfo)</pre> 2245<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDeviceVolumeChanged​(int volume, 2265 boolean muted)</pre> 2266<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onRenderedFirstFrame()</pre> 2287<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onEvents​(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a> player, 2306 <a href="../Player.Events.html" title="class in com.google.android.exoplayer2">Player.Events</a> events)</pre> 2307<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onBandwidthSample​(int elapsedMs, 2347 long bytesTransferred, 2348 long bitrateEstimate)</pre> 2349<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDrmSessionAcquired​(int windowIndex, 2374 @Nullable 2375 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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 state)</pre> 2378<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDrmKeysLoaded​(int windowIndex, 2397 @Nullable 2398 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId)</pre> 2399<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDrmSessionManagerError​(int windowIndex, 2417 @Nullable 2418 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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> error)</pre> 2420<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDrmKeysRestored​(int windowIndex, 2446 @Nullable 2447 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId)</pre> 2448<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDrmKeysRemoved​(int windowIndex, 2466 @Nullable 2467 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId)</pre> 2468<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDrmSessionReleased​(int windowIndex, 2486 @Nullable 2487 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> mediaPeriodId)</pre> 2488<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void sendEvent​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 2506 int eventFlag, 2507 <a href="../util/ListenerSet.Event.html" title="interface in com.google.android.exoplayer2.util">ListenerSet.Event</a><<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>> 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 <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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 <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> generateEventTime​(<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a> timeline, 2536 int windowIndex, 2537 @Nullable 2538 <a href="../source/MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a> 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 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: </li> 2593<li><a href="#nested.class.summary">Nested</a> | </li> 2594<li>Field | </li> 2595<li><a href="#constructor.summary">Constr</a> | </li> 2596<li><a href="#method.summary">Method</a></li> 2597</ul> 2598<ul class="subNavList"> 2599<li>Detail: </li> 2600<li>Field | </li> 2601<li><a href="#constructor.detail">Constr</a> | </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