Package com.castlabs.android.adverts
Interface AdLoader
- All Known Implementing Classes:
HlsInterstitialAdLoader,ServerAdLoader
public interface AdLoader
The interface to provide SDK with the
Ad properties
The implementations are used by ClientAdProvider.createAdLoader(AdRequest)- Since:
- 4.2.0
-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescriptionvoidcreateMediaSource(Object adsId, PlayerConfig playerConfig, PlayerPlugin playerPlugin, AdLoader.Listener listener) Asynchronously createMediaSourceto playgetAdApi()Get anAdApito issue custom operations to the ad providerReturns ad UI containerlonggetAdPositionMs(Ad ad, com.google.android.exoplayer2.ExoPlayer player) Returns the position of the providedAdin milliseconds relative to the window that is currently playing (i.e.Get the currently loaded and prepared for playing Addefault voidonContentMediaSource(PlayerConfig playerConfig, com.google.android.exoplayer2.source.MediaSource mediaSource) Notifies the loader of a contentMediaSourcethat has just been built and will be used for playback.default voidonContentMediaSourceReleased(PlayerConfig playerConfig, com.google.android.exoplayer2.source.MediaSource mediaSource) Notifies the loader that a contentMediaSourcepreviously reported throughonContentMediaSource(PlayerConfig, MediaSource)has been retired: it is no longer mapped for its item and will never be prepared again.voidonPlayerStateChanged(boolean playWhenReady, int playbackState) Called when the player state is changedvoidonPositionDiscontinuity(@com.google.android.exoplayer2.Player.DiscontinuityReason int reason) Called when the playback discontinuity occurslongonSetPosition(long newPositionUs) Called just before thePlayerControllerstart seeking or setting a new position.voidrelease()Release any unused resourcesdefault booleanIndicates whether this loader needs to create its own media source (client-side ads) or whether it operates on the content media source prepared by the player (server-side ads).voidscheduleAd(AdRequest adRequest) Start loading anAdRequest.voidsetPlayerController(PlayerController playerController) Set the activePlayerControllerinstance ornullif there is no activePlayerControlleror it is about to be released
-
Method Details
-
getCurrentAd
Get the currently loaded and prepared for playing Ad- Returns:
- The current Ad or
null
-
getAdContainer
Returns ad UI container- Returns:
- ad UI container
-
setPlayerController
Set the activePlayerControllerinstance ornullif there is no activePlayerControlleror it is about to be released- Parameters:
playerController- ThePlayerControllerinstance ornull
-
release
void release()Release any unused resources -
requiresMediaSourceHook
default boolean requiresMediaSourceHook()Indicates whether this loader needs to create its own media source (client-side ads) or whether it operates on the content media source prepared by the player (server-side ads).- Returns:
trueif a media-source hook is required,falseotherwise.
-
createMediaSource
void createMediaSource(@NonNull Object adsId, @NonNull PlayerConfig playerConfig, @NonNull PlayerPlugin playerPlugin, @NonNull AdLoader.Listener listener) Asynchronously createMediaSourceto play- Parameters:
adsId- The unique to thisPlayerConfig's ads idplayerConfig- ThePlayerConfigplayerPlugin- ThePlayerPluginlistener- The listener callback to provide the createdMediaSource
-
onSetPosition
long onSetPosition(long newPositionUs) Called just before thePlayerControllerstart seeking or setting a new position. Can be used when the new position has to be adjusted by theAdLoaderimplementation e.g. to do ads snap back. If the adjustment is not needed then the provided position can simply be returned.- Parameters:
newPositionUs- The new position in microseconds- Returns:
- The adjusted position in microseconds
-
onPlayerStateChanged
void onPlayerStateChanged(boolean playWhenReady, int playbackState) Called when the player state is changed- Parameters:
playWhenReady- Play when ready flagplaybackState- Playback state
-
onPositionDiscontinuity
void onPositionDiscontinuity(@DiscontinuityReason @com.google.android.exoplayer2.Player.DiscontinuityReason int reason) Called when the playback discontinuity occurs- Parameters:
reason- The reason for discontinuity
-
scheduleAd
Start loading anAdRequest. This may be also called during playback. Support for on-request ad scheduling depends on the AdLoader implementation.- Parameters:
adRequest- The ad request to perform.
-
getAdApi
Get anAdApito issue custom operations to the ad provider- Returns:
- the
AdApi
-
getAdPositionMs
Returns the position of the providedAdin milliseconds relative to the window that is currently playing (i.e. the media period exposed byPlayer.getCurrentWindowIndex()). Implementations that operate on concatenated timelines must therefore normalize the ad offset to the active window instead of returning a global playlist position.- Parameters:
ad- The ad for which the position should be resolved.player- The player instance that provides the current window context.- Returns:
- The ad start position in milliseconds, relative to the currently playing window.
-
onContentMediaSource
default void onContentMediaSource(@NonNull PlayerConfig playerConfig, @NonNull com.google.android.exoplayer2.source.MediaSource mediaSource) Notifies the loader of a contentMediaSourcethat has just been built and will be used for playback. Called synchronously while the source is being created, before it is prepared, once per built source. A playlist rebuilds an item's media source whenever the item is evicted, refreshed, or removed and re-added, so onePlayerConfigcan produce a sequence of media sources over its lifetime and each one is reported here. State recorded against the configuration must therefore be keyed, or at least validated, by media-source instance;onContentMediaSourceReleased(PlayerConfig, MediaSource)reports the retirement of each one.- Parameters:
playerConfig- ThePlayerConfigassociated with the media source.mediaSource- The content media source that will be prepared.
-
onContentMediaSourceReleased
default void onContentMediaSourceReleased(@NonNull PlayerConfig playerConfig, @NonNull com.google.android.exoplayer2.source.MediaSource mediaSource) Notifies the loader that a contentMediaSourcepreviously reported throughonContentMediaSource(PlayerConfig, MediaSource)has been retired: it is no longer mapped for its item and will never be prepared again. The player may still be draining media periods created from it, so this is not a signal that its resources are already gone, only that no further playback will come from it. The retirement is reported after the replacement generation, if any, has been reported throughonContentMediaSource(PlayerConfig, MediaSource)for the same configuration. An implementation keeping per-configuration state must therefore compare instances before discarding it, rather than keying the discard on the configuration alone:
State belonging to the playlist item rather than to one media source — a server-side ad session, for instance — should not be discarded here, since it survives a generation replacement. Bulk teardown is not reported here. Releasing the player controller detaches the loader throughif (sources.get(playerConfig) == mediaSource) { sources.remove(playerConfig); }setPlayerController(PlayerController)andrelease(), and any remaining per-configuration state must be dropped there.- Parameters:
playerConfig- ThePlayerConfigthe media source was built for. The same instance that was passed toonContentMediaSource(PlayerConfig, MediaSource).mediaSource- The content media source that has been retired.
-