# BaseDataSource

Artifact: [androidx.media3:media3-datasource](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/datasource/BaseDataSource.java+class:androidx.media3.datasource.BaseDataSource)

*** ** * ** ***


```
@UnstableApi
public abstract class BaseDataSource implements DataSource
```

<br />

Known direct subclasses [AssetDataSource](https://developer.android.com/reference/androidx/media3/datasource/AssetDataSource), [ByteArrayDataSource](https://developer.android.com/reference/androidx/media3/datasource/ByteArrayDataSource), [ContentDataSource](https://developer.android.com/reference/androidx/media3/datasource/ContentDataSource), [CronetDataSource](https://developer.android.com/reference/androidx/media3/datasource/cronet/CronetDataSource), [DataSchemeDataSource](https://developer.android.com/reference/androidx/media3/datasource/DataSchemeDataSource), [DefaultHttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource), [FakeDataSource](https://developer.android.com/reference/androidx/media3/test/utils/FakeDataSource), [FileDataSource](https://developer.android.com/reference/androidx/media3/datasource/FileDataSource), [FileDescriptorDataSource](https://developer.android.com/reference/androidx/media3/datasource/FileDescriptorDataSource), [HttpEngineDataSource](https://developer.android.com/reference/androidx/media3/datasource/HttpEngineDataSource), [KtorDataSource](https://developer.android.com/reference/androidx/media3/datasource/ktor/KtorDataSource), [MediaDataSourceAdapter](https://developer.android.com/reference/androidx/media3/datasource/MediaDataSourceAdapter), [OkHttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/okhttp/OkHttpDataSource), [RawResourceDataSource](https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource), [RtmpDataSource](https://developer.android.com/reference/androidx/media3/datasource/rtmp/RtmpDataSource), [UdpDataSource](https://developer.android.com/reference/androidx/media3/datasource/UdpDataSource)

|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/AssetDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a local asset. |
| `https://developer.android.com/reference/androidx/media3/datasource/ByteArrayDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a byte array. |
| `https://developer.android.com/reference/androidx/media3/datasource/ContentDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a content URI. |
| `https://developer.android.com/reference/androidx/media3/datasource/cronet/CronetDataSource` | DataSource without intermediate buffer based on Cronet API set using UrlRequest. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSchemeDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading data URLs, as defined by RFC 2397. |
| `https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource` | An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that uses Android's `https://developer.android.com/reference/java/net/HttpURLConnection.html`. |
| `https://developer.android.com/reference/androidx/media3/test/utils/FakeDataSource` | A fake `https://developer.android.com/reference/androidx/media3/datasource/DataSource` capable of simulating various scenarios. |
| `https://developer.android.com/reference/androidx/media3/datasource/FileDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading local files. |
| `https://developer.android.com/reference/androidx/media3/datasource/FileDescriptorDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a `https://developer.android.com/reference/java/io/FileDescriptor.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/HttpEngineDataSource` | DataSource without intermediate buffer based on `https://developer.android.com/reference/android/net/http/HttpEngine.html` set using `https://developer.android.com/reference/android/net/http/UrlRequest.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/ktor/KtorDataSource` | An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that delegates to Ktor's `https://api.ktor.io/ktor-client-core/io.ktor.client/-http-client/index.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/MediaDataSourceAdapter` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from a `https://developer.android.com/reference/android/media/MediaDataSource.html`. |
| `https://developer.android.com/reference/androidx/media3/datasource/okhttp/OkHttpDataSource` | An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that delegates to Square's Call.Factory. |
| `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource` | A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading a raw resource. |
| `https://developer.android.com/reference/androidx/media3/datasource/rtmp/RtmpDataSource` | A Real-Time Messaging Protocol (RTMP) `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |
| `https://developer.android.com/reference/androidx/media3/datasource/UdpDataSource` | A UDP `https://developer.android.com/reference/androidx/media3/datasource/DataSource`. |

*** ** * ** ***

Base `https://developer.android.com/reference/androidx/media3/datasource/DataSource` implementation to keep a list of `https://developer.android.com/reference/androidx/media3/datasource/TransferListener`s.

Subclasses must call `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferInitializing(androidx.media3.datasource.DataSpec)`, `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferStarted(androidx.media3.datasource.DataSpec)`, `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#bytesTransferred(int)`, and `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferEnded()` to inform listeners of data transfers.

## Summary

| ### Protected constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#BaseDataSource(boolean)(boolean isNetwork)` Creates base data source. |

| ### Public methods |
|---|---|
| `final void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#addTransferListener(androidx.media3.datasource.TransferListener)(https://developer.android.com/reference/androidx/media3/datasource/TransferListener transferListener)` Adds a `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` to listen to data transfers. |

| ### Protected methods |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#bytesTransferred(int)(int bytesTransferred)` Notifies listeners that bytes were transferred. |
| `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferEnded()()` Notifies listeners that a transfer ended. |
| `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferInitializing(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` is being initialized. |
| `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferStarted(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` started. |

### Inherited methods

From [androidx.media3.common.DataReader](https://developer.android.com/reference/androidx/media3/common/DataReader) `abstract int` `https://developer.android.com/reference/androidx/media3/common/DataReader#read(byte[],int,int)(byte[] buffer, int offset, int length)`

Reads up to `length` bytes of data from the input.
From [androidx.media3.datasource.DataSource](https://developer.android.com/reference/androidx/media3/datasource/DataSource) `abstract void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/datasource/DataSource#close()()`

Closes the source.
`https://developer.android.com/reference/java/util/Map.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/java/lang/String.html>>` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/datasource/DataSource#getResponseHeaders()()`

When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call.
`abstract @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/net/Uri.html` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/datasource/DataSource#getUri()()`

When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read.
`abstract long` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)`

Opens the source to read the specified data.

## Protected constructors

### BaseDataSource

```
protected BaseDataSource(boolean isNetwork)
```

Creates base data source.

| Parameters |
|---|---|
| `boolean isNetwork` | Whether the data source loads data through a network. |

## Public methods

### addTransferListener

```
@UnstableApi
public final void addTransferListener(TransferListener transferListener)
```

Adds a `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` to listen to data transfers. This method is not thread-safe.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/TransferListener transferListener` | A `https://developer.android.com/reference/androidx/media3/datasource/TransferListener`. |

## Protected methods

### bytesTransferred

```
protected final void bytesTransferred(int bytesTransferred)
```

Notifies listeners that bytes were transferred.

| Parameters |
|---|---|
| `int bytesTransferred` | The number of bytes transferred since the previous call to this method (or if the first call, since the transfer was started). |

### transferEnded

```
protected final void transferEnded()
```

Notifies listeners that a transfer ended.

### transferInitializing

```
protected final void transferInitializing(DataSpec dataSpec)
```

Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` is being initialized.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` describing the data for initializing transfer. |

### transferStarted

```
protected final void transferStarted(DataSpec dataSpec)
```

Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` started.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` describing the data being transferred. |