DefaultDashChunkSource


@UnstableApi
public class DefaultDashChunkSource implements DashChunkSource


A default DashChunkSource implementation.

Summary

Nested types

DashChunkSource.Factory for DefaultDashChunkSource instances.

Holds information about a snapshot of a single Representation.

MediaChunkIterator wrapping a RepresentationHolder.

Protected fields

final DefaultDashChunkSource.RepresentationHolder[]

Public constructors

DefaultDashChunkSource(
    ChunkExtractor.Factory chunkExtractorFactory,
    LoaderErrorThrower manifestLoaderErrorThrower,
    DashManifest manifest,
    BaseUrlExclusionList baseUrlExclusionList,
    int periodIndex,
    int[] adaptationSetIndices,
    ExoTrackSelection trackSelection,
    @C.TrackType int trackType,
    DataSource dataSource,
    long elapsedRealtimeOffsetMs,
    int maxSegmentsPerLoad,
    boolean enableEventMessageTrack,
    List<Format> closedCaptionFormats,
    @Nullable PlayerEmsgHandler.PlayerTrackEmsgHandler playerTrackEmsgHandler,
    PlayerId playerId,
    @Nullable CmcdConfiguration cmcdConfiguration
)

Public methods

long
getAdjustedSeekPositionUs(
    long positionUs,
    SeekParameters seekParameters
)

Adjusts a seek position given the specified SeekParameters.

void
getNextChunk(
    LoadingInfo loadingInfo,
    long loadPositionUs,
    List<MediaChunk> queue,
    ChunkHolder out
)

Returns the next chunk to load.

int
getPreferredQueueSize(long playbackPositionUs, List<MediaChunk> queue)

Evaluates whether MediaChunks should be removed from the back of the queue.

void

If the source is currently having difficulty providing chunks, then this method throws the underlying error.

void

Called when the ChunkSampleStream has finished loading a chunk obtained from this source.

boolean
onChunkLoadError(
    Chunk chunk,
    boolean cancelable,
    LoadErrorHandlingPolicy.LoadErrorInfo loadErrorInfo,
    LoadErrorHandlingPolicy loadErrorHandlingPolicy
)

Called when the ChunkSampleStream encounters an error loading a chunk obtained from this source.

void

Releases any held resources.

boolean
shouldCancelLoad(
    long playbackPositionUs,
    Chunk loadingChunk,
    List<MediaChunk> queue
)

Returns whether an ongoing load of a chunk should be canceled.

void
updateManifest(DashManifest newManifest, int newPeriodIndex)

Updates the manifest.

void

Updates the track selection.

Protected methods

Chunk
@RequiresNonNull(value = "#1.chunkExtractor")
newInitializationChunk(
    DefaultDashChunkSource.RepresentationHolder representationHolder,
    DataSource dataSource,
    Format trackFormat,
    @C.SelectionReason int trackSelectionReason,
    @Nullable Object trackSelectionData,
    @Nullable RangedUri initializationUri,
    @Nullable RangedUri indexUri,
    @Nullable CmcdData.Factory cmcdDataFactory
)

Creates a new Chunk for initialization.

Chunk
newMediaChunk(
    DefaultDashChunkSource.RepresentationHolder representationHolder,
    DataSource dataSource,
    @C.TrackType int trackType,
    Format trackFormat,
    @C.SelectionReason int trackSelectionReason,
    @Nullable Object trackSelectionData,
    long firstSegmentNum,
    int maxSegmentCount,
    long seekTimeUs,
    long nowPeriodTimeUs,
    @Nullable CmcdData.Factory cmcdDataFactory
)

Protected fields

representationHolders

protected final DefaultDashChunkSource.RepresentationHolder[] representationHolders

Public constructors

DefaultDashChunkSource

public DefaultDashChunkSource(
    ChunkExtractor.Factory chunkExtractorFactory,
    LoaderErrorThrower manifestLoaderErrorThrower,
    DashManifest manifest,
    BaseUrlExclusionList baseUrlExclusionList,
    int periodIndex,
    int[] adaptationSetIndices,
    ExoTrackSelection trackSelection,
    @C.TrackType int trackType,
    DataSource dataSource,
    long elapsedRealtimeOffsetMs,
    int maxSegmentsPerLoad,
    boolean enableEventMessageTrack,
    List<Format> closedCaptionFormats,
    @Nullable PlayerEmsgHandler.PlayerTrackEmsgHandler playerTrackEmsgHandler,
    PlayerId playerId,
    @Nullable CmcdConfiguration cmcdConfiguration
)
Parameters
ChunkExtractor.Factory chunkExtractorFactory

Creates ChunkExtractor instances to use for extracting chunks.

LoaderErrorThrower manifestLoaderErrorThrower

Throws errors affecting loading of manifests.

DashManifest manifest

The initial manifest.

BaseUrlExclusionList baseUrlExclusionList

The base URL exclusion list.

int periodIndex

The index of the period in the manifest.

int[] adaptationSetIndices

The indices of the adaptation sets in the period.

ExoTrackSelection trackSelection

The track selection.

@C.TrackType int trackType

The type of the tracks in the selection.

DataSource dataSource

A DataSource suitable for loading the media data.

long elapsedRealtimeOffsetMs

If known, an estimate of the instantaneous difference between server-side unix time and elapsedRealtime in milliseconds, specified as the server's unix time minus the local elapsed time. Or TIME_UNSET if unknown.

int maxSegmentsPerLoad

The maximum number of segments to combine into a single request. Note that segments will only be combined if their Uris are the same and if their data ranges are adjacent.

boolean enableEventMessageTrack

Whether to output an event message track.

List<Format> closedCaptionFormats

The Formats of closed caption tracks to be output.

@Nullable PlayerEmsgHandler.PlayerTrackEmsgHandler playerTrackEmsgHandler

The PlayerTrackEmsgHandler instance to handle emsg messages targeting the player. Maybe null if this is not necessary.

PlayerId playerId

The PlayerId of the player using this chunk source.

@Nullable CmcdConfiguration cmcdConfiguration

The CmcdConfiguration for this chunk source.

Public methods

getAdjustedSeekPositionUs

public long getAdjustedSeekPositionUs(
    long positionUs,
    SeekParameters seekParameters
)

Adjusts a seek position given the specified SeekParameters. Chunk boundaries are used as sync points.

Parameters
long positionUs

The seek position in microseconds.

SeekParameters seekParameters

Parameters that control how the seek is performed.

Returns
long

The adjusted seek position, in microseconds.

getNextChunk

public void getNextChunk(
    LoadingInfo loadingInfo,
    long loadPositionUs,
    List<MediaChunk> queue,
    ChunkHolder out
)

Returns the next chunk to load.

If a chunk is available then chunk is set. If the end of the stream has been reached then endOfStream is set. If a chunk is not available but the end of the stream has not been reached, the ChunkHolder is not modified.

Parameters
LoadingInfo loadingInfo

The LoadingInfo when loading request is made.

long loadPositionUs

The current load position in microseconds. If queue is empty, this is the starting position from which chunks should be provided. Else it's equal to endTimeUs of the last chunk in the queue.

List<MediaChunk> queue

The queue of buffered MediaChunks.

ChunkHolder out

A holder to populate.

getPreferredQueueSize

public int getPreferredQueueSize(long playbackPositionUs, List<MediaChunk> queue)

Evaluates whether MediaChunks should be removed from the back of the queue.

Removing MediaChunks from the back of the queue can be useful if they could be replaced with chunks of a significantly higher quality (e.g. because the available bandwidth has substantially increased).

Will only be called if no MediaChunk in the queue is currently loading.

Parameters
long playbackPositionUs

The current playback position, in microseconds.

List<MediaChunk> queue

The queue of buffered MediaChunks.

Returns
int

The preferred queue size.

maybeThrowError

public void maybeThrowError()

If the source is currently having difficulty providing chunks, then this method throws the underlying error. Otherwise does nothing.

Throws
java.io.IOException

The underlying error.

onChunkLoadCompleted

public void onChunkLoadCompleted(Chunk chunk)

Called when the ChunkSampleStream has finished loading a chunk obtained from this source.

Parameters
Chunk chunk

The chunk whose load has been completed.

onChunkLoadError

public boolean onChunkLoadError(
    Chunk chunk,
    boolean cancelable,
    LoadErrorHandlingPolicy.LoadErrorInfo loadErrorInfo,
    LoadErrorHandlingPolicy loadErrorHandlingPolicy
)

Called when the ChunkSampleStream encounters an error loading a chunk obtained from this source.

Parameters
Chunk chunk

The chunk whose load encountered the error.

boolean cancelable

Whether the load can be canceled.

LoadErrorHandlingPolicy.LoadErrorInfo loadErrorInfo

The load error info.

LoadErrorHandlingPolicy loadErrorHandlingPolicy

The load error handling policy to customize the behaviour of handling the load error.

Returns
boolean

Whether the load should be canceled so that a replacement chunk can be loaded instead. Must be false if cancelable is false. If true, getNextChunk will be called to obtain the replacement chunk.

release

public void release()

Releases any held resources.

shouldCancelLoad

public boolean shouldCancelLoad(
    long playbackPositionUs,
    Chunk loadingChunk,
    List<MediaChunk> queue
)

Returns whether an ongoing load of a chunk should be canceled.

Parameters
long playbackPositionUs

The current playback position, in microseconds.

Chunk loadingChunk

The currently loading Chunk.

List<MediaChunk> queue

The queue of buffered MediaChunks.

Returns
boolean

Whether the ongoing load of loadingChunk should be canceled.

updateManifest

public void updateManifest(DashManifest newManifest, int newPeriodIndex)

Updates the manifest.

Parameters
DashManifest newManifest

The new manifest.

int newPeriodIndex

The index of the period covered by newManifest.

updateTrackSelection

public void updateTrackSelection(ExoTrackSelection trackSelection)

Updates the track selection.

Parameters
ExoTrackSelection trackSelection

The new track selection instance. Must be equivalent to the previous one.

Protected methods

newInitializationChunk

@RequiresNonNull(value = "#1.chunkExtractor")
protected Chunk newInitializationChunk(
    DefaultDashChunkSource.RepresentationHolder representationHolder,
    DataSource dataSource,
    Format trackFormat,
    @C.SelectionReason int trackSelectionReason,
    @Nullable Object trackSelectionData,
    @Nullable RangedUri initializationUri,
    @Nullable RangedUri indexUri,
    @Nullable CmcdData.Factory cmcdDataFactory
)

Creates a new Chunk for initialization.

Parameters
DefaultDashChunkSource.RepresentationHolder representationHolder

The Representation holder for initialization.

DataSource dataSource

The source from which the data should be loaded.

Format trackFormat

The format of the track to which this chunk belongs.

@C.SelectionReason int trackSelectionReason

One of the selection reasons.

@Nullable Object trackSelectionData

Additional data related to track selection.

@Nullable RangedUri initializationUri

The URI pointing to initialization data. Can be null if indexUri is not null.

@Nullable RangedUri indexUri

The URI pointing to index data. Can be null if initializationUri is not null.

@Nullable CmcdData.Factory cmcdDataFactory

The CmcdData.Factory for generating CMCD data.

newMediaChunk

protected Chunk newMediaChunk(
    DefaultDashChunkSource.RepresentationHolder representationHolder,
    DataSource dataSource,
    @C.TrackType int trackType,
    Format trackFormat,
    @C.SelectionReason int trackSelectionReason,
    @Nullable Object trackSelectionData,
    long firstSegmentNum,
    int maxSegmentCount,
    long seekTimeUs,
    long nowPeriodTimeUs,
    @Nullable CmcdData.Factory cmcdDataFactory
)