Package com.castlabs.android.player
Class ExtendedTrackSelector
java.lang.Object
com.google.android.exoplayer2.trackselection.TrackSelector
com.castlabs.android.player.ExtendedTrackSelector
- All Implemented Interfaces:
DrmEventListener,VideoRendererListener,com.google.android.exoplayer2.RendererCapabilities.Listener
public class ExtendedTrackSelector
extends com.google.android.exoplayer2.trackselection.TrackSelector
implements DrmEventListener, VideoRendererListener, com.google.android.exoplayer2.RendererCapabilities.Listener
Extended Track Selector that provides advanced track selection capabilities.
It supports video, audio, and subtitle track selection with various filters,
preselection options, and configuration settings.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceInterface which receives Track Selection-related callbacks.classRepresents the selection of tracks and other related information for a media item.static interfaceProvides information about the player.Nested classes/interfaces inherited from class com.google.android.exoplayer2.trackselection.TrackSelector
com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener -
Constructor Summary
ConstructorsConstructorDescriptionExtendedTrackSelector(Point displaySize) Constructs an ExtendedTrackSelector with default video track selection factory.ExtendedTrackSelector(Point displaySize, com.castlabs.android.player.VideoTrackSelection.Factory videoTrackSelectionFactory, ExtendedTrackSelector.PlayerInfoProvider playerInfoProvider, ExtendedTrackSelector.EventListener eventListener, PlayerConfig playerConfig) Constructs an ExtendedTrackSelector. -
Method Summary
Modifier and TypeMethodDescriptioncreateModel(com.google.android.exoplayer2.trackselection.TrackSelectorResult trackSelectorResult) Creates a model selection from theTrackSelectorResultif it is of typeExtendedTrackSelector.ModelSelection.static voidextractDashThumbnails(com.google.android.exoplayer2.source.dash.manifest.DashManifest dashManifest, com.google.android.exoplayer2.Timeline timeline, PlayerModel playerModel) Extracts the embedded thumbnail tracks in the DASH manifest, and updates the provided player model with them.Get the preferred audio languageGet the preferred subtitles languagecom.google.android.exoplayer2.RendererCapabilities.ListenervoidonDroppedFrames(int count, long elapsedMs) Called to report the number of frames dropped by the renderer.voidCalled when keys are changed e.g.voidCalled when a key was loaded successfullyvoidonLicenseLoadError(int currentAttempt, int maxAttempts, DownloadException downloadException) Called when license load error occurredvoidonRenderedFirstFrame(Surface surface) Called when a frame is rendered for the first time since setting the surface, and when a frame is rendered for the first time since the renderer was reset.voidonRendererCapabilitiesChanged(com.google.android.exoplayer2.Renderer renderer) voidonSelectionActivated(Object info) voidonVideoDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) Called when a decoder is created.voidonVideoDecoderReleased(String decoderName, long releasedTimestampMs, long releaseDurationMs) Called when a decoder is released.voidonVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters counters) Called when the renderer is disabled.voidonVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters counters) Called when the renderer is enabled.voidonVideoInputFormatChanged(com.google.android.exoplayer2.Format format) Called when the format of the media being consumed by the renderer changes.voidreset()Resets the track selector to its initial state.com.google.android.exoplayer2.trackselection.TrackSelectorResultselectTracks(com.google.android.exoplayer2.RendererCapabilities[] rendererCapabilities, com.google.android.exoplayer2.source.TrackGroupArray trackGroups, com.google.android.exoplayer2.source.MediaSource.MediaPeriodId periodId, com.google.android.exoplayer2.Timeline timeline, Object manifest) voidsetAudioTrackIndexOverride(TrackIndexOverride trackIndexOverride) Set audio track indices override to be used during audio selectionvoidsetAudioTrackOverride(AudioTrack audioTrack) Set audio track override to be used during audio selectionvoidsetDisabledRendererIndices(List<Integer> disabledRendererIndices) Disable renderers by indices such that the tracks of the corresponding type will not be selectedvoidsetInitialVideoTrackGroupIndex(int initialVideoTrackGroupIndex) Set video track group index override to be used during video selection.voidsetPreselectedAudio(List<TrackIndexOverride> preselectedAudio) Preselect audio tracks available for the selectionvoidsetPreselectedSideloadedTracks(List<SubtitleTrack> sideloadedTracks) Preselect sideloaded subtitle tracks available for the selectionvoidsetPreselectedSubtitle(List<TrackIndexOverride> preselectedSubtitle) Preselect subtitle tracks available for the selectionvoidsetPreselectedVideoQualities(int[] preselectedVideoQualityIndices) Preselect video qualities available for the selectionvoidsetSubtitleTrackIndexOverride(TrackIndexOverride trackIndexOverride) Set subtitle track indices override to be used during subtitle selectionvoidsetSubtitleTrackOverride(SubtitleTrack subtitleTrack) Set subtitle track override to be used during subtitle selectionvoidsetVideoCodecFilter(int videoCodecFilter) Set the video codec filtering policy, one ofSdkConsts.VideoCodecFilter.voidsetVideoFilter(VideoFilterConfiguration contentFilter, VideoFilterConfiguration adsFilter) Sets the video filter for content and ads.voidsetVideoHdEnabled(boolean isHdPlaybackEnabled) Enable or disable the video HD tracks.voidsetVideoMaxResolution(int maxVideoWidth, int maxVideoHeight) Set the max video tracks resolution in pixels such that the video tracks with higher resolutions will not be available for the selectionvoidsetVideoTrackOverride(VideoTrack videoTrack) Set video track override to be used during video selectionMethods inherited from class com.google.android.exoplayer2.trackselection.TrackSelector
init, selectTracks
-
Constructor Details
-
ExtendedTrackSelector
Constructs an ExtendedTrackSelector with default video track selection factory.- Parameters:
displaySize- the display size in pixels to be used for video track selection
-
ExtendedTrackSelector
public ExtendedTrackSelector(@NonNull Point displaySize, @NonNull com.castlabs.android.player.VideoTrackSelection.Factory videoTrackSelectionFactory, @Nullable ExtendedTrackSelector.PlayerInfoProvider playerInfoProvider, @Nullable ExtendedTrackSelector.EventListener eventListener, @Nullable PlayerConfig playerConfig) Constructs an ExtendedTrackSelector.- Parameters:
displaySize- the display size in pixels to be used for video track selectionvideoTrackSelectionFactory- the factory for creating video track selectionsplayerInfoProvider- the provider for player information, can benulleventListener- the listener for track selection events, can benullplayerConfig- the player configuration, can benull
-
-
Method Details
-
reset
public void reset()Resets the track selector to its initial state. This clears all preselected tracks, filters, and configurations. -
setPreselectedVideoQualities
public void setPreselectedVideoQualities(@Nullable int[] preselectedVideoQualityIndices) Preselect video qualities available for the selection- Parameters:
preselectedVideoQualityIndices- video qualities indices ornullto reset previous values
-
setPreselectedAudio
Preselect audio tracks available for the selection- Parameters:
preselectedAudio- audio indices ornullto reset previous values
-
setPreselectedSubtitle
Preselect subtitle tracks available for the selection- Parameters:
preselectedSubtitle- audio indices ornullto reset previous values
-
setPreselectedSideloadedTracks
Preselect sideloaded subtitle tracks available for the selection- Parameters:
sideloadedTracks- audio indices ornullto reset previous values
-
setDisabledRendererIndices
Disable renderers by indices such that the tracks of the corresponding type will not be selected- Parameters:
disabledRendererIndices- renderers indices ornullto reset previous values
-
setVideoHdEnabled
public void setVideoHdEnabled(boolean isHdPlaybackEnabled) Enable or disable the video HD tracks. Note that this has to be called before the initial track selection. The current selection will not be invalidated.- Parameters:
isHdPlaybackEnabled-trueto enable otherwisefalse
-
setVideoMaxResolution
public void setVideoMaxResolution(int maxVideoWidth, int maxVideoHeight) Set the max video tracks resolution in pixels such that the video tracks with higher resolutions will not be available for the selection- Parameters:
maxVideoWidth- max video width in pixelsmaxVideoHeight- max video height in pixels
-
setVideoFilter
public void setVideoFilter(@NonNull VideoFilterConfiguration contentFilter, @Nullable VideoFilterConfiguration adsFilter) Sets the video filter for content and ads. In case theadsFilterisnullthen the content video filter is used for both content and ads tracks filtering- Parameters:
contentFilter- The video filter for contentadsFilter- The video filter for ads ornullto use content filter for ads
-
setVideoCodecFilter
public void setVideoCodecFilter(int videoCodecFilter) Set the video codec filtering policy, one ofSdkConsts.VideoCodecFilter. Note that this has to be called before the initial track selection. The current selection will not be invalidated.- Parameters:
videoCodecFilter- video codec filter, one ofSdkConsts.VideoCodecFilter
-
setVideoTrackOverride
Set video track override to be used during video selection- Parameters:
videoTrack- video track override
-
onLicenseKeysLoaded
public void onLicenseKeysLoaded()Description copied from interface:DrmEventListenerCalled when a key was loaded successfully- Specified by:
onLicenseKeysLoadedin interfaceDrmEventListener
-
onLicenseKeysChanged
public void onLicenseKeysChanged()Description copied from interface:DrmEventListenerCalled when keys are changed e.g. when license is renewed or expires- Specified by:
onLicenseKeysChangedin interfaceDrmEventListener
-
onLicenseLoadError
public void onLicenseLoadError(int currentAttempt, int maxAttempts, @Nullable DownloadException downloadException) Description copied from interface:DrmEventListenerCalled when license load error occurred- Specified by:
onLicenseLoadErrorin interfaceDrmEventListener- Parameters:
currentAttempt- The current loading attemptmaxAttempts- The max number of attemptsdownloadException- The download exception
-
onVideoEnabled
public void onVideoEnabled(com.google.android.exoplayer2.decoder.DecoderCounters counters) Description copied from interface:VideoRendererListenerCalled when the renderer is enabled.- Specified by:
onVideoEnabledin interfaceVideoRendererListener- Parameters:
counters-DecoderCountersthat will be updated by the renderer for as long as it remains enabled.
-
onVideoDecoderInitialized
public void onVideoDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) Description copied from interface:VideoRendererListenerCalled when a decoder is created.- Specified by:
onVideoDecoderInitializedin interfaceVideoRendererListener- Parameters:
decoderName- The decoder that was created.initializedTimestampMs-SystemClock.elapsedRealtime()when initialization finished.initializationDurationMs- The time taken to initialize the decoder in milliseconds.
-
onVideoDecoderReleased
public void onVideoDecoderReleased(@NonNull String decoderName, long releasedTimestampMs, long releaseDurationMs) Description copied from interface:VideoRendererListenerCalled when a decoder is released.- Specified by:
onVideoDecoderReleasedin interfaceVideoRendererListener- Parameters:
decoderName- The decoder that was released.releasedTimestampMs-SystemClock.elapsedRealtime()when release finished.releaseDurationMs- The time taken to release the decoder in milliseconds.
-
onVideoInputFormatChanged
public void onVideoInputFormatChanged(com.google.android.exoplayer2.Format format) Description copied from interface:VideoRendererListenerCalled when the format of the media being consumed by the renderer changes.- Specified by:
onVideoInputFormatChangedin interfaceVideoRendererListener- Parameters:
format- The new format.
-
onDroppedFrames
public void onDroppedFrames(int count, long elapsedMs) Description copied from interface:VideoRendererListenerCalled to report the number of frames dropped by the renderer. Dropped frames are reported whenever the renderer is stopped having dropped frames, and optionally, whenever the count reaches a specified threshold whilst the renderer is started.- Specified by:
onDroppedFramesin interfaceVideoRendererListener- Parameters:
count- The number of dropped frames.elapsedMs- The duration in milliseconds over which the frames were dropped. This duration is timed from when the renderer was started or from when dropped frames were last reported (whichever was more recent), and not from when the first of the reported drops occurred.
-
onRenderedFirstFrame
Description copied from interface:VideoRendererListenerCalled when a frame is rendered for the first time since setting the surface, and when a frame is rendered for the first time since the renderer was reset.- Specified by:
onRenderedFirstFramein interfaceVideoRendererListener- Parameters:
surface- TheSurfaceto which a first frame has been rendered, ornullif the renderer renders to something that isn't aSurface.
-
onVideoDisabled
public void onVideoDisabled(com.google.android.exoplayer2.decoder.DecoderCounters counters) Description copied from interface:VideoRendererListenerCalled when the renderer is disabled.- Specified by:
onVideoDisabledin interfaceVideoRendererListener- Parameters:
counters-DecoderCountersthat were updated by the renderer.
-
setInitialVideoTrackGroupIndex
public void setInitialVideoTrackGroupIndex(int initialVideoTrackGroupIndex) Set video track group index override to be used during video selection. Note that this has to be called before the initial track selection. The current selection will not be invalidated.- Parameters:
initialVideoTrackGroupIndex- video track group index override
-
setAudioTrackOverride
Set audio track override to be used during audio selection- Parameters:
audioTrack- audio track override
-
setAudioTrackIndexOverride
Set audio track indices override to be used during audio selection- Parameters:
trackIndexOverride- audio track indices override
-
setSubtitleTrackOverride
Set subtitle track override to be used during subtitle selection- Parameters:
subtitleTrack- subtitle track override
-
setSubtitleTrackIndexOverride
Set subtitle track indices override to be used during subtitle selection- Parameters:
trackIndexOverride- subtitle track indices override
-
getPreferredAudioLanguage
Get the preferred audio language- Returns:
- preferred audio language
-
getPreferredSubtitleLanguage
Get the preferred subtitles language- Returns:
- preferred subtitles language
-
getRendererCapabilitiesListener
@Nullable public com.google.android.exoplayer2.RendererCapabilities.Listener getRendererCapabilitiesListener()- Overrides:
getRendererCapabilitiesListenerin classcom.google.android.exoplayer2.trackselection.TrackSelector
-
onRendererCapabilitiesChanged
public void onRendererCapabilitiesChanged(@NonNull com.google.android.exoplayer2.Renderer renderer) - Specified by:
onRendererCapabilitiesChangedin interfacecom.google.android.exoplayer2.RendererCapabilities.Listener
-
selectTracks
@NonNull public com.google.android.exoplayer2.trackselection.TrackSelectorResult selectTracks(com.google.android.exoplayer2.RendererCapabilities[] rendererCapabilities, com.google.android.exoplayer2.source.TrackGroupArray trackGroups, com.google.android.exoplayer2.source.MediaSource.MediaPeriodId periodId, com.google.android.exoplayer2.Timeline timeline, Object manifest) throws com.google.android.exoplayer2.ExoPlaybackException - Specified by:
selectTracksin classcom.google.android.exoplayer2.trackselection.TrackSelector- Throws:
com.google.android.exoplayer2.ExoPlaybackException
-
onSelectionActivated
- Specified by:
onSelectionActivatedin classcom.google.android.exoplayer2.trackselection.TrackSelector
-
createModel
@Nullable public ExtendedTrackSelector.ModelSelection createModel(@NonNull com.google.android.exoplayer2.trackselection.TrackSelectorResult trackSelectorResult) Creates a model selection from theTrackSelectorResultif it is of typeExtendedTrackSelector.ModelSelection.- Parameters:
trackSelectorResult- the track selector result to create the model selection from- Returns:
- the created model selection or null if the info is not of type
ExtendedTrackSelector.ModelSelection
-
extractDashThumbnails
public static void extractDashThumbnails(com.google.android.exoplayer2.source.dash.manifest.DashManifest dashManifest, com.google.android.exoplayer2.Timeline timeline, PlayerModel playerModel) Extracts the embedded thumbnail tracks in the DASH manifest, and updates the provided player model with them.- Parameters:
dashManifest- the DASH manifest which contains the thumbnail tracks to extracttimeline- timeline representing provided manifestplayerModel- player model to update with thumbnail tracks
-