Package com.google.android.exoplayer2.ext.okhttp

## Class OkHttpDataSource

- java.lang.Object
- - com.google.android.exoplayer2.upstream.BaseDataSource
  - - com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource

- All Implemented Interfaces:
    `DataReader`, `DataSource`, `HttpDataSource`

      public class OkHttpDataSource
      extends BaseDataSource
      implements HttpDataSource

  An `HttpDataSource` that delegates to Square's `Call.Factory`.

  Note: HTTP request headers will be set using all parameters passed via (in order of decreasing priority) the `dataSpec`, `setRequestProperty(java.lang.String, java.lang.String)` and the default parameters used to construct the instance.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `OkHttpDataSource.Factory` | `DataSource.Factory` for `OkHttpDataSource` instances.

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.upstream.HttpDataSource

      `HttpDataSource.BaseFactory, HttpDataSource.CleartextNotPermittedException, HttpDataSource.HttpDataSourceException, HttpDataSource.InvalidContentTypeException, HttpDataSource.InvalidResponseCodeException, HttpDataSource.RequestProperties`

  - ### Field Summary

    - ### Fields inherited from interface com.google.android.exoplayer2.upstream.HttpDataSource

      `REJECT_PAYWALL_TYPES`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `OkHttpDataSource​(okhttp3.Call.Factory callFactory)` | Deprecated. Use `OkHttpDataSource.Factory` instead.
    `OkHttpDataSource​(okhttp3.Call.Factory callFactory, String userAgent)` | Deprecated. Use `OkHttpDataSource.Factory` instead.
    `OkHttpDataSource​(okhttp3.Call.Factory callFactory, String userAgent, okhttp3.CacheControl cacheControl, HttpDataSource.RequestProperties defaultRequestProperties)` | Deprecated. Use `OkHttpDataSource.Factory` instead.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `clearAllRequestProperties()` | Clears all request headers that were set by `HttpDataSource.setRequestProperty(String, String)`.
    `void` | `clearRequestProperty​(String name)` | Clears the value of a request header.
    `void` | `close()` | Closes the source.
    `int` | `getResponseCode()` | When the source is open, returns the HTTP response status code associated with the last `HttpDataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` call.
    `Map<String,​List<String>>` | `getResponseHeaders()` | When the source is open, returns the response headers associated with the last `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` call.
    `Uri` | `getUri()` | When the source is open, returns the `Uri` from which data is being read.
    `long` | `open​(DataSpec dataSpec)` | Opens the source to read the specified data.
    `int` | `read​(byte[] buffer, int offset, int readLength)` | Reads up to `length` bytes of data from the input.
    `void` | `setContentTypePredicate​(Predicate<String> contentTypePredicate)` | Deprecated. Use `OkHttpDataSource.Factory.setContentTypePredicate(Predicate)` instead.
    `void` | `setRequestProperty​(String name, String value)` | Sets the value of a request header.

    - ### Methods inherited from class com.google.android.exoplayer2.upstream.BaseDataSource

      `addTransferListener, bytesTransferred, transferEnded, transferInitializing, transferStarted`

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

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

    - ### Methods inherited from interface com.google.android.exoplayer2.upstream.DataSource

      `addTransferListener`

- - ### Constructor Detail

    - #### OkHttpDataSource

          @Deprecated
          public OkHttpDataSource​(okhttp3.Call.Factory callFactory)

      Deprecated.
      Use `OkHttpDataSource.Factory` instead.

    - #### OkHttpDataSource

          @Deprecated
          public OkHttpDataSource​(okhttp3.Call.Factory callFactory,
                                  @Nullable
                                  String userAgent)

      Deprecated.
      Use `OkHttpDataSource.Factory` instead.

    - #### OkHttpDataSource

          @Deprecated
          public OkHttpDataSource​(okhttp3.Call.Factory callFactory,
                                  @Nullable
                                  String userAgent,
                                  @Nullable
                                  okhttp3.CacheControl cacheControl,
                                  @Nullable
                                  HttpDataSource.RequestProperties defaultRequestProperties)

      Deprecated.
      Use `OkHttpDataSource.Factory` instead.

  - ### Method Detail

    - #### setContentTypePredicate

          @Deprecated
          public void setContentTypePredicate​(@Nullable
                                              Predicate<String> contentTypePredicate)

      Deprecated.
      Use `OkHttpDataSource.Factory.setContentTypePredicate(Predicate)` instead.

    - #### getUri

          @Nullable
          public Uri getUri()

      Description copied from interface: `DataSource`
      When the source is open, returns the `Uri` from which data is being read. The returned `Uri` will be identical to the one passed `DataSource.open(DataSpec)` in the `DataSpec` unless redirection has occurred. If redirection has occurred, the `Uri` after redirection is returned.
      Specified by:
        `getUri` in interface `DataSource`
      Returns:
        The `Uri` from which data is being read, or null if the source is not open.

    - #### getResponseCode

          public int getResponseCode()

      Description copied from interface: `HttpDataSource`
      When the source is open, returns the HTTP response status code associated with the last `HttpDataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` call. Otherwise, returns a negative value.
      Specified by:
        `getResponseCode` in interface `HttpDataSource`

    - #### getResponseHeaders

          public Map<String,​List<String>> getResponseHeaders()

      Description copied from interface: `DataSource`
      When the source is open, returns the response headers associated with the last `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` call. Otherwise, returns an empty map.

      Key look-up in the returned map is case-insensitive.

      Specified by:
        `getResponseHeaders` in interface `DataSource`
      Specified by:
        `getResponseHeaders` in interface `HttpDataSource`

    - #### setRequestProperty

          public void setRequestProperty​(String name,
                                         String value)

      Description copied from interface: `HttpDataSource`
      Sets the value of a request header. The value will be used for subsequent connections established by the source.

      Note: If the same header is set as a default parameter in the `HttpDataSource.Factory`, then the header value set with this method should be preferred when connecting with the data source. See `HttpDataSource.open(com.google.android.exoplayer2.upstream.DataSpec)`.

      Specified by:
        `setRequestProperty` in interface `HttpDataSource`
      Parameters:
        `name` - The name of the header field.
        `value` - The value of the field.

    - #### clearRequestProperty

          public void clearRequestProperty​(String name)

      Description copied from interface: `HttpDataSource`
      Clears the value of a request header. The change will apply to subsequent connections established by the source.
      Specified by:
        `clearRequestProperty` in interface `HttpDataSource`
      Parameters:
        `name` - The name of the header field.

    - #### clearAllRequestProperties

          public void clearAllRequestProperties()

      Description copied from interface: `HttpDataSource`
      Clears all request headers that were set by `HttpDataSource.setRequestProperty(String, String)`.
      Specified by:
        `clearAllRequestProperties` in interface `HttpDataSource`

    - #### open

          public long open​(DataSpec dataSpec)
                    throws HttpDataSource.HttpDataSourceException

      Description copied from interface: `HttpDataSource`
      Opens the source to read the specified data.

      Note: `HttpDataSource` implementations are advised to set request headers passed via (in order of decreasing priority) the `dataSpec`, `HttpDataSource.setRequestProperty(java.lang.String, java.lang.String)` and the default parameters set in the `HttpDataSource.Factory`.

      Specified by:
        `open` in interface `DataSource`
      Specified by:
        `open` in interface `HttpDataSource`
      Parameters:
        `dataSpec` - Defines the data to be read.
      Returns:
        The number of bytes that can be read from the opened source. For unbounded requests (i.e., requests where `DataSpec.length` equals `C.LENGTH_UNSET`) this value is the resolved length of the request, or `C.LENGTH_UNSET` if the length is still unresolved. For all other requests, the value returned will be equal to the request's `DataSpec.length`.
      Throws:
        `HttpDataSource.HttpDataSourceException`

    - #### read

          public int read​(byte[] buffer,
                          int offset,
                          int readLength)
                   throws HttpDataSource.HttpDataSourceException

      Description copied from interface: `DataReader`
      Reads up to `length` bytes of data from the input.

      If `readLength` is zero then 0 is returned. Otherwise, if no data is available because the end of the opened range has been reached, then `C.RESULT_END_OF_INPUT` is returned. Otherwise, the call will block until at least one byte of data has been read and the number of bytes read is returned.

      Specified by:
        `read` in interface `DataReader`
      Specified by:
        `read` in interface `HttpDataSource`
      Parameters:
        `buffer` - A target array into which data should be written.
        `offset` - The offset into the target array at which to write.
        `readLength` - The maximum number of bytes to read from the input.
      Returns:
        The number of bytes read, or `C.RESULT_END_OF_INPUT` if the input has ended. This may be less than `length` because the end of the input (or available data) was reached, the method was interrupted, or the operation was aborted early for another reason.
      Throws:
        `HttpDataSource.HttpDataSourceException`

    - #### close

          public void close()
                     throws HttpDataSource.HttpDataSourceException

      Description copied from interface: `DataSource`
      Closes the source. This method must be called even if the corresponding call to `DataSource.open(DataSpec)` threw an `IOException`.
      Specified by:
        `close` in interface `DataSource`
      Specified by:
        `close` in interface `HttpDataSource`
      Throws:
        `HttpDataSource.HttpDataSourceException`