# androidx.media3.test.utils

*** ** * ** ***

## Interfaces

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule.Callback` | Callback to notify listener that the action schedule has finished. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule.PlayerTarget.Callback` | Callback to be called when message arrives. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor.Event` | Marker interface for ordering frames and EOS signals. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DecodeOneFrameUtil.Listener` | Listener for decoding events. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DummyMainThread.TestRunnable` | `https://developer.android.com/reference/java/lang/Runnable.html` variant which can throw a checked exception. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Dumper.Dumpable` | Provides custom dump method. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.ExtractorFactory` | A factory for `https://developer.android.com/reference/kotlin/androidx/media3/extractor/Extractor` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod.TrackDataFactory` | A factory to create the test data for a particular track. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackOutput.Factory` | Factory for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackOutput` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/HostActivity.HostedTest` | Interface for tests that run inside of a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/HostActivity`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/MediaPeriodAsserts.FilterableManifestMediaPeriodFactory` | Interface to create media periods for testing based on a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/offline/FilterableManifest`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner.BitmapReader` | Reads a `https://developer.android.com/reference/android/graphics/Bitmap.html` from `https://developer.android.com/reference/kotlin/androidx/media3/common/VideoFrameProcessor` output. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner.OnOutputFrameAvailableForRenderingListener` |   |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner.OnVideoFrameProcessingEndedListener` |   |

## Classes

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action` | Base class for actions to perform during playback tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.AddMediaItems` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#addMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.ClearMediaItems` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#clearMediaItems()`}. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.ClearVideoSurface` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#clearVideoSurface()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.ExecuteRunnable` | Calls `Runnable.run()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.MoveMediaItem` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#moveMediaItem(int,int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.PlayUntilPosition` | Schedules a play action to be executed, waits until the player reaches the specified position, and pauses the player again. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.Prepare` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#prepare()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.RemoveMediaItem` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#removeMediaItem(int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.RemoveMediaItems` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#removeMediaItems(int,int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.Seek` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#seekTo(long)` or `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#seekTo(int,long)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SendMessages` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#createMessage(androidx.media3.exoplayer.PlayerMessage.Target)` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/PlayerMessage#send()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetAudioAttributes` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#setAudioAttributes(androidx.media3.common.AudioAttributes,boolean)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetMediaItems` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#setMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>,int,long)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetMediaItemsResetPosition` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#setMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>,boolean)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetPlayWhenReady` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#setPlayWhenReady(boolean)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetPlaybackParameters` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#setPlaybackParameters(androidx.media3.common.PlaybackParameters)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetRendererDisabled` | Updates the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` of a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/DefaultTrackSelector` to specify whether the renderer at a given index should be disabled. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetRepeatMode` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#setRepeatMode(int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetShuffleModeEnabled` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#setShuffleModeEnabled(boolean)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetShuffleOrder` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#setShuffleOrder(androidx.media3.exoplayer.source.ShuffleOrder)` . |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.SetVideoSurface` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#setVideoSurface(android.view.Surface)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.Stop` | Calls `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#stop()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.ThrowPlaybackException` | Throws a playback exception on the playback thread. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForIsLoading` | Waits for a specified loading state, returning either immediately or after a call to `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onIsLoadingChanged(boolean)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForMessage` | Waits for a player message to arrive. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForPendingPlayerCommands` | Waits until the player acknowledged all pending player commands. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForPlayWhenReady` | Waits for a specified playWhenReady value, returning either immediately or after a call to `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onPlayWhenReadyChanged(boolean,int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForPlaybackState` | Waits for a specified playback state, returning either immediately or after a call to `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onPlaybackStateChanged(int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForPositionDiscontinuity` | Waits for `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onPositionDiscontinuity(androidx.media3.common.Player.PositionInfo,androidx.media3.common.Player.PositionInfo,int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action.WaitForTimelineChanged` | Waits for `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onTimelineChanged(androidx.media3.common.Timeline,int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule` | Schedules a sequence of `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Action`s for execution during a test. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule.Builder` | A builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule.PlayerRunnable` | Provides a wrapper for a `https://developer.android.com/reference/java/lang/Runnable.html` which has access to the player. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ActionSchedule.PlayerTarget` | Provides a wrapper for a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/PlayerMessage.Target` which has access to the player when handling messages. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/AdditionalFailureInfo` | A JUnit `https://junit.org/junit4/javadoc/latest/org/junit/Rule.html` that attaches additional info to any errors/exceptions thrown by the test. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/AssetContentProvider` | A `https://developer.android.com/reference/android/content/ContentProvider.html` for reading asset data. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/AssetInfo` | Information about a test asset. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/BinderStressCreator` | A utility for creating artificial stress on the system process binder. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/BitmapPixelTestUtil` | Utilities for pixel tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/BitmapPixelTestUtil.ImageBuffer` | Represents a `https://developer.android.com/reference/java/nio/ByteBuffer.html` read from an `https://developer.android.com/reference/android/media/Image.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CacheAsserts` | Assertion methods for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CacheAsserts.RequestSet` | Defines a set of data requests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingAudioSink` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/AudioSink` forwarding to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/DefaultAudioSink` that captures configuration, discontinuity and buffer events. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingAudioSink.InterceptingBufferSink` |   |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingAudioSink.SampleInterceptingBufferSink` |   |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor` | A `https://developer.android.com/reference/kotlin/androidx/media3/common/video/FrameProcessor` that delegates to an underlying `https://developer.android.com/reference/kotlin/androidx/media3/common/video/FrameProcessor` and records queued frames and EOS signals for testing. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor.EosEvent` | Marker class representing a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor#signalEndOfStream()` call. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor.Factory` | A factory for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor.FramesEvent` | Holds the frames queued in a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingFrameProcessor#queue(java.util.List<androidx.media3.common.video.AsyncFrame>)` call. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CapturingImageOutput` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/image/ImageOutput` that captures image availability events. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CompositionAssetInfo` | Test assets that describe various `https://developer.android.com/reference/kotlin/androidx/media3/transformer/Composition` configurations. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CountDownFuture` | A `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html` that completes when `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/CountDownFuture#countDown()` has been called a specified number of times. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DataSourceContractTest` | A collection of contract tests for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` implementations. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DataSourceContractTest.FakeTransferListener` | A `https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener` that only keeps track of the transferred bytes. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DataSourceContractTest.TestResource` | Information about a resource that can be used to test the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` instance. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DataSourceContractTest.TestResource.Builder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DataSourceContractTest.TestResource` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DecodeOneFrameUtil` | Utilities for decoding a video frame for tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DecoderCountersUtil` | Assertions for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DecoderCounters`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DefaultRenderersFactoryAsserts` | Assertions for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DefaultRenderersFactory`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DownloadBuilder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/offline/Download`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DummyMainThread` | Helper class to simulate main/UI thread in tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DumpFileAsserts` | Helper class to enable assertions based on golden-data dump files. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DumpableFormat` | Wraps a `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` to allow dumping it. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DumpableMp4Box` | Wraps an Mp4 box to allow dumping it. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Dumper` | Helper utility to dump field values. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/EditedMediaItemAssetInfo` | Information about an `https://developer.android.com/reference/kotlin/androidx/media3/transformer/EditedMediaItem` and its associated `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/AssetInfo`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/EmptyMediaSource` | MediaSource producing an empty `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExoHostedTest` | A `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/HostActivity.HostedTest` for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` playback tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExoPlayerTestRunner` | Helper class to run an ExoPlayer test. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExoPlayerTestRunner.Builder` | Builder to set-up an `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExoPlayerTestRunner`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts` | Assertion methods for `https://developer.android.com/reference/kotlin/androidx/media3/extractor/Extractor`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.AssertionConfig` | A config for the assertions made (e.g. dump file location). |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.AssertionConfig.Builder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.AssertionConfig` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.ConfigProvider` | A `https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameterValuesProvider.html` that provides `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.SimulationConfig` objects from `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts#configs()` to exercise different extractor paths. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ExtractorAsserts.SimulationConfig` | A config of different environments to simulate and extractor behaviours to test. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FailOnCloseDataSink` | A `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink` that can simulate caching the bytes being written to it, and then failing to persist them when `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FailOnCloseDataSink#close()` is called. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FailOnCloseDataSink.Factory` | Factory to create a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FailOnCloseDataSink`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveDataSet` | Fake data set emulating the data of an adaptive media source. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveDataSet.Factory` | Factory for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveDataSet`s. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveDataSet.Iterator` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/chunk/MediaChunkIterator` for the chunks defined by a fake adaptive data set. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveMediaPeriod` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` that provides tracks from the given `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveMediaSource` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` that provides a given timeline. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdsLoader` | A fake implementation of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/ads/AdsLoader`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAudioRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer` that supports `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TRACK_TYPE_AUDIO()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeChunkSource` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/chunk/ChunkSource` with adaptive media chunks of a given duration. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeChunkSource.Factory` | Factory for a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeChunkSource`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeClock` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock` implementation that allows to `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeClock#advanceTime(long)` manually to trigger pending timed messages. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeClock.Builder` | A builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeClock` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeClock.HandlerMessage` | Message data saved to send messages or execute runnables at a later time on a Handler. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeCryptoConfig` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/decoder/CryptoConfig`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSet` | Collection of `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSet.FakeData` to be served by a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSource`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSet.FakeData` | Container of fake data to be served by a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSource`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSet.FakeData.Segment` | A segment of `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSet.FakeData`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSource` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` capable of simulating various scenarios. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSource.Factory` | Factory to create a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeDataSource`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm` | A fake implementation of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/ExoMediaDrm` for use in tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm.Builder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm.LicenseServer` | An license server implementation to interact with `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm.LicenseServer.Builder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExoMediaDrm.LicenseServer` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExtractorInput` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/extractor/ExtractorInput` capable of simulating various scenarios. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExtractorInput.Builder` | Builder of `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExtractorInput` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExtractorOutput` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/extractor/ExtractorOutput`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeFrameProcessor` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/common/video/FrameProcessor` implementation. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeFrameProcessor.Factory` | A factory for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeFrameProcessor` implementations. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeFrameProcessor.Listener` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/common/video/FrameProcessor.Listener` implementation for tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeFrameWriter` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/common/video/FrameWriter` implementation for testing. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeHardwareBufferNativeHelpers` | Fake class to simulate `https://developer.android.com/reference/kotlin/androidx/media3/common/video/HardwareBufferNativeHelpers`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaChunk` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/chunk/MediaChunk`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaChunkIterator` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/chunk/MediaChunkIterator`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaClockRenderer` | Fake abstract `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` which is also a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/MediaClock`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` that provides tracks from the given `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` that provides a given timeline. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` | A builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.InitialTimeline` | A forwarding timeline to provide an initial timeline for fake multi window sources. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSourceFactory` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceFactory` that creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMetadataEntry` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/common/Metadata.Entry`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline` that produces a live window with periods according to the available time range. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakePlayer` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/common/Player` that uses `https://developer.android.com/reference/kotlin/androidx/media3/common/SimpleBasePlayer`'s minimal number of default methods implementations to build upon to simulate realistic playback scenarios for testing. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer` that supports any format with the matching track type. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeSampleStream` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream` that outputs a given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format` and any amount of `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeSampleStream.FakeSampleStreamItem`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeSampleStream.FakeSampleStreamItem` | Item to customize a return value of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/SampleStream#readData(androidx.media3.exoplayer.FormatHolder,androidx.media3.decoder.DecoderInputBuffer,int)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeShuffleOrder` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/ShuffleOrder` which returns a reverse order. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline` which can be setup to return custom `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline.TimelineWindowDefinition`s. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline.TimelineWindowDefinition` | Definition used to define a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline.TimelineWindowDefinition.Builder` | A builder to build instances of `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline.TimelineWindowDefinition`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackOutput` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/extractor/TrackOutput`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackSelection` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/ExoTrackSelection` that supports selecting a subset of tracks within a `https://developer.android.com/reference/kotlin/androidx/media3/common/TrackGroup`, returns 1 fixed track, and tracks the number of calls to its methods. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackSelector` | A fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector` that returns `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackSelection`s. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackSelector.FakeTrackSelectionFactory` | A factory for the `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackSelection` instances requested by the `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTrackSelector`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeVideoRenderer` | A `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeRenderer` that supports `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TRACK_TYPE_VIDEO()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FormatSupportAssumptions` | Utility methods for checking and assuming format support in instrumentation tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FrameProcessorTestUtil` | Test utilities for asserting `https://developer.android.com/reference/kotlin/androidx/media3/common/video/FrameProcessor` inputs. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FrameProcessorTestUtil.ExpectedFrame` | Represents a frame that is expected to be presented. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/HdrCapabilitiesUtil` | Utility class for checking HDR capabilities. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/HostActivity` | A host activity for performing playback tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/HttpDataSourceTestEnv` | A JUnit `https://junit.org/junit4/javadoc/latest/org/junit/Rule.html` that creates test resources for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` contract tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ImageReaderSurfaceHolder` | An implementation of `https://developer.android.com/reference/android/view/SurfaceHolder.html` which is backed by an `https://developer.android.com/reference/android/media/ImageReader.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ImmutableByteArray` | `byte` version of `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/primitives/ImmutableIntArray.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ImmutableByteArray.Builder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ImmutableByteArray` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/InMemoryDatabaseRule` | A JUnit `https://junit.org/junit4/javadoc/latest/org/junit/Rule.html` that creates (and cleans up) in-memory databases and `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/SimpleCache` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/MalformedParcelable` | A `https://developer.android.com/reference/android/os/Parcelable.html` that throws a `https://developer.android.com/reference/java/lang/RuntimeException.html` during deserialization. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/Media3FlagsRule` | A JUnit `https://junit.org/junit4/javadoc/latest/org/junit/rules/TestRule.html` for managing `https://developer.android.com/reference/kotlin/androidx/media3/common/Flags` states in tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/MediaPeriodAsserts` | Assertion methods for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/MediaSourceTestRunner` | A runner for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/MediaSourceTestRunner.MediaSourceListener` |   |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/MssimCalculator` | Image comparison tool that calculates the Mean Structural Similarity (MSSIM) of two images, developed by Wang, Bovik, Sheikh, and Simoncelli. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/OggFileAudioBufferSink` | A sink for audio buffers that writes output audio as .ogg files with a given path prefix. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/PassthroughAudioProcessor` | A `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor` implementation that accepts all input formats and copies all input buffers onto the output without modifications. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/PlayerFence` | A Java-compatible fluent API for waiting for certain `https://developer.android.com/reference/kotlin/androidx/media3/common/Player` conditions. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/RecordingPacketConsumer` | A `https://developer.android.com/reference/kotlin/androidx/media3/effect/PacketConsumer` implementation that holds a reference to all queued packets, and optionally releases the underlying frames. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ReleaseListener` | A shared `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener` implementation for waiting until `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ReleaseListener#onPlayerReleased(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)` is called and all background events have been delivered. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/SequenceAssetInfo` | Test assets that describe various `https://developer.android.com/reference/kotlin/androidx/media3/transformer/EditedMediaItemSequence` configurations. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/SsimHelper` | A helper for calculating SSIM score for transcoded videos. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/StubExoPlayer` | An abstract `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` implementation that throws `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` from every method. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/StubPlayer` | An abstract `https://developer.android.com/reference/kotlin/androidx/media3/common/Player` implementation that throws `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` from every method. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TestExoPlayerBuilder` | A builder of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` instances for testing. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TestSpeedProvider` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedProvider` for tests |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TestSummaryLogger` | Utilities for logging test summaries in instrumentation tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TestTransformerBuilder` | A builder of `https://developer.android.com/reference/kotlin/androidx/media3/transformer/Transformer` instances for testing with Robolectric. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TestUtil` | Utility methods for tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TextureBitmapReader` | Reads from an OpenGL texture. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ThreadTestUtil` | Static utility to coordinate threads in testing environments. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/ThrowingSubtitleParserFactory` | A `https://developer.android.com/reference/kotlin/androidx/media3/extractor/text/SubtitleParser.Factory` for `https://developer.android.com/reference/kotlin/androidx/media3/extractor/text/SubtitleParser` instances that throw an exception on every call to `https://developer.android.com/reference/kotlin/androidx/media3/extractor/text/SubtitleParser#parse(byte[],androidx.media3.extractor.text.SubtitleParser.OutputOptions,java.util.function.Consumer<androidx.media3.extractor.text.CuesWithTiming>)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/TimelineAsserts` | Assertion methods for `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoDecodingWrapper` | A wrapper for decoding a video using `https://developer.android.com/reference/android/media/MediaCodec.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner` | A test runner for `https://developer.android.com/reference/kotlin/androidx/media3/common/VideoFrameProcessor` tests. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner.Builder` | A builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner` instances. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/VideoFrameProcessorTestRunner.SurfaceBitmapReader` | Reads from a `https://developer.android.com/reference/android/view/Surface.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/WebServerDispatcher` | A Dispatcher for okhttp3.mockwebserver.MockWebServer that allows per-path customisation of the static data served. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/WebServerDispatcher.Resource` | A resource served by `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/WebServerDispatcher`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/WebServerDispatcher.Resource.Builder` | Builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/WebServerDispatcher.Resource`. |

## Exceptions

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeExtractorInput.SimulatedIOException` | Thrown when simulating an `https://developer.android.com/reference/java/io/IOException.html`. |

## Annotations

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/BindCanaryMode` | Binds a boolean test parameter field to Media3 canary mode. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/BindFlag` | Binds a boolean test parameter field to a Media3 feature flag. |

## Top-level functions summary

|---|---|
| `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/test/utils/package-summary#doBlocking(kotlin.coroutines.CoroutineContext,kotlin.coroutines.SuspendFunction1)(context: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.coroutines/-coroutine-context/index.html, block: suspend https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-scope/index.html.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)` Runs the given `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#doBlocking(kotlin.coroutines.CoroutineContext,kotlin.coroutines.SuspendFunction1)` using `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/index.html` on the current thread for side effect. |

## Extension functions summary

|---|---|
| `suspend 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/common/Player.https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitContentPositionAtLeast(kotlin.Long,kotlin.Boolean,kotlin.time.Duration)( targetPositionMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? )` Suspends until the content position reaches (or passes) `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitContentPositionAtLeast(kotlin.Long,kotlin.Boolean,kotlin.time.Duration)` in the current media item. |
| `suspend 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/common/Player.https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitFirstFrameRendered(kotlin.Boolean,kotlin.time.Duration)( failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? )` Suspends until `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onRenderedFirstFrame()` is invoked. |
| `suspend 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/common/Player.https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitIsPlaying(kotlin.Boolean,kotlin.Boolean,kotlin.time.Duration)( targetIsPlaying: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? )` Suspends until the player's `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#isPlaying()` value matches `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitIsPlaying(kotlin.Boolean,kotlin.Boolean,kotlin.time.Duration)`. |
| `suspend 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/common/Player.https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitPlaybackState(kotlin.Int,kotlin.Boolean,kotlin.time.Duration)( targetState: @https://developer.android.com/reference/kotlin/androidx/media3/common/Player.State https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? )` Suspends until the player enters the provided `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitPlaybackState(kotlin.Int,kotlin.Boolean,kotlin.time.Duration)`. |
| `suspend T` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi <T : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/media3/common/Player.https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)( failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html, timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html?, block: suspend https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-scope/index.html.() -> T )` Suspends until `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)` completes, or a playback error occurs, or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)` expires. |

## Top-level functions

### doBlocking

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/utilities.kt+function:doBlocking)

```
@UnstableApi
fun doBlocking(
    context: CoroutineContext = EmptyCoroutineContext,
    block: suspend CoroutineScope.() -> Unit
): Unit
```

Runs the given `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#doBlocking(kotlin.coroutines.CoroutineContext,kotlin.coroutines.SuspendFunction1)` using `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/index.html` on the current thread for side effect.

Using this function is like `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/index.html` with default context (which runs the given block on the calling thread) but forces the return type to be `Unit`, which is helpful when implementing suspending tests as expression functions:

```kotlin
@Test
fun myTest() = doBlocking {...}
```

## Extension functions

### Player.awaitContentPositionAtLeast

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/PlayerFence.kt+function:awaitContentPositionAtLeast)

```
@UnstableApi
suspend fun Player.awaitContentPositionAtLeast(
    targetPositionMs: Long,
    failOnNonFatalErrors: Boolean = true,
    timeout: Duration? = null
): Unit
```

Suspends until the content position reaches (or passes) `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitContentPositionAtLeast(kotlin.Long,kotlin.Boolean,kotlin.time.Duration)` in the current media item.

This makes some assumptions:

1. The condition completes immediately if `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#getContentPosition()` is already at least `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitContentPositionAtLeast(kotlin.Long,kotlin.Boolean,kotlin.time.Duration)`.

2. Seeking past the target position satisfies the condition.

3. If playback ends, or the media item changes, before the target position is reached, an exception is thrown.

Must be called on the player's application looper thread.

| Parameters |
|---|---|
| `targetPositionMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#getContentPosition()` to wait for. |
| `failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = true` | Whether non-fatal errors (such as those from `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)`) cause an exception to be thrown immediately. |
| `timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? = null` | The max time to wait for, or `null` to use a default timeout of 10 seconds. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if not called on the player's application looper thread. |

### Player.awaitFirstFrameRendered

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/PlayerFence.kt+function:awaitFirstFrameRendered)

```
@UnstableApi
suspend fun Player.awaitFirstFrameRendered(
    failOnNonFatalErrors: Boolean = true,
    timeout: Duration? = null
): Unit
```

Suspends until `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.Listener#onRenderedFirstFrame()` is invoked.

This should be called before the callback has been invoked (e.g. before calling `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#prepare()`), otherwise it risks awaiting forever.

Must be called on the player's application looper thread.

| Parameters |
|---|---|
| `failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = true` | Whether non-fatal errors (such as those from `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)`) cause an exception to be thrown immediately. |
| `timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? = null` | The max time to wait for, or `null` to use a default timeout of 10 seconds. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if not called on the player's application looper thread. |

### Player.awaitIsPlaying

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/PlayerFence.kt+function:awaitIsPlaying)

```
@UnstableApi
suspend fun Player.awaitIsPlaying(
    targetIsPlaying: Boolean,
    failOnNonFatalErrors: Boolean = true,
    timeout: Duration? = null
): Unit
```

Suspends until the player's `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#isPlaying()` value matches `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitIsPlaying(kotlin.Boolean,kotlin.Boolean,kotlin.time.Duration)`.

If the player's `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#isPlaying()` value is already `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitIsPlaying(kotlin.Boolean,kotlin.Boolean,kotlin.time.Duration)` this returns immediately.

Must be called on the player's application looper thread.

| Parameters |
|---|---|
| `targetIsPlaying: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | The value of `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#isPlaying()` to wait for. |
| `failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = true` | Whether non-fatal errors (such as those from `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)`) cause an exception to be thrown immediately. |
| `timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? = null` | The max time to wait for, or `null` to use a default timeout of 10 seconds. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if not called on the player's application looper thread. |

### Player.awaitPlaybackState

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/PlayerFence.kt+function:awaitPlaybackState)

```
@UnstableApi
suspend fun Player.awaitPlaybackState(
    targetState: @Player.State Int,
    failOnNonFatalErrors: Boolean = true,
    timeout: Duration? = null
): Unit
```

Suspends until the player enters the provided `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitPlaybackState(kotlin.Int,kotlin.Boolean,kotlin.time.Duration)`.

If the player is already in the provided `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitPlaybackState(kotlin.Int,kotlin.Boolean,kotlin.time.Duration)` this returns immediately.

Must be called on the player's application looper thread.

| Parameters |
|---|---|
| `targetState: @https://developer.android.com/reference/kotlin/androidx/media3/common/Player.State https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The playback `https://developer.android.com/reference/kotlin/androidx/media3/common/Player.State` to await. |
| `failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = true` | Whether non-fatal errors (such as those from `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)`) cause an exception to be thrown immediately. |
| `timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? = null` | The max time to wait for, or `null` to use a default timeout of 10 seconds. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if not called on the player's application looper thread. |

### Player.awaitSupervised

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/PlayerFence.kt+function:awaitSupervised)

```
@UnstableApi
suspend fun <T : Any?> Player.awaitSupervised(
    failOnNonFatalErrors: Boolean = true,
    timeout: Duration? = null,
    block: suspend CoroutineScope.() -> T
): T
```

Suspends until `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)` completes, or a playback error occurs, or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)` expires.

If a fatal `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#playerError()` or non-fatal `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener` error occurs, or if `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)` expires, the `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/package-summary#(androidx.media3.common.Player).awaitSupervised(kotlin.Boolean,kotlin.time.Duration,kotlin.coroutines.SuspendFunction1)` coroutine is cancelled immediately and the exception is thrown.

Must be called on the player's application looper thread.

| Parameters |
|---|---|
| `failOnNonFatalErrors: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html = true` | Whether non-fatal errors (such as those from `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener#onAudioCodecError(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.Exception)`) cause an exception to be thrown immediately. |
| `timeout: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-duration/index.html? = null` | The max time to wait for, or `null` to use a default timeout of 10 seconds. |
| `block: suspend https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-scope/index.html.() -> T` | The suspending computation to execute within the supervision scope. |