media/docs/doc/reference/com/google/android/exoplayer2/source/MediaPeriod.html
olly a038f875f6 Update Javadoc for 2.14.0
#minor-release

PiperOrigin-RevId: 373351935
2021-05-12 13:55:32 +01:00

686 lines
35 KiB
HTML

<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head><!-- start favicons snippet, use https://realfavicongenerator.net/ --><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="mask-icon" href="/assets/safari-pinned-tab.svg" color="#fc4d50"><link rel="shortcut icon" href="/assets/favicon.ico"><meta name="msapplication-TileColor" content="#ffc40d"><meta name="msapplication-config" content="/assets/browserconfig.xml"><meta name="theme-color" content="#ffffff"><!-- end favicons snippet -->
<title>MediaPeriod (ExoPlayer library)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="MediaPeriod (ExoPlayer library)";
}
}
catch(err) {
}
//-->
var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":18,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.source</a></div>
<h2 title="Interface MediaPeriod" class="title">Interface MediaPeriod</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><code><a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></code></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="ClippingMediaPeriod.html" title="class in com.google.android.exoplayer2.source">ClippingMediaPeriod</a></code>, <code><a href="../testutil/FakeAdaptiveMediaPeriod.html" title="class in com.google.android.exoplayer2.testutil">FakeAdaptiveMediaPeriod</a></code>, <code><a href="../testutil/FakeMediaPeriod.html" title="class in com.google.android.exoplayer2.testutil">FakeMediaPeriod</a></code>, <code><a href="hls/HlsMediaPeriod.html" title="class in com.google.android.exoplayer2.source.hls">HlsMediaPeriod</a></code>, <code><a href="MaskingMediaPeriod.html" title="class in com.google.android.exoplayer2.source">MaskingMediaPeriod</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">MediaPeriod</span>
extends <a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></pre>
<div class="block">Loads media corresponding to a <a href="../Timeline.Period.html" title="class in com.google.android.exoplayer2"><code>Timeline.Period</code></a>, and allows that media to be read. All
methods are called on the player's internal playback thread, as described in the <a href="../ExoPlayer.html" title="interface in com.google.android.exoplayer2"><code>ExoPlayer</code></a> Javadoc.
<p>A <a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source"><code>MediaPeriod</code></a> may only able to provide one <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a> corresponding to a
group at any given time, however this <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a> may adapt between multiple tracks
within the group.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="MediaPeriod.Callback.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod.Callback</a></span></code></th>
<td class="colLast">
<div class="block">A callback to be notified of <a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source"><code>MediaPeriod</code></a> events.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#continueLoading(long)">continueLoading</a></span>&#8203;(long&nbsp;positionUs)</code></th>
<td class="colLast">
<div class="block">Attempts to continue loading.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#discardBuffer(long,boolean)">discardBuffer</a></span>&#8203;(long&nbsp;positionUs,
boolean&nbsp;toKeyframe)</code></th>
<td class="colLast">
<div class="block">Discards buffered media up to the specified position.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getAdjustedSeekPositionUs(long,com.google.android.exoplayer2.SeekParameters)">getAdjustedSeekPositionUs</a></span>&#8203;(long&nbsp;positionUs,
<a href="../SeekParameters.html" title="class in com.google.android.exoplayer2">SeekParameters</a>&nbsp;seekParameters)</code></th>
<td class="colLast">
<div class="block">Returns the position to which a seek will be performed, given the specified seek position and
<a href="../SeekParameters.html" title="class in com.google.android.exoplayer2"><code>SeekParameters</code></a>.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getBufferedPositionUs()">getBufferedPositionUs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns an estimate of the position up to which data is buffered for the enabled tracks.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getNextLoadPositionUs()">getNextLoadPositionUs</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the next load time, or <a href="../C.html#TIME_END_OF_SOURCE"><code>C.TIME_END_OF_SOURCE</code></a> if loading has finished.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>default <a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../offline/StreamKey.html" title="class in com.google.android.exoplayer2.offline" target="_top">StreamKey</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getStreamKeys(java.util.List)">getStreamKeys</a></span>&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection" target="_top">ExoTrackSelection</a>&gt;&nbsp;trackSelections)</code></th>
<td class="colLast">
<div class="block">Returns a list of <a href="../offline/StreamKey.html" title="class in com.google.android.exoplayer2.offline"><code>StreamKeys</code></a> which allow to filter the media in this period
to load only the parts needed to play the provided <a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>TrackSelections</code></a>.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTrackGroups()">getTrackGroups</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the <a href="TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>s exposed by the period.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isLoading()">isLoading</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns whether the media period is currently loading.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#maybeThrowPrepareError()">maybeThrowPrepareError</a></span>()</code></th>
<td class="colLast">
<div class="block">Throws an error that's preventing the period from becoming prepared.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#prepare(com.google.android.exoplayer2.source.MediaPeriod.Callback,long)">prepare</a></span>&#8203;(<a href="MediaPeriod.Callback.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod.Callback</a>&nbsp;callback,
long&nbsp;positionUs)</code></th>
<td class="colLast">
<div class="block">Prepares this media period asynchronously.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readDiscontinuity()">readDiscontinuity</a></span>()</code></th>
<td class="colLast">
<div class="block">Attempts to read a discontinuity.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reevaluateBuffer(long)">reevaluateBuffer</a></span>&#8203;(long&nbsp;positionUs)</code></th>
<td class="colLast">
<div class="block">Re-evaluates the buffer given the playback position.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#seekToUs(long)">seekToUs</a></span>&#8203;(long&nbsp;positionUs)</code></th>
<td class="colLast">
<div class="block">Attempts to seek to the specified position in microseconds.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectTracks(com.google.android.exoplayer2.trackselection.ExoTrackSelection%5B%5D,boolean%5B%5D,com.google.android.exoplayer2.source.SampleStream%5B%5D,boolean%5B%5D,long)">selectTracks</a></span>&#8203;(@NullableType <a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection">ExoTrackSelection</a>[]&nbsp;selections,
boolean[]&nbsp;mayRetainStreamFlags,
@NullableType <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source">SampleStream</a>[]&nbsp;streams,
boolean[]&nbsp;streamResetFlags,
long&nbsp;positionUs)</code></th>
<td class="colLast">
<div class="block">Performs a track selection.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="prepare(com.google.android.exoplayer2.source.MediaPeriod.Callback,long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prepare</h4>
<pre class="methodSignature">void&nbsp;prepare&#8203;(<a href="MediaPeriod.Callback.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod.Callback</a>&nbsp;callback,
long&nbsp;positionUs)</pre>
<div class="block">Prepares this media period asynchronously.
<p><code>callback.onPrepared</code> is called when preparation completes. If preparation fails,
<a href="#maybeThrowPrepareError()"><code>maybeThrowPrepareError()</code></a> will throw an <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top"><code>IOException</code></a>.
<p>If preparation succeeds and results in a source timeline change (e.g. the period duration
becoming known), <a href="MediaSource.MediaSourceCaller.html#onSourceInfoRefreshed(com.google.android.exoplayer2.source.MediaSource,com.google.android.exoplayer2.Timeline)"><code>MediaSource.MediaSourceCaller.onSourceInfoRefreshed(MediaSource, Timeline)</code></a> will be
called before <code>callback.onPrepared</code>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>callback</code> - Callback to receive updates from this period, including being notified when
preparation completes.</dd>
<dd><code>positionUs</code> - The expected starting position, in microseconds.</dd>
</dl>
</li>
</ul>
<a id="maybeThrowPrepareError()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>maybeThrowPrepareError</h4>
<pre class="methodSignature">void&nbsp;maybeThrowPrepareError()
throws <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a></pre>
<div class="block">Throws an error that's preventing the period from becoming prepared. Does nothing if no such
error exists.
<p>This method is only called before the period has completed preparation.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a></code> - The underlying error.</dd>
</dl>
</li>
</ul>
<a id="getTrackGroups()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTrackGroups</h4>
<pre class="methodSignature"><a href="TrackGroupArray.html" title="class in com.google.android.exoplayer2.source">TrackGroupArray</a>&nbsp;getTrackGroups()</pre>
<div class="block">Returns the <a href="TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>s exposed by the period.
<p>This method is only called after the period has been prepared.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The <a href="TrackGroup.html" title="class in com.google.android.exoplayer2.source"><code>TrackGroup</code></a>s.</dd>
</dl>
</li>
</ul>
<a id="getStreamKeys(java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getStreamKeys</h4>
<pre class="methodSignature">default&nbsp;<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../offline/StreamKey.html" title="class in com.google.android.exoplayer2.offline">StreamKey</a>&gt;&nbsp;getStreamKeys&#8203;(<a href="https://developer.android.com/reference/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection" target="_top">ExoTrackSelection</a>&gt;&nbsp;trackSelections)</pre>
<div class="block">Returns a list of <a href="../offline/StreamKey.html" title="class in com.google.android.exoplayer2.offline"><code>StreamKeys</code></a> which allow to filter the media in this period
to load only the parts needed to play the provided <a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>TrackSelections</code></a>.
<p>This method is only called after the period has been prepared.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>trackSelections</code> - The <a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>TrackSelections</code></a> describing the tracks for
which stream keys are requested.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The corresponding <a href="../offline/StreamKey.html" title="class in com.google.android.exoplayer2.offline"><code>StreamKeys</code></a> for the selected tracks, or an empty
list if filtering is not possible and the entire media needs to be loaded to play the
selected tracks.</dd>
</dl>
</li>
</ul>
<a id="selectTracks(com.google.android.exoplayer2.trackselection.ExoTrackSelection[],boolean[],com.google.android.exoplayer2.source.SampleStream[],boolean[],long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>selectTracks</h4>
<pre class="methodSignature">long&nbsp;selectTracks&#8203;(@NullableType <a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection">ExoTrackSelection</a>[]&nbsp;selections,
boolean[]&nbsp;mayRetainStreamFlags,
@NullableType <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source">SampleStream</a>[]&nbsp;streams,
boolean[]&nbsp;streamResetFlags,
long&nbsp;positionUs)</pre>
<div class="block">Performs a track selection.
<p>The call receives track <code>selections</code> for each renderer, <code>mayRetainStreamFlags</code>
indicating whether the existing <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a> can be retained for each selection, and
the existing <code>stream</code>s themselves. The call will update <code>streams</code> to reflect the
provided selections, clearing, setting and replacing entries as required. If an existing sample
stream is retained but with the requirement that the consuming renderer be reset, then the
corresponding flag in <code>streamResetFlags</code> will be set to true. This flag will also be set
if a new sample stream is created.
<p>Note that previously passed <a href="../trackselection/ExoTrackSelection.html" title="interface in com.google.android.exoplayer2.trackselection"><code>TrackSelections</code></a> are no longer valid,
and any references to them must be updated to point to the new selections.
<p>This method is only called after the period has been prepared.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>selections</code> - The renderer track selections.</dd>
<dd><code>mayRetainStreamFlags</code> - Flags indicating whether the existing sample stream can be retained
for each track selection. A <code>true</code> value indicates that the selection is equivalent
to the one that was previously passed, and that the caller does not require that the sample
stream be recreated. If a retained sample stream holds any references to the track
selection then they must be updated to point to the new selection.</dd>
<dd><code>streams</code> - The existing sample streams, which will be updated to reflect the provided
selections.</dd>
<dd><code>streamResetFlags</code> - Will be updated to indicate new sample streams, and sample streams that
have been retained but with the requirement that the consuming renderer be reset.</dd>
<dd><code>positionUs</code> - The current playback position in microseconds. If playback of this period has
not yet started, the value will be the starting position.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The actual position at which the tracks were enabled, in microseconds.</dd>
</dl>
</li>
</ul>
<a id="discardBuffer(long,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>discardBuffer</h4>
<pre class="methodSignature">void&nbsp;discardBuffer&#8203;(long&nbsp;positionUs,
boolean&nbsp;toKeyframe)</pre>
<div class="block">Discards buffered media up to the specified position.
<p>This method is only called after the period has been prepared.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>positionUs</code> - The position in microseconds.</dd>
<dd><code>toKeyframe</code> - If true then for each track discards samples up to the keyframe before or at
the specified position, rather than any sample before or at that position.</dd>
</dl>
</li>
</ul>
<a id="readDiscontinuity()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readDiscontinuity</h4>
<pre class="methodSignature">long&nbsp;readDiscontinuity()</pre>
<div class="block">Attempts to read a discontinuity.
<p>After this method has returned a value other than <a href="../C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a>, all <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a>s provided by the period are guaranteed to start from a key frame.
<p>This method is only called after the period has been prepared and before reading from any
<a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a>s provided by the period.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>If a discontinuity was read then the playback position in microseconds after the
discontinuity. Else <a href="../C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a>.</dd>
</dl>
</li>
</ul>
<a id="seekToUs(long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>seekToUs</h4>
<pre class="methodSignature">long&nbsp;seekToUs&#8203;(long&nbsp;positionUs)</pre>
<div class="block">Attempts to seek to the specified position in microseconds.
<p>After this method has been called, all <a href="SampleStream.html" title="interface in com.google.android.exoplayer2.source"><code>SampleStream</code></a>s provided by the period are
guaranteed to start from a key frame.
<p>This method is only called when at least one track is selected.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>positionUs</code> - The seek position in microseconds.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The actual position to which the period was seeked, in microseconds.</dd>
</dl>
</li>
</ul>
<a id="getAdjustedSeekPositionUs(long,com.google.android.exoplayer2.SeekParameters)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAdjustedSeekPositionUs</h4>
<pre class="methodSignature">long&nbsp;getAdjustedSeekPositionUs&#8203;(long&nbsp;positionUs,
<a href="../SeekParameters.html" title="class in com.google.android.exoplayer2">SeekParameters</a>&nbsp;seekParameters)</pre>
<div class="block">Returns the position to which a seek will be performed, given the specified seek position and
<a href="../SeekParameters.html" title="class in com.google.android.exoplayer2"><code>SeekParameters</code></a>.
<p>This method is only called after the period has been prepared.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>positionUs</code> - The seek position in microseconds.</dd>
<dd><code>seekParameters</code> - Parameters that control how the seek is performed. Implementations may
apply seek parameters on a best effort basis.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The actual position to which a seek will be performed, in microseconds.</dd>
</dl>
</li>
</ul>
<a id="getBufferedPositionUs()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getBufferedPositionUs</h4>
<pre class="methodSignature">long&nbsp;getBufferedPositionUs()</pre>
<div class="block">Returns an estimate of the position up to which data is buffered for the enabled tracks.
<p>This method is only called when at least one track is selected.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="SequenceableLoader.html#getBufferedPositionUs()">getBufferedPositionUs</a></code>&nbsp;in interface&nbsp;<code><a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>An estimate of the absolute position in microseconds up to which data is buffered, or
<a href="../C.html#TIME_END_OF_SOURCE"><code>C.TIME_END_OF_SOURCE</code></a> if the track is fully buffered.</dd>
</dl>
</li>
</ul>
<a id="getNextLoadPositionUs()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNextLoadPositionUs</h4>
<pre class="methodSignature">long&nbsp;getNextLoadPositionUs()</pre>
<div class="block">Returns the next load time, or <a href="../C.html#TIME_END_OF_SOURCE"><code>C.TIME_END_OF_SOURCE</code></a> if loading has finished.
<p>This method is only called after the period has been prepared. It may be called when no
tracks are selected.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="SequenceableLoader.html#getNextLoadPositionUs()">getNextLoadPositionUs</a></code>&nbsp;in interface&nbsp;<code><a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></code></dd>
</dl>
</li>
</ul>
<a id="continueLoading(long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>continueLoading</h4>
<pre class="methodSignature">boolean&nbsp;continueLoading&#8203;(long&nbsp;positionUs)</pre>
<div class="block">Attempts to continue loading.
<p>This method may be called both during and after the period has been prepared.
<p>A period may call <a href="SequenceableLoader.Callback.html#onContinueLoadingRequested(T)"><code>SequenceableLoader.Callback.onContinueLoadingRequested(SequenceableLoader)</code></a> on the
<a href="MediaPeriod.Callback.html" title="interface in com.google.android.exoplayer2.source"><code>MediaPeriod.Callback</code></a> passed to <a href="#prepare(com.google.android.exoplayer2.source.MediaPeriod.Callback,long)"><code>prepare(Callback, long)</code></a> to request that this method be
called when the period is permitted to continue loading data. A period may do this both during
and after preparation.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="SequenceableLoader.html#continueLoading(long)">continueLoading</a></code>&nbsp;in interface&nbsp;<code><a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>positionUs</code> - The current playback position in microseconds. If playback of this period has
not yet started, the value will be the starting position in this period minus the duration
of any media in previous periods still to be played.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True if progress was made, meaning that <a href="#getNextLoadPositionUs()"><code>getNextLoadPositionUs()</code></a> will return a
different value than prior to the call. False otherwise.</dd>
</dl>
</li>
</ul>
<a id="isLoading()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isLoading</h4>
<pre class="methodSignature">boolean&nbsp;isLoading()</pre>
<div class="block">Returns whether the media period is currently loading.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="SequenceableLoader.html#isLoading()">isLoading</a></code>&nbsp;in interface&nbsp;<code><a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></code></dd>
</dl>
</li>
</ul>
<a id="reevaluateBuffer(long)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>reevaluateBuffer</h4>
<pre class="methodSignature">void&nbsp;reevaluateBuffer&#8203;(long&nbsp;positionUs)</pre>
<div class="block">Re-evaluates the buffer given the playback position.
<p>This method is only called after the period has been prepared.
<p>A period may choose to discard buffered media or cancel ongoing loads so that media can be
re-buffered in a different quality.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="SequenceableLoader.html#reevaluateBuffer(long)">reevaluateBuffer</a></code>&nbsp;in interface&nbsp;<code><a href="SequenceableLoader.html" title="interface in com.google.android.exoplayer2.source">SequenceableLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>positionUs</code> - The current playback position in microseconds. If playback of this period has
not yet started, the value will be the starting position in this period minus the duration
of any media in previous periods still to be played.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>