Package com.castlabs.android.player

# Class IPTVPlayerPlugin

java.lang.Object
com.castlabs.android.player.IPTVPlayerPlugin

All Implemented Interfaces:
  `PlayerPlugin`

public class IPTVPlayerPlugin extends Object implements PlayerPlugin
A player plugin implementation for IPTV content. This plugin handles the creation and configuration of media sources and renderers for IPTV streams, including support for CAS (Conditional Access System) and DRM.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from interface com.castlabs.android.player.PlayerPlugin

  `PlayerPlugin.DrmInitDataProvider<T extends com.google.android.exoplayer2.offline.FilterableManifest>`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IPTVPlayerPlugin()`
  Creates a new IPTV player plugin with default settings.
  `IPTVPlayerPlugin(boolean playsClearWithExo)`
  Creates a new IPTV player plugin with the specified clear playback mode.
  `IPTVPlayerPlugin(com.google.android.exoplayer2.analytics.IptvAnalyticsListener.EventDispatcher dispatcher)`
  Creates a new IPTV player plugin with the specified event dispatcher.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `PlayerPlugin.DrmInitDataProvider`
  `createDrmInitDataProvider(ManifestModifier manifestModifier)`
  Creates a `PlayerPlugin.DrmInitDataProvider` instance.
  `com.google.android.exoplayer2.source.MediaSource`
  `createMediaSource(PlayerConfig config, boolean attachInitialPositionProvider, PlayerController playerController)`
  Create the content media source based on the supplied path and the `PlayerController`
  `List<TrackRendererPlugin.TrackRendererContainer>`
  `createRendererContainers(PlayerController playerController, DrmConfiguration drmConfiguration)`
  Create the list of renderer containers based on the supplied `DrmConfiguration` and `PlayerController`
  `com.google.android.exoplayer2.RendererCapabilities[]`
  `getRendererCapabilities(Context context, DrmConfiguration drmConfiguration)`
  Retrieve array of supported RendererCapabilities.
  `boolean`
  `isFormatSupported(int format, DrmConfiguration configuration)`
  Check if this plugin can create a player for the given content format and DRM configuration.
  `void`
  `setDiscontiniuityThreshold(long discontinuityThreshold)`
  Sets the discontinuity threshold for stream synchronization.
  `void`
  `setDispatcher(com.google.android.exoplayer2.analytics.IptvAnalyticsListener.EventDispatcher dispatcher)`
  Sets the event dispatcher for analytics events.
  `void`
  `setDrmSystemInformation(int drmSystem, String licenseUrl)`
  Sets DRM System and License URL used to generate PSSH data for License requests
  `void`
  `setIgnoreDataTillVideoKeyframe(boolean ignoreDataTillVideoKeyframe)`
  Sets whether to ignore data until a video keyframe is received.
  `void`
  `setRtpQueueSizeInPackets(int rtpQueueSizeInPackets)`
  Sets the RTP queue size in packets.
  `void`
  `setTransferListener(com.google.android.exoplayer2.upstream.TransferListener transferListener)`
  Sets the transfer listener for monitoring data transfer events.

  ### Methods inherited from class java.lang.Object

  `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface com.castlabs.android.player.PlayerPlugin

  `createDrmLicenseManagers, setDrmLicenseManagers`

- ## Constructor Details

  - ### IPTVPlayerPlugin

    public IPTVPlayerPlugin(boolean playsClearWithExo)
    Creates a new IPTV player plugin with the specified clear playback mode.
    Parameters:
      `playsClearWithExo` - Whether to use ExoPlayer for clear content playback

  - ### IPTVPlayerPlugin

    public IPTVPlayerPlugin()
    Creates a new IPTV player plugin with default settings.

  - ### IPTVPlayerPlugin

    public IPTVPlayerPlugin(com.google.android.exoplayer2.analytics.IptvAnalyticsListener.EventDispatcher dispatcher)
    Creates a new IPTV player plugin with the specified event dispatcher.
    Parameters:
      `dispatcher` - The event dispatcher to use for analytics events

- ## Method Details

  - ### setDispatcher

    public void setDispatcher(com.google.android.exoplayer2.analytics.IptvAnalyticsListener.EventDispatcher dispatcher)
    Sets the event dispatcher for analytics events.
    Parameters:
      `dispatcher` - The event dispatcher to use

  - ### setRtpQueueSizeInPackets

    public void setRtpQueueSizeInPackets(int rtpQueueSizeInPackets)
    Sets the RTP queue size in packets.
    Parameters:
      `rtpQueueSizeInPackets` - The number of packets to buffer in the RTP queue

  - ### setDiscontiniuityThreshold

    public void setDiscontiniuityThreshold(long discontinuityThreshold)
    Sets the discontinuity threshold for stream synchronization.
    Parameters:
      `discontinuityThreshold` - The threshold in microseconds

  - ### setIgnoreDataTillVideoKeyframe

    public void setIgnoreDataTillVideoKeyframe(boolean ignoreDataTillVideoKeyframe)
    Sets whether to ignore data until a video keyframe is received.
    Parameters:
      `ignoreDataTillVideoKeyframe` - true to ignore data until keyframe, false otherwise

  - ### setDrmSystemInformation

    public void setDrmSystemInformation(int drmSystem, @NonNull String licenseUrl)
    Sets DRM System and License URL used to generate PSSH data for License requests
    Parameters:
      `drmSystem` - Either Widevine or Playready
      `licenseUrl` - License URL to be appended to pssh information

  - ### isFormatSupported

    public boolean isFormatSupported(int format, @Nullable DrmConfiguration configuration)
    Description copied from interface: `PlayerPlugin`
    Check if this plugin can create a player for the given content format and DRM configuration.
    Specified by:
      `isFormatSupported` in interface `PlayerPlugin`
    Parameters:
      `format` - the content format (one of `SdkConsts.CONTENT_TYPE_UNKNOWN`, `SdkConsts.CONTENT_TYPE_DASH`, `SdkConsts.CONTENT_TYPE_HLS`, `SdkConsts.CONTENT_TYPE_SMOOTHSTREAMING`, or `SdkConsts.CONTENT_TYPE_MP4`)
      `configuration` - the drm configuration
    Returns:
      true if this plugin can create a player for the given content format and drm configuration

  - ### getRendererCapabilities

    @Nullable public com.google.android.exoplayer2.RendererCapabilities[] getRendererCapabilities(@NonNull Context context, @Nullable DrmConfiguration drmConfiguration)
    Description copied from interface: `PlayerPlugin`
    Retrieve array of supported RendererCapabilities.
    Specified by:
      `getRendererCapabilities` in interface `PlayerPlugin`
    Parameters:
      `context` - the context
      `drmConfiguration` - the drm configuration
    Returns:
      RendererCapabilities array supported by the player plugin or null

  - ### createDrmInitDataProvider

    @Nullable public PlayerPlugin.DrmInitDataProvider createDrmInitDataProvider(ManifestModifier manifestModifier)
    Description copied from interface: `PlayerPlugin`
    Creates a `PlayerPlugin.DrmInitDataProvider` instance.
    Specified by:
      `createDrmInitDataProvider` in interface `PlayerPlugin`
    Parameters:
      `manifestModifier` - The manifest modifier.
    Returns:
      The created `PlayerPlugin.DrmInitDataProvider` or null if not supported.

  - ### createMediaSource

    @RequiresApi(api=19) @NonNull public com.google.android.exoplayer2.source.MediaSource createMediaSource(@NonNull PlayerConfig config, boolean attachInitialPositionProvider, @NonNull PlayerController playerController)
    Description copied from interface: `PlayerPlugin`
    Create the content media source based on the supplied path and the `PlayerController`
    Specified by:
      `createMediaSource` in interface `PlayerPlugin`
    Parameters:
      `config` - The `PlayerConfig`
      `attachInitialPositionProvider` - Whether toattach the initial position provider to the media source
      `playerController` - The `PlayerController` instance
    Returns:
      The media source

  - ### createRendererContainers

    @NonNull public List<TrackRendererPlugin.TrackRendererContainer> createRendererContainers(@NonNull PlayerController playerController, @Nullable DrmConfiguration drmConfiguration) throws CastlabsPlayerException
    Description copied from interface: `PlayerPlugin`
    Create the list of renderer containers based on the supplied `DrmConfiguration` and `PlayerController`
    Specified by:
      `createRendererContainers` in interface `PlayerPlugin`
    Parameters:
      `playerController` - The `PlayerController` instance
      `drmConfiguration` - The `DrmConfiguration`, might be `null`
    Returns:
      The list of renderer containers
    Throws:
      `CastlabsPlayerException` - when render containers can not be created or an error occurs

  - ### setTransferListener

    public void setTransferListener(com.google.android.exoplayer2.upstream.TransferListener transferListener)
    Sets the transfer listener for monitoring data transfer events.
    Parameters:
      `transferListener` - The transfer listener to use