or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

analytics.mdaudio-rendering.mdcore-player.mddrm-support.mdindex.mdmedia-sources.mdoffline-support.mdtrack-selection.mdvideo-rendering.md
tile.json

tessl/maven-androidx-media3--media3-exoplayer

ExoPlayer module that provides the core ExoPlayer implementation for local media playback on Android, supporting various media formats and streaming protocols

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/androidx.media3/media3-exoplayer@1.8.x

To install, run

npx @tessl/cli install tessl/maven-androidx-media3--media3-exoplayer@1.8.0

index.mddocs/

ExoPlayer

ExoPlayer is the core media player implementation for local media playback on Android within the AndroidX Media3 ecosystem. It provides an extensible media player library that handles various audio and video formats, streaming protocols, and playback scenarios with high performance and reliability.

Package Information

  • Package Name: androidx.media3:media3-exoplayer
  • Package Type: maven
  • Language: Java
  • Installation: implementation 'androidx.media3:media3-exoplayer:1.8.0'

Core Imports

import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.ExoPlayer.AudioOffloadListener;
import androidx.media3.exoplayer.ExoPlayer.PreloadConfiguration;
import androidx.media3.exoplayer.DefaultRenderersFactory;
import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.ScrubbingModeParameters;
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.image.ImageOutput;
import androidx.media3.common.MediaItem;
import androidx.media3.common.DeviceInfo;

Basic Usage

import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.common.MediaItem;
import android.content.Context;

// Create ExoPlayer instance
ExoPlayer player = new ExoPlayer.Builder(context).build();

// Set media item and prepare
MediaItem mediaItem = MediaItem.fromUri("https://example.com/video.mp4");
player.setMediaItem(mediaItem);
player.prepare();

// Start playback
player.setPlayWhenReady(true);

// Release when done
player.release();

Architecture

ExoPlayer is built around several key components that work together to provide flexible media playback:

  • ExoPlayer Interface: The main player interface providing playback control and state management
  • MediaSource: Components that define, load, and provide media to be played
  • Renderer: Components that render individual media streams (audio, video, text, metadata)
  • TrackSelector: Selects which tracks to play from available options
  • LoadControl: Controls buffering behavior and timing
  • Analytics System: Comprehensive event tracking and performance monitoring

Capabilities

Core Player Interface

Main ExoPlayer interface providing extensible media playback functionality with builder pattern construction.

public interface ExoPlayer extends Player {
    static final class Builder {
        public Builder(Context context);
        public Builder setRenderersFactory(RenderersFactory renderersFactory);
        public Builder setTrackSelector(TrackSelector trackSelector);
        public Builder setLoadControl(LoadControl loadControl);
        public Builder setBandwidthMeter(BandwidthMeter bandwidthMeter);
        public Builder setAnalyticsCollector(AnalyticsCollector analyticsCollector);
        public Builder setLooper(Looper looper);
        public Builder setPriorityTaskManager(PriorityTaskManager priorityTaskManager);
        public Builder setClock(Clock clock);
        public Builder setUseLazyPreparation(boolean useLazyPreparation);
        public Builder setPlaybackLooper(Looper playbackLooper);
        public Builder setName(String playerName);
        public Builder experimentalSetForegroundModeTimeoutMs(long timeoutMs);
        public Builder experimentalSetDynamicSchedulingEnabled(boolean dynamicSchedulingEnabled);
        public ExoPlayer build();
    }
    
    void addAnalyticsListener(AnalyticsListener listener);
    void removeAnalyticsListener(AnalyticsListener listener);
    void addAudioOffloadListener(AudioOffloadListener listener);
    void removeAudioOffloadListener(AudioOffloadListener listener);
    int getRendererCount();
    @C.TrackType int getRendererType(int index);
    Renderer getRenderer(int index);
    void setMediaSource(MediaSource mediaSource);
    void setMediaSources(List<MediaSource> mediaSources);
    void addMediaSource(MediaSource mediaSource);
    void setAudioSessionId(int audioSessionId);
    int getAudioSessionId();
    void setVideoEffects(List<Effect> videoEffects);
    void setVideoScalingMode(@C.VideoScalingMode int videoScalingMode);
    void setVideoChangeFrameRateStrategy(@C.VideoChangeFrameRateStrategy int videoChangeFrameRateStrategy);
    void setImageOutput(ImageOutput imageOutput);
    PlayerMessage createMessage(PlayerMessage.Target target);
    void setSeekParameters(SeekParameters seekParameters);
    void setPreloadConfiguration(PreloadConfiguration preloadConfiguration);
    PreloadConfiguration getPreloadConfiguration();
    void setScrubbingModeEnabled(boolean scrubbingModeEnabled);
    boolean isScrubbingModeEnabled();
    void setScrubbingModeParameters(ScrubbingModeParameters scrubbingModeParameters);
    ScrubbingModeParameters getScrubbingModeParameters();
    void setForegroundMode(boolean foregroundMode);
    DeviceInfo getDeviceInfo();
    int getDeviceVolume();
    boolean isDeviceMuted();
    void setDeviceVolume(int volume, @C.VolumeFlags int flags);
    void increaseDeviceVolume(@C.VolumeFlags int flags);
    void decreaseDeviceVolume(@C.VolumeFlags int flags);
    void setDeviceMuted(boolean muted, @C.VolumeFlags int flags);
    boolean isTunnelingEnabled();
    boolean isSleepingForOffload();
    boolean isReleased();
}

Core Player

Media Source Management

Defines and provides media content to ExoPlayer with support for various formats and streaming protocols.

public interface MediaSource {
    interface Factory {
        MediaSource createMediaSource(MediaItem mediaItem);
        @C.ContentType int[] getSupportedTypes();
    }
    
    void prepareSource(MediaSourceCaller caller, @Nullable TransferListener mediaTransferListener, PlayerId playerId);
    MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long startPositionUs);
    void releasePeriod(MediaPeriod mediaPeriod);
    boolean canUpdateMediaItem(MediaItem mediaItem);
    MediaSource updateMediaItem(MediaItem mediaItem);
}

Media Sources

Track Selection

Automatic and manual track selection for optimal playback experience across different network conditions and device capabilities.

public class DefaultTrackSelector extends MappingTrackSelector {
    public static final class Builder {
        public Builder(Context context);
        public Builder setForceLowestBitrate(boolean forceLowestBitrate);
        public Builder setForceHighestSupportedBitrate(boolean forceHighestSupportedBitrate);
        public Builder setTunnelingEnabled(boolean tunnelingEnabled);
        public DefaultTrackSelector build();
    }
    
    public static final class Parameters extends TrackSelectionParameters {
        public static final class Builder extends TrackSelectionParameters.Builder {
            public Builder(Context context);
            public Builder setForceLowestBitrate(boolean forceLowestBitrate);
            public Builder setForceHighestSupportedBitrate(boolean forceHighestSupportedBitrate);
            public Parameters build();
        }
    }
    
    public void setParameters(Parameters parameters);
    public Parameters getParameters();
    public Parameters.Builder buildUponParameters();
}

Track Selection

Audio Rendering

Audio processing and output with support for various codecs, effects, and output configurations.

public interface AudioSink {
    void configure(Format format, int specifiedBufferSize, @Nullable int[] outputChannels) throws ConfigurationException;
    void play();
    void pause();
    void playToEndOfStream() throws WriteException;
    void reset();
    void release();
    void setVolume(float volume);
    void setAudioAttributes(AudioAttributes audioAttributes);
    void setAuxEffectInfo(AuxEffectInfo auxEffectInfo);
    PlaybackParameters getPlaybackParameters();
    void setPlaybackParameters(PlaybackParameters playbackParameters);
    boolean handleBuffer(ByteBuffer buffer, long presentationTimeUs, int encodedAccessUnitCount) throws WriteException;
}

Audio Rendering

Video Rendering

Video decoding, processing, and display with support for hardware acceleration and various surface types.

public class MediaCodecVideoRenderer extends MediaCodecRenderer {
    public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, long allowedJoiningTimeMs);
    public void setVideoFrameMetadataListener(VideoFrameMetadataListener listener);
    public void clearVideoFrameMetadataListener();
}

public interface VideoSink {
    void onInputStreamChanged(@C.TrackType int inputType, Format format);
    void registerInputStream(@C.TrackType int inputType, List<Effect> effects);
    void setOutputSurfaceInfo(Surface outputSurface, Size outputResolution);
    boolean render(long presentationTimeUs, long releaseTimeNs) throws VideoSinkException;
    void join();
    void release();
}

Video Rendering

Analytics and Monitoring

Comprehensive event tracking, performance monitoring, and debugging capabilities.

public interface AnalyticsListener {
    void onPlaybackStateChanged(EventTime eventTime, @Player.State int state);
    void onPlayWhenReadyChanged(EventTime eventTime, boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason);
    void onIsPlayingChanged(EventTime eventTime, boolean isPlaying);
    void onTimelineChanged(EventTime eventTime, @Player.TimelineChangeReason int reason);
    void onTracksChanged(EventTime eventTime, Tracks tracks);
    void onPlayerError(EventTime eventTime, PlaybackException error);
    void onSeekStarted(EventTime eventTime);
    void onSeekProcessed(EventTime eventTime);
    void onVideoSizeChanged(EventTime eventTime, VideoSize videoSize);
    void onAudioSessionIdChanged(EventTime eventTime, int audioSessionId);
}

Analytics

DRM Support

Digital Rights Management for protected content playback with various DRM schemes.

public interface DrmSessionManager {
    void prepare();
    @C.CryptoType int getCryptoType(Format format);
    DrmSession acquireSession(Looper playbackLooper, DrmInitData drmInitData);
    void releaseSession(DrmSession drmSession);
    void setMode(@C.CryptoMode int mode, @Nullable byte[] offlineLicenseKeySetId);
    void setPlayer(Looper playbackLooper, PlayerId playerId);
}

DRM Support

Offline Support

Download management for offline media playback capabilities.

public class DownloadManager {
    public DownloadManager(Context context, DownloadIndex downloadIndex, DownloaderFactory downloaderFactory);
    public void addListener(Listener listener);
    public void removeListener(Listener listener);
    public void start();
    public void stop();
    public void pause();
    public void resume();
}

public interface Downloader {
    void download(@Nullable ProgressListener progressListener) throws IOException, InterruptedException;
    void cancel();
    void remove() throws IOException;
}

Offline Support

Types

public final class ExoPlaybackException extends PlaybackException {
    public static final int TYPE_SOURCE = 0;
    public static final int TYPE_RENDERER = 1;
    public static final int TYPE_UNEXPECTED = 2;
    public static final int TYPE_REMOTE = 3;
    
    @Type public int type;
    @Nullable public int rendererIndex;
    @Nullable public Format rendererFormat;
    @Nullable public String rendererName;
    @Nullable public MediaPeriodId mediaPeriodId;
    
    public int getType();
    public int getRendererIndex();
    @Nullable public Format getRendererFormat();
    @Nullable public String getRendererName();
    @Nullable public MediaPeriodId getMediaPeriodId();
    public ExoPlaybackException copyWithMediaPeriodId(@Nullable MediaPeriodId mediaPeriodId);
}

public final class SeekParameters {
    public static final SeekParameters DEFAULT;
    public static final SeekParameters EXACT;
    public static final SeekParameters CLOSEST_SYNC;
    public static final SeekParameters PREVIOUS_SYNC;
    public static final SeekParameters NEXT_SYNC;
    
    public final long toleranceBeforeUs;
    public final long toleranceAfterUs;
}

public final class PlayerMessage {
    public PlayerMessage.Target getTarget();
    public int getType();
    @Nullable public Object getPayload();
    public Looper getLooper();
    public PlayerMessage setType(int messageType);
    public PlayerMessage setPayload(@Nullable Object payload);
    public PlayerMessage setPosition(long positionMs);
    public PlayerMessage setPosition(int mediaItemIndex, long positionMs);
    public PlayerMessage setHandler(Handler handler);
    public PlayerMessage send();
    public boolean cancel();
}

public static final class PreloadConfiguration {
    public static final PreloadConfiguration DEFAULT;
    
    public final long targetPreloadDurationUs;
    
    public PreloadConfiguration(long targetPreloadDurationUs);
}

public final class ScrubbingModeParameters {
    public static final ScrubbingModeParameters DEFAULT;
    
    public final long maxSeekToPreviousPositionMs;
    public final long seekBackIncrementMs;
    public final long seekForwardIncrementMs;
    
    public ScrubbingModeParameters(long maxSeekToPreviousPositionMs, long seekBackIncrementMs, long seekForwardIncrementMs);
}

public interface AudioOffloadListener {
    default void onSleepingForOffloadChanged(boolean isSleepingForOffload);
    default void onOffloadedPlayback(boolean isOffloadedPlayback);
}

// Constants
public interface ExoPlayer extends Player {
    long DEFAULT_RELEASE_TIMEOUT_MS = 500;
    long DEFAULT_DETACH_SURFACE_TIMEOUT_MS = 2000;
}