public class AdaptiveTrackSelection extends BaseTrackSelection
TrackSelection
, whose selected track is updated to be the one
of highest quality given the current network conditions and the state of the buffer.Modifier and Type | Class and Description |
---|---|
static class |
AdaptiveTrackSelection.Factory
Factory for
AdaptiveTrackSelection instances. |
Modifier and Type | Field and Description |
---|---|
static float |
DEFAULT_BANDWIDTH_FRACTION |
static float |
DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE |
static int |
DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS |
static int |
DEFAULT_MAX_INITIAL_BITRATE |
static int |
DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS |
static int |
DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS |
group, length, tracks
Constructor and Description |
---|
AdaptiveTrackSelection(TrackGroup group,
int[] tracks,
BandwidthMeter bandwidthMeter) |
AdaptiveTrackSelection(TrackGroup group,
int[] tracks,
BandwidthMeter bandwidthMeter,
int maxInitialBitrate,
long minDurationForQualityIncreaseMs,
long maxDurationForQualityDecreaseMs,
long minDurationToRetainAfterDiscardMs,
float bandwidthFraction,
float bufferedFractionToLiveEdgeForQualityIncrease) |
Modifier and Type | Method and Description |
---|---|
int |
evaluateQueueSize(long playbackPositionUs,
java.util.List<? extends MediaChunk> queue)
May be called periodically by sources that load media in discrete
MediaChunk s and
support discarding of buffered chunks in order to re-buffer using a different selected track. |
int |
getSelectedIndex()
Returns the index of the selected track.
|
java.lang.Object |
getSelectionData()
Returns optional data associated with the current track selection.
|
int |
getSelectionReason()
Returns the reason for the current track selection.
|
void |
updateSelectedTrack(long playbackPositionUs,
long bufferedDurationUs,
long availableDurationUs)
Updates the selected track.
|
blacklist, disable, enable, equals, getFormat, getIndexInTrackGroup, getSelectedFormat, getSelectedIndexInTrackGroup, getTrackGroup, hashCode, indexOf, indexOf, isBlacklisted, length
public static final int DEFAULT_MAX_INITIAL_BITRATE
public static final int DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS
public static final int DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS
public static final int DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS
public static final float DEFAULT_BANDWIDTH_FRACTION
public static final float DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE
public AdaptiveTrackSelection(TrackGroup group, int[] tracks, BandwidthMeter bandwidthMeter)
group
- The TrackGroup
.tracks
- The indices of the selected tracks within the TrackGroup
. Must not be
empty. May be in any order.bandwidthMeter
- Provides an estimate of the currently available bandwidth.public AdaptiveTrackSelection(TrackGroup group, int[] tracks, BandwidthMeter bandwidthMeter, int maxInitialBitrate, long minDurationForQualityIncreaseMs, long maxDurationForQualityDecreaseMs, long minDurationToRetainAfterDiscardMs, float bandwidthFraction, float bufferedFractionToLiveEdgeForQualityIncrease)
group
- The TrackGroup
.tracks
- The indices of the selected tracks within the TrackGroup
. Must not be
empty. May be in any order.bandwidthMeter
- Provides an estimate of the currently available bandwidth.maxInitialBitrate
- The maximum bitrate in bits per second that should be assumed when a
bandwidth estimate is unavailable.minDurationForQualityIncreaseMs
- The minimum duration of buffered data required for the
selected track to switch to one of higher quality.maxDurationForQualityDecreaseMs
- The maximum duration of buffered data required for the
selected track to switch to one of lower quality.minDurationToRetainAfterDiscardMs
- When switching to a track of significantly higher
quality, the selection may indicate that media already buffered at the lower quality can
be discarded to speed up the switch. This is the minimum duration of media that must be
retained at the lower quality.bandwidthFraction
- The fraction of the available bandwidth that the selection should
consider available for use. Setting to a value less than 1 is recommended to account
for inaccuracies in the bandwidth estimator.bufferedFractionToLiveEdgeForQualityIncrease
- For live streaming, the fraction of
the duration from current playback position to the live edge that has to be buffered
before the selected track can be switched to one of higher quality. This parameter is
only applied when the playback position is closer to the live edge than
minDurationForQualityIncreaseMs
, which would otherwise prevent switching to a
higher quality from happening.public void updateSelectedTrack(long playbackPositionUs, long bufferedDurationUs, long availableDurationUs)
TrackSelection
This method may only be called when the selection is enabled.
playbackPositionUs
- The current playback position in microseconds. If playback of the
period to which this track selection belongs has not yet started, the value will be the
starting position in the period minus the duration of any media in previous periods still
to be played.bufferedDurationUs
- The duration of media currently buffered from the current playback
position, in microseconds. Note that the next load position can be calculated as
(playbackPositionUs + bufferedDurationUs)
.availableDurationUs
- The duration of media available for buffering from the current
playback position, in microseconds, or C.TIME_UNSET
if media can be buffered
to the end of the current period. Note that if not set to C.TIME_UNSET
, the
position up to which media is available for buffering can be calculated as
(playbackPositionUs + availableDurationUs)
.public int getSelectedIndex()
TrackSelection
public int getSelectionReason()
TrackSelection
public java.lang.Object getSelectionData()
TrackSelection
public int evaluateQueueSize(long playbackPositionUs, java.util.List<? extends MediaChunk> queue)
TrackSelection
MediaChunk
s and
support discarding of buffered chunks in order to re-buffer using a different selected track.
Returns the number of chunks that should be retained in the queue.
To avoid excessive re-buffering, implementations should normally return the size of the queue. An example of a case where a smaller value may be returned is if network conditions have improved dramatically, allowing chunks to be discarded and re-buffered in a track of significantly higher quality. Discarding chunks may allow faster switching to a higher quality track in this case. This method may only be called when the selection is enabled.
evaluateQueueSize
in interface TrackSelection
evaluateQueueSize
in class BaseTrackSelection
playbackPositionUs
- The current playback position in microseconds. If playback of the
period to which this track selection belongs has not yet started, the value will be the
starting position in the period minus the duration of any media in previous periods still
to be played.queue
- The queue of buffered MediaChunk
s. Must not be modified.