DefaultRenderersFactory
@UnstableApi
public class DefaultRenderersFactory implements RenderersFactory
Default RenderersFactory implementation.
Summary
Nested types |
|---|
@DocumentedModes 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 |
Public constructors |
|---|
DefaultRenderersFactory(Context context) |
Public methods |
|
|---|---|
Renderer[] |
createRenderers( |
@Nullable Renderer |
createSecondaryRenderer(Provides a secondary |
DefaultRenderersFactory |
@RequiresApi(value = 34)Sets whether the |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets whether a secondary |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets the late threshold for rendered output buffers, in microseconds, after which decoder input buffers may be dropped. |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets whether to enable |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets whether |
final DefaultRenderersFactory |
Disables |
final DefaultRenderersFactory |
Enables |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets the maximum duration for which video renderers can attempt to seamlessly join an ongoing playback. |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets whether floating point audio should be output when possible. |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets whether to enable setting playback speed via |
final DefaultRenderersFactory |
@CanIgnoreReturnValueThis method is deprecated. Use |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets whether to enable fallback to lower-priority decoders if decoder initialization fails. |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets the extension renderer mode, which determines if and how available extension renderers are used. |
final DefaultRenderersFactory |
@CanIgnoreReturnValueSets a |
Protected methods |
|
|---|---|
void |
buildAudioRenderers(Builds audio renderers for use by the player. |
@Nullable AudioSink |
buildAudioSink(Builds an |
void |
buildCameraMotionRenderers(Builds camera motion renderers for use by the player. |
void |
This method is deprecated. Override |
void |
buildImageRenderers(Context context, ArrayList<Renderer> out)Builds image renderers for use by the player. |
void |
buildMetadataRenderers(Builds metadata renderers for use by the player. |
void |
buildMiscellaneousRenderers(Builds any miscellaneous renderers used by the player. |
@Nullable Renderer |
buildSecondaryVideoRenderer(Builds a secondary video renderer for an |
void |
buildTextRenderers(Builds text renderers for use by the player. |
void |
buildVideoRenderers(Builds video renderers for use by the player. |
MediaCodecAdapter.Factory |
Returns the |
ImageDecoder.Factory |
@ForOverrideReturns the |
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
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 |
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 |
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. |
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 |
| 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 |
Whether bitstream parsing is enabled. |
forceDisableMediaCodecAsynchronousQueueing
@CanIgnoreReturnValue
public final DefaultRenderersFactory forceDisableMediaCodecAsynchronousQueueing()
Disables androidx.media3.exoplayer.mediacodec.MediaCodecRenderer instances from operating their MediaCodec in asynchronous mode and perform asynchronous queueing. MediaCodec instances will be operated synchronous mode.
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
forceEnableMediaCodecAsynchronousQueueing
@CanIgnoreReturnValue
public final DefaultRenderersFactory forceEnableMediaCodecAsynchronousQueueing()
Enables androidx.media3.exoplayer.mediacodec.MediaCodecRenderer instances to operate their MediaCodec in asynchronous mode and perform asynchronous queueing.
This feature can be enabled only on devices with API versions >= 23. For devices with older API versions, this method is a no-op.
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
setAllowedVideoJoiningTimeMs
@CanIgnoreReturnValue
public final DefaultRenderersFactory setAllowedVideoJoiningTimeMs(long allowedVideoJoiningTimeMs)
Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing playback.
The default value is DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS.
| Parameters | |
|---|---|
long allowedVideoJoiningTimeMs |
The maximum duration for which video renderers can attempt to seamlessly join an ongoing playback, in milliseconds. |
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
setEnableAudioFloatOutput
@CanIgnoreReturnValue
public final DefaultRenderersFactory setEnableAudioFloatOutput(boolean enableFloatOutput)
Sets whether floating point audio should be output when possible.
Enabling floating point output disables audio processing, but may allow for higher quality audio output.
The default value is false.
| Parameters | |
|---|---|
boolean enableFloatOutput |
Whether to enable use of floating point audio output, if available. |
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
setEnableAudioOutputPlaybackParameters
@CanIgnoreReturnValue
public final DefaultRenderersFactory setEnableAudioOutputPlaybackParameters(
boolean enableAudioOutputPlaybackParameters
)
Sets whether to enable setting playback speed via AudioOutput, using setPlaybackParams by default, rather than using application-level audio speed adjustment.
If enabled and supported, new playback speed settings will take effect more quickly because they are applied at the audio mixer, rather than at the point of writing data to the output. However, the setting is more device-dependent, less reliable and may offer fewer available speeds.
If the requested speed is not supported the player's event listener will be notified twice on setting playback speed, once with the requested speed, then again with the old playback speed reflecting the fact that the requested speed was not supported.
| Parameters | |
|---|---|
boolean enableAudioOutputPlaybackParameters |
Whether to enable setting playback speed via |
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
setEnableAudioTrackPlaybackParams
@CanIgnoreReturnValue
public final DefaultRenderersFactorysetEnableAudioTrackPlaybackParams(
boolean enableAudioTrackPlaybackParams
)
setEnableDecoderFallback
@CanIgnoreReturnValue
public final DefaultRenderersFactory setEnableDecoderFallback(boolean enableDecoderFallback)
Sets whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is less efficient or slower than the primary decoder.
| Parameters | |
|---|---|
boolean enableDecoderFallback |
Whether to enable fallback to lower-priority decoders if decoder initialization fails. |
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
setExtensionRendererMode
@CanIgnoreReturnValue
public final DefaultRenderersFactory setExtensionRendererMode(
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode
)
Sets the extension renderer mode, which determines if and how available extension renderers are used. Note that extensions must be included in the application build for them to be considered available.
The default value is EXTENSION_RENDERER_MODE_OFF.
| Parameters | |
|---|---|
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
setMediaCodecSelector
@CanIgnoreReturnValue
public final DefaultRenderersFactory setMediaCodecSelector(MediaCodecSelector mediaCodecSelector)
Sets a MediaCodecSelector for use by MediaCodec based renderers.
The default value is DEFAULT.
| Parameters | |
|---|---|
MediaCodecSelector mediaCodecSelector |
The |
| Returns | |
|---|---|
DefaultRenderersFactory |
This factory, for convenience. |
Protected methods
buildAudioRenderers
protected 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.
| Parameters | |
|---|---|
Context context |
The |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
MediaCodecSelector mediaCodecSelector |
A decoder selector. |
boolean enableDecoderFallback |
Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is slower/less efficient than the primary decoder. |
AudioSink audioSink |
A sink to which the renderers will output. |
Handler eventHandler |
A handler to use when invoking event listeners and outputs. |
AudioRendererEventListener eventListener |
An event listener. |
ArrayList<Renderer> out |
An array to which the built renderers should be appended. |
buildAudioSink
protected @Nullable AudioSink buildAudioSink(
Context context,
boolean enableFloatOutput,
boolean enableAudioOutputPlaybackParams
)
Builds an AudioSink to which the audio renderers will output.
| Parameters | |
|---|---|
Context context |
The |
boolean enableFloatOutput |
Whether to enable use of floating point audio output, if available. |
boolean enableAudioOutputPlaybackParams |
Whether to enable setting playback speed via the |
| Returns | |
|---|---|
@Nullable AudioSink |
The |
buildCameraMotionRenderers
protected void buildCameraMotionRenderers(
Context context,
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
ArrayList<Renderer> out
)
Builds camera motion renderers for use by the player.
| Parameters | |
|---|---|
Context context |
The |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
ArrayList<Renderer> out |
An array to which the built renderers should be appended. |
buildImageRenderers
protected void buildImageRenderers(Context context, ArrayList<Renderer> out)
Builds image renderers for use by the player.
The ImageRenderer is built with ImageOutput set to null and ImageDecoder.Factory set to ImageDecoder.Factory.DEFAULT by default.
buildMetadataRenderers
protected void buildMetadataRenderers(
Context context,
MetadataOutput output,
Looper outputLooper,
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
ArrayList<Renderer> out
)
Builds metadata renderers for use by the player.
| Parameters | |
|---|---|
Context context |
The |
MetadataOutput output |
An output for the renderers. |
Looper outputLooper |
The looper associated with the thread on which the output should be called. |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
ArrayList<Renderer> out |
An array to which the built renderers should be appended. |
buildMiscellaneousRenderers
protected void buildMiscellaneousRenderers(
Context context,
Handler eventHandler,
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
ArrayList<Renderer> out
)
Builds any miscellaneous renderers used by the player.
| Parameters | |
|---|---|
Context context |
The |
Handler eventHandler |
A handler to use when invoking event listeners and outputs. |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
ArrayList<Renderer> out |
An array to which the built renderers should be appended. |
buildSecondaryVideoRenderer
protected @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.
The created secondary video Renderer should match its primary Renderer in reported track type support and RendererCapabilities.
If buildVideoRenderers is overridden to provide custom video renderers, then this method must also be overridden to supply corresponding custom secondary video renderers.
| Parameters | |
|---|---|
Renderer renderer |
The primary |
Context context |
The |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
MediaCodecSelector mediaCodecSelector |
A decoder selector. |
boolean enableDecoderFallback |
Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is slower/less efficient than the primary decoder. |
Handler eventHandler |
A handler associated with the main thread's looper. |
VideoRendererEventListener eventListener |
An event listener. |
long allowedVideoJoiningTimeMs |
The maximum duration for which video renderers can attempt to seamlessly join an ongoing playback, in milliseconds. |
| Returns | |
|---|---|
@Nullable Renderer |
The created secondary |
buildTextRenderers
protected void buildTextRenderers(
Context context,
TextOutput output,
Looper outputLooper,
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
ArrayList<Renderer> out
)
Builds text renderers for use by the player.
| Parameters | |
|---|---|
Context context |
The |
TextOutput output |
An output for the renderers. |
Looper outputLooper |
The looper associated with the thread on which the output should be called. |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
ArrayList<Renderer> out |
An array to which the built renderers should be appended. |
buildVideoRenderers
protected 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.
| Parameters | |
|---|---|
Context context |
The |
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode |
The extension renderer mode. |
MediaCodecSelector mediaCodecSelector |
A decoder selector. |
boolean enableDecoderFallback |
Whether to enable fallback to lower-priority decoders if decoder initialization fails. This may result in using a decoder that is slower/less efficient than the primary decoder. |
Handler eventHandler |
A handler associated with the main thread's looper. |
VideoRendererEventListener eventListener |
An event listener. |
long allowedVideoJoiningTimeMs |
The maximum duration for which video renderers can attempt to seamlessly join an ongoing playback, in milliseconds. |
ArrayList<Renderer> out |
An array to which the built renderers should be appended. |
getCodecAdapterFactory
protected MediaCodecAdapter.Factory getCodecAdapterFactory()
Returns the MediaCodecAdapter.Factory that will be used when creating androidx.media3.exoplayer.mediacodec.MediaCodecRenderer instances.
getImageDecoderFactory
@ForOverride
protected ImageDecoder.Factory getImageDecoderFactory(Context context)
Returns the ImageDecoder.Factory used to build the image renderer.