@UnstableApi
interface LoadControl

Known direct subclasses
DefaultLoadControl

The default LoadControl implementation.


Controls buffering of media.

Summary

Constants

const MediaSource.MediaPeriodId!

This property is deprecated.

Used as a placeholder when MediaPeriodId is unknown.

Public functions

Allocator!

Returns the Allocator that should be used to obtain media buffer allocations.

Long

Returns the duration of media to retain in the buffer prior to the current playback position, for fast backward seeking.

Unit

Called by the player when prepared with a new source.

Unit

Called by the player when released.

Unit

Called by the player when stopped.

Unit
onTracksSelected(
    renderers: Array<Renderer!>!,
    trackGroups: TrackGroupArray!,
    trackSelections: Array<ExoTrackSelection!>!
)

This function is deprecated.

Implement onTracksSelected instead.

Unit
onTracksSelected(
    timeline: Timeline!,
    mediaPeriodId: MediaSource.MediaPeriodId!,
    renderers: Array<Renderer!>!,
    trackGroups: TrackGroupArray!,
    trackSelections: Array<ExoTrackSelection!>!
)

Called by the player when a track selection occurs.

Boolean

Returns whether media should be retained from the keyframe before the current playback position minus getBackBufferDurationUs, rather than any sample before or at that position.

Boolean
shouldContinueLoading(
    playbackPositionUs: Long,
    bufferedDurationUs: Long,
    playbackSpeed: Float
)

Called by the player to determine whether it should continue to load the source.

Boolean
shouldStartPlayback(
    bufferedDurationUs: Long,
    playbackSpeed: Float,
    rebuffering: Boolean,
    targetLiveOffsetUs: Long
)

This function is deprecated.

Implement shouldStartPlayback instead.

Boolean
shouldStartPlayback(
    timeline: Timeline!,
    mediaPeriodId: MediaSource.MediaPeriodId!,
    bufferedDurationUs: Long,
    playbackSpeed: Float,
    rebuffering: Boolean,
    targetLiveOffsetUs: Long
)

Called repeatedly by the player when it's loading the source, has yet to start playback, and has the minimum amount of data necessary for playback to be started.

Constants

EMPTY_MEDIA_PERIOD_ID

const val EMPTY_MEDIA_PERIOD_IDMediaSource.MediaPeriodId!

Public functions

getAllocator

fun getAllocator(): Allocator!

Returns the Allocator that should be used to obtain media buffer allocations.

getBackBufferDurationUs

fun getBackBufferDurationUs(): Long

Returns the duration of media to retain in the buffer prior to the current playback position, for fast backward seeking.

Note: If retainBackBufferFromKeyframe is false then seeking in the back-buffer will only be fast if the back-buffer contains a keyframe prior to the seek position.

Note: Implementations should return a single value. Dynamic changes to the back-buffer are not currently supported.

Returns
Long

The duration of media to retain in the buffer prior to the current playback position, in microseconds.

onPrepared

fun onPrepared(): Unit

Called by the player when prepared with a new source.

onReleased

fun onReleased(): Unit

Called by the player when released.

onStopped

fun onStopped(): Unit

Called by the player when stopped.

onTracksSelected

fun onTracksSelected(
    renderers: Array<Renderer!>!,
    trackGroups: TrackGroupArray!,
    trackSelections: Array<ExoTrackSelection!>!
): Unit

onTracksSelected

fun onTracksSelected(
    timeline: Timeline!,
    mediaPeriodId: MediaSource.MediaPeriodId!,
    renderers: Array<Renderer!>!,
    trackGroups: TrackGroupArray!,
    trackSelections: Array<ExoTrackSelection!>!
): Unit

Called by the player when a track selection occurs.

Parameters
timeline: Timeline!

The current Timeline in ExoPlayer. Can be EMPTY only when the deprecated onTracksSelected was called.

mediaPeriodId: MediaSource.MediaPeriodId!

Identifies (in the current timeline) the MediaPeriod for which the selection was made. Will be EMPTY_MEDIA_PERIOD_ID when timeline is empty.

renderers: Array<Renderer!>!

The renderers.

trackGroups: TrackGroupArray!

The TrackGroups from which the selection was made.

trackSelections: Array<ExoTrackSelection!>!

The track selections that were made.

retainBackBufferFromKeyframe

fun retainBackBufferFromKeyframe(): Boolean

Returns whether media should be retained from the keyframe before the current playback position minus getBackBufferDurationUs, rather than any sample before or at that position.

Warning: Returning true will cause the back-buffer size to depend on the spacing of keyframes in the media being played. Returning true is not recommended unless you control the media and are comfortable with the back-buffer size exceeding getBackBufferDurationUs by as much as the maximum duration between adjacent keyframes in the media.

Note: Implementations should return a single value. Dynamic changes to the back-buffer are not currently supported.

Returns
Boolean

Whether media should be retained from the keyframe before the current playback position minus getBackBufferDurationUs, rather than any sample before or at that position.

shouldContinueLoading

fun shouldContinueLoading(
    playbackPositionUs: Long,
    bufferedDurationUs: Long,
    playbackSpeed: Float
): Boolean

Called by the player to determine whether it should continue to load the source. If this method returns true, the MediaPeriod identified in the most recent onTracksSelected call will continue being loaded.

Parameters
playbackPositionUs: Long

The current playback position in microseconds, relative to the start of the period that will continue to be loaded if this method returns true. If playback of this period has not yet started, the value will be negative and equal in magnitude to the duration of any media in previous periods still to be played.

bufferedDurationUs: Long

The duration of media that's currently buffered.

playbackSpeed: Float

The current factor by which playback is sped up.

Returns
Boolean

Whether the loading should continue.

shouldStartPlayback

fun shouldStartPlayback(
    bufferedDurationUs: Long,
    playbackSpeed: Float,
    rebuffering: Boolean,
    targetLiveOffsetUs: Long
): Boolean

shouldStartPlayback

fun shouldStartPlayback(
    timeline: Timeline!,
    mediaPeriodId: MediaSource.MediaPeriodId!,
    bufferedDurationUs: Long,
    playbackSpeed: Float,
    rebuffering: Boolean,
    targetLiveOffsetUs: Long
): Boolean

Called repeatedly by the player when it's loading the source, has yet to start playback, and has the minimum amount of data necessary for playback to be started. The value returned determines whether playback is actually started. The load control may opt to return false until some condition has been met (e.g. a certain amount of media is buffered).

Parameters
timeline: Timeline!

The current Timeline in ExoPlayer. Can be EMPTY only when the deprecated shouldStartPlayback was called.

mediaPeriodId: MediaSource.MediaPeriodId!

Identifies (in the current timeline) the MediaPeriod for which playback will start. Will be EMPTY_MEDIA_PERIOD_ID when timeline is empty.

bufferedDurationUs: Long

The duration of media that's currently buffered.

playbackSpeed: Float

The current factor by which playback is sped up.

rebuffering: Boolean

Whether the player is rebuffering. A rebuffer is defined to be caused by buffer depletion rather than a user action. Hence this parameter is false during initial buffering and when buffering as a result of a seek operation.

targetLiveOffsetUs: Long

The desired playback position offset to the live edge in microseconds, or TIME_UNSET if the media is not a live stream or no offset is configured.

Returns
Boolean

Whether playback should be allowed to start or resume.