Class ClippingMediaSource
- java.lang.Object
-
- com.google.android.exoplayer2.source.BaseMediaSource
-
- com.google.android.exoplayer2.source.CompositeMediaSource<Void>
-
- com.google.android.exoplayer2.source.ClippingMediaSource
-
- All Implemented Interfaces:
MediaSource
public final class ClippingMediaSource extends CompositeMediaSource<Void>
MediaSourcethat wraps a source and clips its timeline based on specified start/end positions. The wrapped source must consist of a single period.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classClippingMediaSource.IllegalClippingExceptionThrown when aClippingMediaSourcecannot clip its wrapped source.-
Nested classes/interfaces inherited from interface com.google.android.exoplayer2.source.MediaSource
MediaSource.MediaPeriodId, MediaSource.MediaSourceCaller
-
-
Constructor Summary
Constructors Constructor Description ClippingMediaSource(MediaSource mediaSource, long durationUs)Creates a new clipping source that wraps the specified source and provides samples from the default position for the specified duration.ClippingMediaSource(MediaSource mediaSource, long startPositionUs, long endPositionUs)Creates a new clipping source that wraps the specified source and provides samples between the specified start and end position.ClippingMediaSource(MediaSource mediaSource, long startPositionUs, long endPositionUs, boolean enableInitialDiscontinuity, boolean allowDynamicClippingUpdates, boolean relativeToDefaultPosition)Creates a new clipping source that wraps the specified source.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description MediaPeriodcreatePeriod(MediaSource.MediaPeriodId id, Allocator allocator, long startPositionUs)Returns a newMediaPeriodidentified byperiodId.MediaItemgetMediaItem()Returns theMediaItemwhose media is provided by the source.voidmaybeThrowSourceInfoRefreshError()Throws any pending error encountered while loading or refreshing source information.protected voidonChildSourceInfoRefreshed(Void id, MediaSource mediaSource, Timeline timeline)Called when the source info of a child source has been refreshed.protected voidprepareSourceInternal(TransferListener mediaTransferListener)Starts source preparation and enables the source, seeBaseMediaSource.prepareSource(MediaSourceCaller, TransferListener).voidreleasePeriod(MediaPeriod mediaPeriod)Releases the period.protected voidreleaseSourceInternal()Releases the source, seeBaseMediaSource.releaseSource(MediaSourceCaller).-
Methods inherited from class com.google.android.exoplayer2.source.CompositeMediaSource
disableChildSource, disableInternal, enableChildSource, enableInternal, getMediaPeriodIdForChildMediaPeriodId, getMediaTimeForChildMediaTime, getWindowIndexForChildWindowIndex, prepareChildSource, releaseChildSource
-
Methods inherited from class com.google.android.exoplayer2.source.BaseMediaSource
addDrmEventListener, addEventListener, createDrmEventDispatcher, createDrmEventDispatcher, createEventDispatcher, createEventDispatcher, createEventDispatcher, disable, enable, isEnabled, prepareSource, refreshSourceInfo, releaseSource, removeDrmEventListener, removeEventListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.google.android.exoplayer2.source.MediaSource
getInitialTimeline, isSingleWindow
-
-
-
-
Constructor Detail
-
ClippingMediaSource
public ClippingMediaSource(MediaSource mediaSource, long startPositionUs, long endPositionUs)
Creates a new clipping source that wraps the specified source and provides samples between the specified start and end position.- Parameters:
mediaSource- The single-period source to wrap.startPositionUs- The start position withinmediaSource's window at which to start providing samples, in microseconds.endPositionUs- The end position withinmediaSource's window at which to stop providing samples, in microseconds. SpecifyC.TIME_END_OF_SOURCEto provide samples from the specified start point up to the end of the source. Specifying a position that exceeds themediaSource's duration will also result in the end of the source not being clipped.
-
ClippingMediaSource
public ClippingMediaSource(MediaSource mediaSource, long durationUs)
Creates a new clipping source that wraps the specified source and provides samples from the default position for the specified duration.- Parameters:
mediaSource- The single-period source to wrap.durationUs- The duration from the default position in the window inmediaSource's timeline at which to stop providing samples. Specifying a duration that exceeds themediaSource's duration will result in the end of the source not being clipped.
-
ClippingMediaSource
public ClippingMediaSource(MediaSource mediaSource, long startPositionUs, long endPositionUs, boolean enableInitialDiscontinuity, boolean allowDynamicClippingUpdates, boolean relativeToDefaultPosition)
Creates a new clipping source that wraps the specified source.If the start point is guaranteed to be a key frame, pass
falsetoenableInitialPositionDiscontinuityto suppress an initial discontinuity when a period is first read from.For live streams, if the clipping positions should move with the live window, pass
truetoallowDynamicClippingUpdates. Otherwise, the live stream ends when the playback reachesendPositionUsin the last reported live window at the time a media period was created.- Parameters:
mediaSource- The single-period source to wrap.startPositionUs- The start position at which to start providing samples, in microseconds. IfrelativeToDefaultPositionisfalse, this position is relative to the start of the window inmediaSource's timeline. IfrelativeToDefaultPositionistrue, this position is relative to the default position in the window inmediaSource's timeline.endPositionUs- The end position at which to stop providing samples, in microseconds. SpecifyC.TIME_END_OF_SOURCEto provide samples from the specified start point up to the end of the source. Specifying a position that exceeds themediaSource's duration will also result in the end of the source not being clipped. IfrelativeToDefaultPositionisfalse, the specified position is relative to the start of the window inmediaSource's timeline. IfrelativeToDefaultPositionistrue, this position is relative to the default position in the window inmediaSource's timeline.enableInitialDiscontinuity- Whether the initial discontinuity should be enabled.allowDynamicClippingUpdates- Whether the clipping of active media periods moves with a live window. Iffalse, playback ends when it reachesendPositionUsin the last reported live window at the time a media period was created.relativeToDefaultPosition- WhetherstartPositionUsandendPositionUsare relative to the default position in the window inmediaSource's timeline.
-
-
Method Detail
-
getMediaItem
public MediaItem getMediaItem()
Description copied from interface:MediaSourceReturns theMediaItemwhose media is provided by the source.
-
prepareSourceInternal
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener)Description copied from class:BaseMediaSourceStarts source preparation and enables the source, seeBaseMediaSource.prepareSource(MediaSourceCaller, TransferListener). This method is called at most once until the next call toBaseMediaSource.releaseSourceInternal().- Overrides:
prepareSourceInternalin classCompositeMediaSource<Void>- Parameters:
mediaTransferListener- The transfer listener which should be informed of any media data transfers. May be null if no listener is available. Note that this listener should usually be only informed of transfers related to the media loads and not of auxiliary loads for manifests and other data.
-
maybeThrowSourceInfoRefreshError
public void maybeThrowSourceInfoRefreshError() throws IOExceptionDescription copied from interface:MediaSourceThrows any pending error encountered while loading or refreshing source information.Should not be called directly from application code.
Must only be called after
MediaSource.prepareSource(MediaSourceCaller, TransferListener).- Specified by:
maybeThrowSourceInfoRefreshErrorin interfaceMediaSource- Overrides:
maybeThrowSourceInfoRefreshErrorin classCompositeMediaSource<Void>- Throws:
IOException
-
createPeriod
public MediaPeriod createPeriod(MediaSource.MediaPeriodId id, Allocator allocator, long startPositionUs)
Description copied from interface:MediaSourceReturns a newMediaPeriodidentified byperiodId.Should not be called directly from application code.
Must only be called if the source is enabled.
- Parameters:
id- The identifier of the period.allocator- AnAllocatorfrom which to obtain media buffer allocations.startPositionUs- The expected start position, in microseconds.- Returns:
- A new
MediaPeriod.
-
releasePeriod
public void releasePeriod(MediaPeriod mediaPeriod)
Description copied from interface:MediaSourceReleases the period.Should not be called directly from application code.
- Parameters:
mediaPeriod- The period to release.
-
releaseSourceInternal
protected void releaseSourceInternal()
Description copied from class:BaseMediaSourceReleases the source, seeBaseMediaSource.releaseSource(MediaSourceCaller). This method is called exactly once after each call toBaseMediaSource.prepareSourceInternal(TransferListener).- Overrides:
releaseSourceInternalin classCompositeMediaSource<Void>
-
onChildSourceInfoRefreshed
protected void onChildSourceInfoRefreshed(Void id, MediaSource mediaSource, Timeline timeline)
Description copied from class:CompositeMediaSourceCalled when the source info of a child source has been refreshed.- Specified by:
onChildSourceInfoRefreshedin classCompositeMediaSource<Void>- Parameters:
id- The unique id used to prepare the child source.mediaSource- The child source whose source info has been refreshed.timeline- The timeline of the child source.
-
-