Class HlsInterstitialAdLoader

java.lang.Object
com.castlabs.android.adverts.ServerAdLoader
com.castlabs.android.adverts.HlsInterstitialAdLoader
All Implemented Interfaces:
AdLoader

public class HlsInterstitialAdLoader extends ServerAdLoader
AdLoader implementation for handling HLS interstitial ads using ExoPlayer's HlsInterstitialMediaSource. This class manages ad scheduling, playback state, and ad group tracking for HLS streams.
  • Constructor Details

    • HlsInterstitialAdLoader

      public HlsInterstitialAdLoader()
      Default constructor for HlsInterstitialAdLoader.
  • Method Details

    • setPlayerController

      public void setPlayerController(@Nullable PlayerController playerController)
      Description copied from interface: AdLoader
      Set the active PlayerController instance or null if there is no active PlayerController or it is about to be released
      Specified by:
      setPlayerController in interface AdLoader
      Overrides:
      setPlayerController in class ServerAdLoader
      Parameters:
      playerController - The PlayerController instance or null
    • getCurrentAd

      @Nullable public Ad getCurrentAd()
      Description copied from interface: AdLoader
      Get the currently loaded and prepared for playing Ad
      Returns:
      The current Ad or null
    • release

      public void release()
      Description copied from interface: AdLoader
      Release any unused resources
      Specified by:
      release in interface AdLoader
      Overrides:
      release in class ServerAdLoader
    • onSetPosition

      public long onSetPosition(long newPositionUs)
      Description copied from interface: AdLoader
      Called just before the PlayerController start seeking or setting a new position. Can be used when the new position has to be adjusted by the AdLoader implementation 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

      public void onPlayerStateChanged(boolean playWhenReady, int playbackState)
      Description copied from interface: AdLoader
      Called when the player state is changed
      Parameters:
      playWhenReady - Play when ready flag
      playbackState - Playback state
    • onPositionDiscontinuity

      public void onPositionDiscontinuity(int reason)
      Description copied from interface: AdLoader
      Called when the playback discontinuity occurs
      Parameters:
      reason - The reason for discontinuity
    • scheduleAd

      public void scheduleAd(@NonNull AdRequest adRequest)
      Description copied from interface: AdLoader
      Start loading an AdRequest. This may be also called during playback. Support for on-request ad scheduling depends on the AdLoader implementation.
      Specified by:
      scheduleAd in interface AdLoader
      Overrides:
      scheduleAd in class ServerAdLoader
      Parameters:
      adRequest - The ad request to perform.
    • onContentMediaSource

      public void onContentMediaSource(@NonNull PlayerConfig playerConfig, @NonNull com.google.android.exoplayer2.source.MediaSource mediaSource)
      Description copied from interface: AdLoader
      Notifies the loader of a content MediaSource that 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 one PlayerConfig can 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; AdLoader.onContentMediaSourceReleased(PlayerConfig, MediaSource) reports the retirement of each one.
      Specified by:
      onContentMediaSource in interface AdLoader
      Overrides:
      onContentMediaSource in class ServerAdLoader
      Parameters:
      playerConfig - The PlayerConfig associated with the media source.
      mediaSource - The content media source that will be prepared.
    • onContentMediaSourceReleased

      public void onContentMediaSourceReleased(@NonNull PlayerConfig playerConfig, @NonNull com.google.android.exoplayer2.source.MediaSource mediaSource)
      Description copied from interface: AdLoader
      Notifies the loader that a content MediaSource previously reported through AdLoader.onContentMediaSource(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 through AdLoader.onContentMediaSource(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:
      
       if (sources.get(playerConfig) == mediaSource) {
           sources.remove(playerConfig);
       }
       
      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 through AdLoader.setPlayerController(PlayerController) and AdLoader.release(), and any remaining per-configuration state must be dropped there.
      Parameters:
      playerConfig - The PlayerConfig the media source was built for. The same instance that was passed to AdLoader.onContentMediaSource(PlayerConfig, MediaSource).
      mediaSource - The content media source that has been retired.
    • getAdApi

      @Nullable public AdApi getAdApi()
      Description copied from interface: AdLoader
      Get an AdApi to issue custom operations to the ad provider
      Returns:
      the AdApi
    • getAdPositionMs

      public long getAdPositionMs(@NonNull Ad ad, @NonNull com.google.android.exoplayer2.ExoPlayer player)
      Description copied from interface: AdLoader
      Returns the position of the provided Ad in milliseconds relative to the window that is currently playing (i.e. the media period exposed by Player.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.