DefaultRenderersFactory


@UnstableApi
public class DefaultRenderersFactory implements RenderersFactory


Default RenderersFactory implementation.

Summary

Nested types

Modes for using extension renderers.

Constants

static final long

The default maximum duration for which a video renderer can attempt to seamlessly join an ongoing playback.

static final int

Do not allow use of extension renderers.

static final int

Allow use of extension renderers.

static final int

Allow use of extension renderers.

static final int

The maximum number of frames that can be dropped between invocations of onDroppedFrames.

Public constructors

Public methods

Renderer[]
createRenderers(
    Handler eventHandler,
    VideoRendererEventListener videoRendererEventListener,
    AudioRendererEventListener audioRendererEventListener,
    TextOutput textRendererOutput,
    MetadataOutput metadataRendererOutput
)

Builds the Renderer instances for an ExoPlayer.

@Nullable Renderer
createSecondaryRenderer(
    Renderer renderer,
    Handler eventHandler,
    VideoRendererEventListener videoRendererEventListener,
    AudioRendererEventListener audioRendererEventListener,
    TextOutput textRendererOutput,
    MetadataOutput metadataRendererOutput
)

Provides a secondary Renderer instance for an ExoPlayer to use for pre-warming.

DefaultRenderersFactory
@RequiresApi(value = 34)
@CanIgnoreReturnValue
experimentalSetEnableMediaCodecBufferDecodeOnlyFlag(
    boolean enableMediaCodecBufferDecodeOnlyFlag
)

Sets whether the BUFFER_FLAG_DECODE_ONLY flag will be included when queuing decode-only input buffers to the decoder.

final DefaultRenderersFactory
@CanIgnoreReturnValue
experimentalSetEnableMediaCodecVideoRendererPrewarming(
    boolean enableMediaCodecVideoRendererPrewarming
)

Sets whether a secondary MediaCodecVideoRenderer will be created through buildSecondaryVideoRenderer for use by ExoPlayer for pre-warming.

final DefaultRenderersFactory
@CanIgnoreReturnValue
experimentalSetLateThresholdToDropDecoderInputUs(
    long lateThresholdToDropDecoderInputUs
)

Sets the late threshold for rendered output buffers, in microseconds, after which decoder input buffers may be dropped.

final DefaultRenderersFactory

Sets whether to enable CONFIGURE_FLAG_USE_CRYPTO_ASYNC on API 34 and above when operating the codec in asynchronous mode.

final DefaultRenderersFactory
@CanIgnoreReturnValue
experimentalSetParseAv1SampleDependencies(
    boolean parseAv1SampleDependencies
)

Sets whether VIDEO_AV1 bitstream parsing for sample dependency information is enabled.

final DefaultRenderersFactory

Disables androidx.media3.exoplayer.mediacodec.MediaCodecRenderer instances from operating their MediaCodec in asynchronous mode and perform asynchronous queueing.

final DefaultRenderersFactory

Enables androidx.media3.exoplayer.mediacodec.MediaCodecRenderer instances to operate their MediaCodec in asynchronous mode and perform asynchronous queueing.

final DefaultRenderersFactory
@CanIgnoreReturnValue
setAllowedVideoJoiningTimeMs(long allowedVideoJoiningTimeMs)

Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing playback.

final DefaultRenderersFactory

Sets whether floating point audio should be output when possible.

final DefaultRenderersFactory
@CanIgnoreReturnValue
setEnableAudioTrackPlaybackParams(
    boolean enableAudioTrackPlaybackParams
)

Sets whether to enable setting playback speed using setPlaybackParams, which is supported from API level 23, rather than using application-level audio speed adjustment.

final DefaultRenderersFactory
@CanIgnoreReturnValue
setEnableDecoderFallback(boolean enableDecoderFallback)

Sets whether to enable fallback to lower-priority decoders if decoder initialization fails.

final DefaultRenderersFactory

Sets the extension renderer mode, which determines if and how available extension renderers are used.

final DefaultRenderersFactory

Sets a MediaCodecSelector for use by MediaCodec based renderers.

Protected methods

void
buildAudioRenderers(
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    MediaCodecSelector mediaCodecSelector,
    boolean enableDecoderFallback,
    AudioSink audioSink,
    Handler eventHandler,
    AudioRendererEventListener eventListener,
    ArrayList<Renderer> out
)

Builds audio renderers for use by the player.

@Nullable AudioSink
buildAudioSink(
    Context context,
    boolean enableFloatOutput,
    boolean enableAudioTrackPlaybackParams
)

Builds an AudioSink to which the audio renderers will output.

void
buildCameraMotionRenderers(
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)

Builds camera motion renderers for use by the player.

void

This method is deprecated.

Override buildImageRenderers instead.

void

Builds image renderers for use by the player.

void
buildMetadataRenderers(
    Context context,
    MetadataOutput output,
    Looper outputLooper,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)

Builds metadata renderers for use by the player.

void
buildMiscellaneousRenderers(
    Context context,
    Handler eventHandler,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)

Builds any miscellaneous renderers used by the player.

@Nullable Renderer
buildSecondaryVideoRenderer(
    Renderer renderer,
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    MediaCodecSelector mediaCodecSelector,
    boolean enableDecoderFallback,
    Handler eventHandler,
    VideoRendererEventListener eventListener,
    long allowedVideoJoiningTimeMs
)

Builds a secondary video renderer for an ExoPlayer instance to use for pre-warming.

void
buildTextRenderers(
    Context context,
    TextOutput output,
    Looper outputLooper,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    ArrayList<Renderer> out
)

Builds text renderers for use by the player.

void
buildVideoRenderers(
    Context context,
    @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
    MediaCodecSelector mediaCodecSelector,
    boolean enableDecoderFallback,
    Handler eventHandler,
    VideoRendererEventListener eventListener,
    long allowedVideoJoiningTimeMs,
    ArrayList<Renderer> out
)

Builds video renderers for use by the player.

MediaCodecAdapter.Factory

Returns the MediaCodecAdapter.Factory that will be used when creating instances.

ImageDecoder.Factory

Returns the ImageDecoder.Factory used to build the image renderer.

Constants

DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS

public static final long DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS = 5000

The default maximum duration for which a video renderer can attempt to seamlessly join an ongoing playback.

EXTENSION_RENDERER_MODE_OFF

public static final int EXTENSION_RENDERER_MODE_OFF = 0

Do not allow use of extension renderers.

EXTENSION_RENDERER_MODE_ON

public static final int EXTENSION_RENDERER_MODE_ON = 1

Allow use of extension renderers. Extension renderers are indexed after core renderers of the same type. A TrackSelector that prefers the first suitable renderer will therefore prefer to use a core renderer to an extension renderer in the case that both are able to play a given track.

EXTENSION_RENDERER_MODE_PREFER

public static final int EXTENSION_RENDERER_MODE_PREFER = 2

Allow use of extension renderers. Extension renderers are indexed before core renderers of the same type. A TrackSelector that prefers the first suitable renderer will therefore prefer to use an extension renderer to a core renderer in the case that both are able to play a given track.

MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY

public static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50

The maximum number of frames that can be dropped between invocations of onDroppedFrames.

Public constructors

DefaultRenderersFactory

public DefaultRenderersFactory(Context context)
Parameters
Context context

A Context.

Public methods

createRenderers

public Renderer[] createRenderers(
    Handler eventHandler,
    VideoRendererEventListener videoRendererEventListener,
    AudioRendererEventListener audioRendererEventListener,
    TextOutput textRendererOutput,
    MetadataOutput metadataRendererOutput
)

Builds the Renderer instances for an ExoPlayer.

Parameters
Handler eventHandler

A handler to use when invoking event listeners and outputs.

VideoRendererEventListener videoRendererEventListener

An event listener for video renderers.

AudioRendererEventListener audioRendererEventListener

An event listener for audio renderers.

TextOutput textRendererOutput

An output for text renderers.

MetadataOutput metadataRendererOutput

An output for metadata renderers.

Returns
Renderer[]

The instances.

createSecondaryRenderer

public @Nullable Renderer createSecondaryRenderer(
    Renderer renderer,
    Handler eventHandler,
    VideoRendererEventListener videoRendererEventListener,
    AudioRendererEventListener audioRendererEventListener,
    TextOutput textRendererOutput,
    MetadataOutput metadataRendererOutput
)

Provides a secondary Renderer instance for an ExoPlayer to use for pre-warming.

The created secondary Renderer should match its primary in its reported track type support and RendererCapabilities.

Parameters
Renderer renderer

The primary Renderer for which to create the backup.

Handler eventHandler

A handler to use when invoking event listeners and outputs.

VideoRendererEventListener videoRendererEventListener

An event listener for video renderers.

AudioRendererEventListener audioRendererEventListener

An event listener for audio renderers.

TextOutput textRendererOutput

An output for text renderers.

MetadataOutput metadataRendererOutput

An output for metadata renderers.

Returns
@Nullable Renderer

The instances.

experimentalSetEnableMediaCodecBufferDecodeOnlyFlag

@RequiresApi(value = 34)
@CanIgnoreReturnValue
public DefaultRenderersFactory experimentalSetEnableMediaCodecBufferDecodeOnlyFlag(
    boolean enableMediaCodecBufferDecodeOnlyFlag
)

Sets whether the BUFFER_FLAG_DECODE_ONLY flag will be included when queuing decode-only input buffers to the decoder.

If false, then only if the decoder is set up in tunneling mode will the decode-only input buffers be queued with the BUFFER_FLAG_DECODE_ONLY flag. The default value is false.

Requires API 34.

This method is experimental and will be renamed or removed in a future release.

experimentalSetEnableMediaCodecVideoRendererPrewarming

@CanIgnoreReturnValue
public final DefaultRenderersFactory experimentalSetEnableMediaCodecVideoRendererPrewarming(
    boolean enableMediaCodecVideoRendererPrewarming
)

Sets whether a secondary MediaCodecVideoRenderer will be created through buildSecondaryVideoRenderer for use by ExoPlayer for pre-warming.

If enabled, ExoPlayer will pre-process the video of consecutive media items during playback to reduce media item transition latency.

If buildVideoRenderers is overridden to provide custom video renderers then to still enable pre-warming,buildSecondaryVideoRenderer must also be overridden to provide matching secondary custom video renderers.

This method is experimental. Its default value may change, or it may be renamed or removed in a future release.

Parameters
boolean enableMediaCodecVideoRendererPrewarming

Whether to enable buildSecondaryVideoRenderer to provide a secondary MediaCodecVideoRenderer for pre-warming.

Returns
DefaultRenderersFactory

This factory, for convenience.

experimentalSetLateThresholdToDropDecoderInputUs

@CanIgnoreReturnValue
public final DefaultRenderersFactory experimentalSetLateThresholdToDropDecoderInputUs(
    long lateThresholdToDropDecoderInputUs
)

Sets the late threshold for rendered output buffers, in microseconds, after which decoder input buffers may be dropped.

The default value is TIME_UNSET and therefore no input buffers will be dropped due to this logic.

This method is experimental and will be renamed or removed in a future release.

Parameters
long lateThresholdToDropDecoderInputUs

The threshold.

experimentalSetMediaCodecAsyncCryptoFlagEnabled

@CanIgnoreReturnValue
public final DefaultRenderersFactory experimentalSetMediaCodecAsyncCryptoFlagEnabled(
    boolean enableAsyncCryptoFlag
)

Sets whether to enable CONFIGURE_FLAG_USE_CRYPTO_ASYNC on API 34 and above when operating the codec in asynchronous mode.

This method is experimental. Its default value may change, or it may be renamed or removed in a future release.

experimentalSetParseAv1SampleDependencies

@CanIgnoreReturnValue
public final DefaultRenderersFactory experimentalSetParseAv1SampleDependencies(
    boolean parseAv1SampleDependencies
)

Sets whether VIDEO_AV1 bitstream parsing for sample dependency information is enabled. Knowing which input frames are not depended on can speed up seeking and reduce dropped frames.

Defaults to false.

This method is experimental and will be renamed or removed in a future release.

Parameters
boolean parseAv1SampleDependencies