# KtorDataSource

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

*** ** * ** ***


```
@UnstableApi
class KtorDataSource : BaseDataSource, HttpDataSource
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.media3.datasource.BaseDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource) ||
|   | ↳ | [androidx.media3.datasource.ktor.KtorDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource) |

*** ** * ** ***

An `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` that delegates to Ktor's `https://api.ktor.io/ktor-client-core/io.ktor.client/-http-client/index.html`.

Note: HTTP request headers will be set using all parameters passed via (in order of decreasing priority) the `dataSpec`, `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#setRequestProperty(kotlin.String,kotlin.String)` and the default parameters used to construct the instance.

## Summary

| ### Nested types |
|---|
| `class https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource.Factory : https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory` `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource` instances. |

| ### Public functions |
|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#clearAllRequestProperties()()` Clears all request headers that were set by `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)`. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#clearRequestProperty(kotlin.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` Clears the value of a request header. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#close()()` Closes the source. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#getResponseCode()()` When the source is open, returns the HTTP response status code associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)` call. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>>` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#getResponseHeaders()()` When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call. |
| `open https://developer.android.com/reference/android/net/Uri.html?` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#getUri()()` When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#open(androidx.media3.datasource.DataSpec)(dataSpec: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)` Opens the source to read the specified data. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#read(kotlin.ByteArray,kotlin.Int,kotlin.Int)(buffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html, offset: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, length: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Reads up to `length` bytes of data from the input. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#setRequestProperty(kotlin.String,kotlin.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, value: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` Sets the value of a request header. |

| ### Public properties |
|---|---|
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#responseCode()` |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html>>` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#responseHeaders()` |
| `open https://developer.android.com/reference/android/net/Uri.html?` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource#uri()` |

### Inherited functions

From [androidx.media3.datasource.BaseDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource#addTransferListener(androidx.media3.datasource.TransferListener)(transferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener)` `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource#bytesTransferred(int)(bytesTransferred: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Notifies listeners that bytes were transferred.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource#transferEnded()()`

Notifies listeners that a transfer ended.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource#transferInitializing(androidx.media3.datasource.DataSpec)(dataSpec: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`

Notifies listeners that data transfer for the specified `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec` is being initialized.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/datasource/BaseDataSource#transferStarted(androidx.media3.datasource.DataSpec)(dataSpec: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`

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

## Public functions

### clearAllRequestProperties

```
open fun clearAllRequestProperties(): Unit
```

Clears all request headers that were set by `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)`.

### clearRequestProperty

```
open fun clearRequestProperty(name: String): Unit
```

Clears the value of a request header. The change will apply to subsequent connections established by the source.

| Parameters |
|---|---|
| `name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | The name of the header field. |

### close

```
open fun close(): Unit
```

Closes the source. This method must be called even if the corresponding call to `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` threw an `https://developer.android.com/reference/java/io/IOException.html`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs closing the source. |

### getResponseCode

```
open fun getResponseCode(): Int
```

When the source is open, returns the HTTP response status code associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)` call. Otherwise, returns a negative value.

### getResponseHeaders

```
open fun getResponseHeaders(): Map<String, List<String>>
```

When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call. Otherwise, returns an empty map.

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

### getUri

```
open fun getUri(): Uri?
```

When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read. The returned `https://developer.android.com/reference/android/net/Uri.html` will be identical to the one passed `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` in the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec` unless redirection has occurred. If redirection has occurred, the `https://developer.android.com/reference/android/net/Uri.html` after redirection is returned.

| Returns |
|---|---|
| `https://developer.android.com/reference/android/net/Uri.html?` | The `https://developer.android.com/reference/android/net/Uri.html` from which data is being read, or null if the source is not open. |

### open

```
open fun open(dataSpec: DataSpec): Long
```

Opens the source to read the specified data. If an `https://developer.android.com/reference/java/io/IOException.html` is thrown, callers must still call `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#close()` to ensure that any partial effects of the invocation are cleaned up.

The following edge case behaviors apply:

- If the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec#position()` is within the resource, but the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec#length()` extends beyond the end of the resource, then `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` will succeed and data from the requested position to the end of the resource will be made available through `https://developer.android.com/reference/kotlin/androidx/media3/common/DataReader#read(byte[],int,int)`.
- If the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec#position()` is equal to the length of the resource, then `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` will succeed, and `https://developer.android.com/reference/kotlin/androidx/media3/common/DataReader#read(byte[],int,int)` will immediately return `https://developer.android.com/reference/kotlin/androidx/media3/common/C#RESULT_END_OF_INPUT()`.
- If the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec#position()` is greater than the length of the resource, then `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` will throw an `https://developer.android.com/reference/java/io/IOException.html` for which `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSourceException#isCausedByPositionOutOfRange(java.io.IOException)` will be `true`.

| Parameters |
|---|---|
| `dataSpec: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec` | Defines the data to be read. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The number of bytes that can be read from the opened source. For unbounded requests (i.e., requests where `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec#length()` equals `https://developer.android.com/reference/kotlin/androidx/media3/common/C#LENGTH_UNSET()`) this value is the resolved length of the request, or `https://developer.android.com/reference/kotlin/androidx/media3/common/C#LENGTH_UNSET()` if the length is still unresolved. For all other requests, the value returned will be equal to the request's `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec#length()`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs opening the source. `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSourceException` can be thrown or used as a cause of the thrown exception to specify the reason of the error. |

### read

```
open fun read(buffer: ByteArray, offset: Int, length: Int): Int
```

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 `https://developer.android.com/reference/kotlin/androidx/media3/common/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.

| Parameters |
|---|---|
| `buffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html` | A target array into which data should be written. |
| `offset: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The offset into the target array at which to write. |
| `length: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The maximum number of bytes to read from the input. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The number of bytes read, or `https://developer.android.com/reference/kotlin/androidx/media3/common/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 |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs reading from the input. |

### setRequestProperty

```
open fun setRequestProperty(name: String, value: String): Unit
```

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 `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory`, then the header value set with this method should be preferred when connecting with the data source. See `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)`.

| Parameters |
|---|---|
| `name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | The name of the header field. |
| `value: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | The value of the field. |

## Public properties

### responseCode

```
open val responseCode: Int
```

### responseHeaders

```
open val responseHeaders: Map<String, List<String>>
```

### uri

```
open val uri: Uri?
```