# AssetLoader

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

*** ** * ** ***

<br />

```
@UnstableApi
public interface AssetLoader
```

<br />

Known direct subclasses [ExoPlayerAssetLoader](https://developer.android.com/reference/androidx/media3/transformer/ExoPlayerAssetLoader), [ImageAssetLoader](https://developer.android.com/reference/androidx/media3/transformer/ImageAssetLoader), [MediaProjectionAssetLoader](https://developer.android.com/reference/androidx/media3/transformer/MediaProjectionAssetLoader), [RawAssetLoader](https://developer.android.com/reference/androidx/media3/transformer/RawAssetLoader), [SurfaceAssetLoader](https://developer.android.com/reference/androidx/media3/transformer/SurfaceAssetLoader), [TextureAssetLoader](https://developer.android.com/reference/androidx/media3/transformer/TextureAssetLoader)

|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/ExoPlayerAssetLoader` | An `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader` implementation that uses an `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer` to load samples. |
| `https://developer.android.com/reference/androidx/media3/transformer/ImageAssetLoader` | An `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader` implementation that loads images into `https://developer.android.com/reference/android/graphics/Bitmap.html` instances. |
| `https://developer.android.com/reference/androidx/media3/transformer/MediaProjectionAssetLoader` | Asset loader that provides video from `https://developer.android.com/reference/android/media/projection/MediaProjection.html`. |
| `https://developer.android.com/reference/androidx/media3/transformer/RawAssetLoader` | An `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader` implementation that loads raw audio and/or video data. |
| `https://developer.android.com/reference/androidx/media3/transformer/SurfaceAssetLoader` | Asset loader that outputs video data passed to its input `https://developer.android.com/reference/android/view/Surface.html`. |
| `https://developer.android.com/reference/androidx/media3/transformer/TextureAssetLoader` | **This class is deprecated.** Use `https://developer.android.com/reference/androidx/media3/transformer/RawAssetLoader`. <br /> |

*** ** * ** ***

Provides media data to a `https://developer.android.com/reference/androidx/media3/transformer/Transformer`.

The output samples can be encoded or decoded.

Only audio and video samples are supported. Both audio and video tracks can be provided by a single asset loader, but outputting multiple tracks of the same type is not supported.

An asset loader is responsible for `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem.Builder#setRemoveAudio(boolean)` or `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem.Builder#setRemoveVideo(boolean)` if requested.

If `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem.Builder#setFlattenForSlowMotion(boolean)` is requested, the asset loader should flatten the video track for media containing slow motion markers. This is usually done prior to decoding. The audio samples are flattened after they are output by the `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader`, because this is done on decoded samples.

## Summary

| ### Nested types |
|---|
| `public class https://developer.android.com/reference/androidx/media3/transformer/AssetLoader.CompositionSettings` Customizations set on the `https://developer.android.com/reference/androidx/media3/transformer/Composition` that are needed when `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader` each of the `https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItem` in the `https://developer.android.com/reference/androidx/media3/transformer/Composition`. |
| `public interface https://developer.android.com/reference/androidx/media3/transformer/AssetLoader.Factory` A factory for `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader` instances. |
| `public interface https://developer.android.com/reference/androidx/media3/transformer/AssetLoader.Listener` A listener of `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader` events. |
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/androidx/annotation/IntDef(flag = true, value = ) public annotation https://developer.android.com/reference/androidx/media3/transformer/AssetLoader.SupportedOutputTypes` Supported output types of an asset loader. |

| ### Constants |
|---|---|
| `default static final int` | `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader#SUPPORTED_OUTPUT_TYPE_DECODED() = 2` Indicates that the asset loader can output decoded samples. |
| `default static final int` | `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader#SUPPORTED_OUTPUT_TYPE_ENCODED() = 1` Indicates that the asset loader can output encoded samples. |

| ### Public methods |
|---|---|
| `abstract https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableMap.html<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader#getDecoderNames()()` Return the used decoders' names. |
| `abstract int` | `@https://developer.android.com/reference/androidx/media3/transformer/Transformer.ProgressState https://developer.android.com/reference/androidx/media3/transformer/AssetLoader#getProgress(androidx.media3.transformer.ProgressHolder)(https://developer.android.com/reference/androidx/media3/transformer/ProgressHolder progressHolder)` Returns the current `https://developer.android.com/reference/androidx/media3/transformer/Transformer.ProgressState` and updates `progressHolder` with the current progress if it is `https://developer.android.com/reference/androidx/media3/transformer/Transformer#PROGRESS_STATE_AVAILABLE()`. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader#release()()` Stops loading data and releases all resources associated with the asset loader. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/transformer/AssetLoader#start()()` Starts the asset loader. |

## Constants

### SUPPORTED_OUTPUT_TYPE_DECODED

```
default static final int SUPPORTED_OUTPUT_TYPE_DECODED = 2
```

Indicates that the asset loader can output decoded samples.

### SUPPORTED_OUTPUT_TYPE_ENCODED

```
default static final int SUPPORTED_OUTPUT_TYPE_ENCODED = 1
```

Indicates that the asset loader can output encoded samples.

## Public methods

### getDecoderNames

```
abstract ImmutableMap<Integer, String> getDecoderNames()
```

Return the used decoders' names.

| Returns |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableMap.html<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/java/lang/String.html>` | The decoders' names keyed by `https://developer.android.com/reference/androidx/media3/common/C.TrackType`. |

### getProgress

```
@Transformer.ProgressState
abstract int getProgress(ProgressHolder progressHolder)
```

Returns the current `https://developer.android.com/reference/androidx/media3/transformer/Transformer.ProgressState` and updates `progressHolder` with the current progress if it is `https://developer.android.com/reference/androidx/media3/transformer/Transformer#PROGRESS_STATE_AVAILABLE()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/transformer/ProgressHolder progressHolder` | A `https://developer.android.com/reference/androidx/media3/transformer/ProgressHolder`, updated to hold the percentage progress if `https://developer.android.com/reference/androidx/media3/transformer/Transformer#PROGRESS_STATE_AVAILABLE()`. |

| Returns |
|---|---|
| `int` | The `https://developer.android.com/reference/androidx/media3/transformer/Transformer.ProgressState`. |

### release

```
abstract void release()
```

Stops loading data and releases all resources associated with the asset loader.

### start

```
abstract void start()
```

Starts the asset loader.