Class ExtendedDataSource

java.lang.Object
com.castlabs.android.network.ExtendedDataSource
All Implemented Interfaces:
com.google.android.exoplayer2.upstream.DataSource

public class ExtendedDataSource extends Object implements com.google.android.exoplayer2.upstream.DataSource
A DataSource that supports multiple URI schemes. The supported schemes are:

  • http(s): For fetching data over HTTP and HTTPS (e.g. https://www.something.com/media.mp4).
  • file: For fetching data from a local file (e.g. file:///path/to/media/media.mp4, or just /path/to/media/media.mp4 because the implementation assumes that a URI without a scheme is a local file URI).
  • asset: For fetching data from an asset in the application's apk (e.g. asset:///media.mp4).
  • content: For fetching data from a content URI (e.g. content://authority/path/123).

Instances of this class also expose the last accessed Uri using getLastUri().
  • Nested Class Summary

    Nested classes/interfaces inherited from interface com.google.android.exoplayer2.upstream.DataSource

    com.google.android.exoplayer2.upstream.DataSource.Factory
  • Constructor Summary

    Constructors
    Constructor
    Description
    ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, com.google.android.exoplayer2.upstream.HttpDataSource httpDataSource)
    Constructs a new instance, using a provided HttpDataSource for fetching remote data.
    ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, com.google.android.exoplayer2.upstream.HttpDataSource httpDataSource, PlayerController playerController)
    Constructs a new instance, using a provided HttpDataSource for fetching remote data.
    ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, String userAgent)
    Constructs a new instance.
    ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, String userAgent, boolean allowCrossProtocolRedirects, SSLSocketFactory sslSocketFactory)
    Constructs a new instance, optionally configured to follow cross-protocol redirects.
    ExtendedDataSource(Context context, String userAgent)
    Constructs a new instance.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addTransferListener(com.google.android.exoplayer2.upstream.TransferListener transferListener)
     
    void
     
    void
     
    void
     
     
    int
     
     
     
    long
    open(com.google.android.exoplayer2.upstream.DataSpec dataSpec)
     
    int
    read(byte[] buffer, int offset, int readLength)
     
    void
    setHeader(String name, String value)
     

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ExtendedDataSource

      public ExtendedDataSource(Context context, String userAgent)
      Constructs a new instance.

      The constructed instance will not follow cross-protocol redirects (i.e. redirects from HTTP to HTTPS or vice versa) when fetching remote data. Cross-protocol redirects can be enabled by using ExtendedDataSource(Context, TransferListener, String, boolean, SSLSocketFactory) and passing true as the final argument.

      Parameters:
      context - A context.
      userAgent - The User-Agent string that should be used when requesting remote data.
    • ExtendedDataSource

      public ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, String userAgent)
      Constructs a new instance.

      The constructed instance will not follow cross-protocol redirects (i.e. redirects from HTTP to HTTPS or vice versa) when fetching remote data. Cross-protocol redirects can be enabled by using ExtendedDataSource(Context, TransferListener, String, boolean, SSLSocketFactory) and passing true as the final argument.

      Parameters:
      context - A context.
      listener - An optional TransferListener.
      userAgent - The User-Agent string that should be used when requesting remote data.
    • ExtendedDataSource

      public ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, String userAgent, boolean allowCrossProtocolRedirects, @Nullable SSLSocketFactory sslSocketFactory)
      Constructs a new instance, optionally configured to follow cross-protocol redirects.
      Parameters:
      context - A context.
      listener - An optional TransferListener.
      userAgent - The User-Agent string that should be used when requesting remote data.
      allowCrossProtocolRedirects - Whether cross-protocol redirects (i.e. redirects from HTTP to HTTPS and vice versa) are enabled when fetching remote data..
    • ExtendedDataSource

      public ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, com.google.android.exoplayer2.upstream.HttpDataSource httpDataSource)
      Constructs a new instance, using a provided HttpDataSource for fetching remote data.
      Parameters:
      context - A context.
      listener - An optional TransferListener.
      httpDataSource - DataSource to use for non-file URIs.
    • ExtendedDataSource

      public ExtendedDataSource(Context context, com.google.android.exoplayer2.upstream.TransferListener listener, com.google.android.exoplayer2.upstream.HttpDataSource httpDataSource, @Nullable PlayerController playerController)
      Constructs a new instance, using a provided HttpDataSource for fetching remote data.
      Parameters:
      context - A context.
      listener - An optional TransferListener.
      httpDataSource - DataSource to use for non-file URIs.
      playerController - The player controller
  • Method Details

    • setHeader

      public void setHeader(String name, String value)
    • clearHeader

      public void clearHeader(String name)
    • clearAllHeaders

      public void clearAllHeaders()
    • getResponseHeaders

      public Map<String,List<String>> getResponseHeaders()
      Specified by:
      getResponseHeaders in interface com.google.android.exoplayer2.upstream.DataSource
    • getResponseCode

      public int getResponseCode()
      Specified by:
      getResponseCode in interface com.google.android.exoplayer2.upstream.DataSource
    • addTransferListener

      public void addTransferListener(com.google.android.exoplayer2.upstream.TransferListener transferListener)
      Specified by:
      addTransferListener in interface com.google.android.exoplayer2.upstream.DataSource
    • open

      public long open(com.google.android.exoplayer2.upstream.DataSpec dataSpec) throws IOException
      Specified by:
      open in interface com.google.android.exoplayer2.upstream.DataSource
      Throws:
      IOException
    • read

      public int read(byte[] buffer, int offset, int readLength) throws IOException
      Specified by:
      read in interface com.google.android.exoplayer2.upstream.DataSource
      Throws:
      IOException
    • getUri

      public Uri getUri()
      Specified by:
      getUri in interface com.google.android.exoplayer2.upstream.DataSource
    • getLastUri

      public Uri getLastUri()
      Returns:
      The last accessed Uri
    • close

      public void close() throws IOException
      Specified by:
      close in interface com.google.android.exoplayer2.upstream.DataSource
      Throws:
      IOException