Interface Renderer
-
- All Superinterfaces:
PlayerMessage.Target
- All Known Implementing Classes:
BaseRenderer,CameraMotionRenderer,DecoderAudioRenderer,DecoderVideoRenderer,FakeAudioRenderer,FakeMediaClockRenderer,FakeRenderer,FakeVideoRenderer,FfmpegAudioRenderer,LibflacAudioRenderer,Libgav1VideoRenderer,LibopusAudioRenderer,LibvpxVideoRenderer,MediaCodecAudioRenderer,MediaCodecRenderer,MediaCodecVideoRenderer,MetadataRenderer,NoSampleRenderer,TextRenderer
@Deprecated public interface Renderer extends PlayerMessage.Target
Deprecated.com.google.android.exoplayer2 is deprecated. Please migrate to androidx.media3 (which contains the same ExoPlayer code). See the migration guide for more details, including a script to help with the migration.Renders media read from aSampleStream.Internally, a renderer's lifecycle is managed by the owning
ExoPlayer. The renderer is transitioned through various states as the overall playback state and enabled tracks change. The valid state transitions are shown below, annotated with the methods that are called during each transition.
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interfaceRenderer.MessageTypeDeprecated.Represents a type of message that can be passed to a renderer.static interfaceRenderer.StateDeprecated.The renderer states.static interfaceRenderer.WakeupListenerDeprecated.Some renderers can signal whenrender(long, long)should be called.
-
Field Summary
Fields Modifier and Type Field Description static intMSG_CUSTOM_BASEDeprecated.Applications or extensions may define customMSG_*constants that can be passed to renderers.static intMSG_SET_AUDIO_ATTRIBUTESDeprecated.A type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_AUDIO_SESSION_IDDeprecated.The type of a message that can be passed to audio and video renderers viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_AUX_EFFECT_INFODeprecated.A type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_CAMERA_MOTION_LISTENERDeprecated.The type of a message that can be passed to a camera motion renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_CHANGE_FRAME_RATE_STRATEGYDeprecated.The type of a message that can be passed to a video renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_PREFERRED_AUDIO_DEVICEDeprecated.The type of a message that can be passed to audio renderers viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_SCALING_MODEDeprecated.The type of a message that can be passed to aMediaCodec-based video renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_SKIP_SILENCE_ENABLEDDeprecated.The type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_VIDEO_EFFECTSDeprecated.The type of a message that can be passed to a video renderer.static intMSG_SET_VIDEO_FRAME_METADATA_LISTENERDeprecated.The type of a message that can be passed to a video renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_VIDEO_OUTPUTDeprecated.The type of a message that can be passed to a video renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_VIDEO_OUTPUT_RESOLUTIONDeprecated.The type of a message that can be passed to a video renderer to set the desired output resolution.static intMSG_SET_VOLUMEDeprecated.A type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target).static intMSG_SET_WAKEUP_LISTENERDeprecated.The type of a message that can be passed to aRendererviaExoPlayer.createMessage(PlayerMessage.Target), to inform the renderer that it can schedule waking up another component.static intSTATE_DISABLEDDeprecated.The renderer is disabled.static intSTATE_ENABLEDDeprecated.The renderer is enabled but not started.static intSTATE_STARTEDDeprecated.The renderer is started.
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Deprecated Methods Modifier and Type Method Description voiddisable()Deprecated.Disable the renderer, transitioning it to theSTATE_DISABLEDstate.voidenable(RendererConfiguration configuration, Format[] formats, SampleStream stream, long positionUs, boolean joining, boolean mayRenderStartOfStream, long startPositionUs, long offsetUs)Deprecated.Enables the renderer to consume from the specifiedSampleStream.RendererCapabilitiesgetCapabilities()Deprecated.Returns the capabilities of the renderer.MediaClockgetMediaClock()Deprecated.If the renderer advances its own playback position then this method returns a correspondingMediaClock.StringgetName()Deprecated.Returns the name of this renderer, for logging and debugging purposes.longgetReadingPositionUs()Deprecated.Returns the renderer time up to which the renderer has read samples, in microseconds, orC.TIME_END_OF_SOURCEif the renderer has read the currentSampleStreamto the end.@com.google.android.exoplayer2.Renderer.State intgetState()Deprecated.Returns the current state of the renderer.SampleStreamgetStream()Deprecated.Returns theSampleStreambeing consumed, or null if the renderer is disabled.@com.google.android.exoplayer2.C.TrackType intgetTrackType()Deprecated.Returns the track type that the renderer handles.booleanhasReadStreamToEnd()Deprecated.Returns whether the renderer has read the currentSampleStreamto the end.voidinit(int index, PlayerId playerId)Deprecated.Initializes the renderer for playback with a player.booleanisCurrentStreamFinal()Deprecated.Returns whether the currentSampleStreamwill be the final one supplied before the renderer is next disabled or reset.booleanisEnded()Deprecated.Whether the renderer is ready for theExoPlayerinstance to transition toPlayer.STATE_ENDED.booleanisReady()Deprecated.Whether the renderer is able to immediately render media from the current position.voidmaybeThrowStreamError()Deprecated.Throws an error that's preventing the renderer from reading from itsSampleStream.default voidrelease()Deprecated.Releases the renderer.voidrender(long positionUs, long elapsedRealtimeUs)Deprecated.Incrementally renders theSampleStream.voidreplaceStream(Format[] formats, SampleStream stream, long startPositionUs, long offsetUs)Deprecated.Replaces theSampleStreamfrom which samples will be consumed.voidreset()Deprecated.Forces the renderer to give up any resources (e.g.voidresetPosition(long positionUs)Deprecated.Signals to the renderer that a position discontinuity has occurred.voidsetCurrentStreamFinal()Deprecated.Signals to the renderer that the currentSampleStreamwill be the final one supplied before it is next disabled or reset.default voidsetPlaybackSpeed(float currentPlaybackSpeed, float targetPlaybackSpeed)Deprecated.Indicates the playback speed to this renderer.voidstart()Deprecated.Starts the renderer, meaning that calls torender(long, long)will cause media to be rendered.voidstop()Deprecated.Stops the renderer, transitioning it to theSTATE_ENABLEDstate.-
Methods inherited from interface com.google.android.exoplayer2.PlayerMessage.Target
handleMessage
-
-
-
-
Field Detail
-
MSG_SET_VIDEO_OUTPUT
static final int MSG_SET_VIDEO_OUTPUT
Deprecated.The type of a message that can be passed to a video renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload is normally aSurface, however some video renderers may accept other outputs (e.g.,VideoDecoderOutputBufferRenderer).If the receiving renderer does not support the payload type as an output, then it will clear any existing output that it has.
- See Also:
- Constant Field Values
-
MSG_SET_VOLUME
static final int MSG_SET_VOLUME
Deprecated.A type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be aFloatwith 0 being silence and 1 being unity gain.- See Also:
- Constant Field Values
-
MSG_SET_AUDIO_ATTRIBUTES
static final int MSG_SET_AUDIO_ATTRIBUTES
Deprecated.A type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be anAudioAttributesinstance that will configure the underlying audio track. If not set, the default audio attributes will be used. They are suitable for general media playback.Setting the audio attributes during playback may introduce a short gap in audio output as the audio track is recreated. A new audio session id will also be generated.
If tunneling is enabled by the track selector, the specified audio attributes will be ignored, but they will take effect if audio is later played without tunneling.
If the device is running a build before platform API version 21, audio attributes cannot be set directly on the underlying audio track. In this case, the usage will be mapped onto an equivalent stream type using
Util.getStreamTypeForAudioUsage(int).To get audio attributes that are equivalent to a legacy stream type, pass the stream type to
Util.getAudioUsageForStreamType(int)and use the returnedC.AudioUsageto build an audio attributes instance.- See Also:
- Constant Field Values
-
MSG_SET_SCALING_MODE
static final int MSG_SET_SCALING_MODE
Deprecated.The type of a message that can be passed to aMediaCodec-based video renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be one of the integer scaling modes inC.VideoScalingMode.Note that the scaling mode only applies if the
Surfacetargeted by the renderer is owned by aSurfaceView.- See Also:
- Constant Field Values
-
MSG_SET_CHANGE_FRAME_RATE_STRATEGY
static final int MSG_SET_CHANGE_FRAME_RATE_STRATEGY
Deprecated.The type of a message that can be passed to a video renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be one of the integer strategy constants inC.VideoChangeFrameRateStrategy.- See Also:
- Constant Field Values
-
MSG_SET_AUX_EFFECT_INFO
static final int MSG_SET_AUX_EFFECT_INFO
Deprecated.A type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be anAuxEffectInfoinstance representing an auxiliary audio effect for the underlying audio track.- See Also:
- Constant Field Values
-
MSG_SET_VIDEO_FRAME_METADATA_LISTENER
static final int MSG_SET_VIDEO_FRAME_METADATA_LISTENER
Deprecated.The type of a message that can be passed to a video renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be aVideoFrameMetadataListenerinstance, or null.- See Also:
- Constant Field Values
-
MSG_SET_CAMERA_MOTION_LISTENER
static final int MSG_SET_CAMERA_MOTION_LISTENER
Deprecated.The type of a message that can be passed to a camera motion renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be aCameraMotionListenerinstance, or null.- See Also:
- Constant Field Values
-
MSG_SET_SKIP_SILENCE_ENABLED
static final int MSG_SET_SKIP_SILENCE_ENABLED
Deprecated.The type of a message that can be passed to an audio renderer viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be aBooleaninstance telling whether to enable or disable skipping silences in the audio stream.- See Also:
- Constant Field Values
-
MSG_SET_AUDIO_SESSION_ID
static final int MSG_SET_AUDIO_SESSION_ID
Deprecated.The type of a message that can be passed to audio and video renderers viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be anIntegerinstance representing the audio session ID that will be attached to the underlying audio track. Video renderers that support tunneling will use the audio session ID when tunneling is enabled.- See Also:
- Constant Field Values
-
MSG_SET_WAKEUP_LISTENER
static final int MSG_SET_WAKEUP_LISTENER
Deprecated.The type of a message that can be passed to aRendererviaExoPlayer.createMessage(PlayerMessage.Target), to inform the renderer that it can schedule waking up another component.The message payload must be a
Renderer.WakeupListenerinstance.- See Also:
- Constant Field Values
-
MSG_SET_PREFERRED_AUDIO_DEVICE
static final int MSG_SET_PREFERRED_AUDIO_DEVICE
Deprecated.The type of a message that can be passed to audio renderers viaExoPlayer.createMessage(PlayerMessage.Target). The message payload should be anAudioDeviceInfoinstance representing the preferred audio device, or null to restore the default.- See Also:
- Constant Field Values
-
MSG_SET_VIDEO_EFFECTS
static final int MSG_SET_VIDEO_EFFECTS
Deprecated.The type of a message that can be passed to a video renderer. The message payload should be aListcontaining video effects.- See Also:
- Constant Field Values
-
MSG_SET_VIDEO_OUTPUT_RESOLUTION
static final int MSG_SET_VIDEO_OUTPUT_RESOLUTION
Deprecated.The type of a message that can be passed to a video renderer to set the desired output resolution. The message payload should be aSizeof the desired output width and height. Use this method only when playing with video effects.- See Also:
- Constant Field Values
-
MSG_CUSTOM_BASE
static final int MSG_CUSTOM_BASE
Deprecated.Applications or extensions may define customMSG_*constants that can be passed to renderers. These custom constants must be greater than or equal to this value.- See Also:
- Constant Field Values
-
STATE_DISABLED
static final int STATE_DISABLED
Deprecated.The renderer is disabled. A renderer in this state will not proactively acquire resources that it requires for rendering (e.g., media decoders), but may continue to hold any that it already has.reset()can be called to force the renderer to release such resources.- See Also:
- Constant Field Values
-
STATE_ENABLED
static final int STATE_ENABLED
Deprecated.The renderer is enabled but not started. A renderer in this state may render media at the current position (e.g. an initial video frame), but the position will not advance. A renderer in this state will typically hold resources that it requires for rendering (e.g. media decoders).- See Also:
- Constant Field Values
-
STATE_STARTED
static final int STATE_STARTED
Deprecated.The renderer is started. Calls torender(long, long)will cause media to be rendered.- See Also:
- Constant Field Values
-
-
Method Detail
-
getName
String getName()
Deprecated.Returns the name of this renderer, for logging and debugging purposes. Should typically be the renderer's (un-obfuscated) class name.- Returns:
- The name of this renderer.
-
getTrackType
@com.google.android.exoplayer2.C.TrackType int getTrackType()
Deprecated.Returns the track type that the renderer handles.- Returns:
- The
track type. - See Also:
ExoPlayer.getRendererType(int)
-
getCapabilities
RendererCapabilities getCapabilities()
Deprecated.Returns the capabilities of the renderer.- Returns:
- The capabilities of the renderer.
-
init
void init(int index, PlayerId playerId)Deprecated.Initializes the renderer for playback with a player.- Parameters:
index- The renderer index within the player.playerId- ThePlayerIdof the player.
-
getMediaClock
@Nullable MediaClock getMediaClock()
Deprecated.If the renderer advances its own playback position then this method returns a correspondingMediaClock. If provided, the player will use the returnedMediaClockas its source of time during playback. A player may have at most one renderer that returns aMediaClockfrom this method.- Returns:
- The
MediaClocktracking the playback position of the renderer, or null.
-
getState
@com.google.android.exoplayer2.Renderer.State int getState()
Deprecated.Returns the current state of the renderer.- Returns:
- The current state. One of
STATE_DISABLED,STATE_ENABLEDandSTATE_STARTED.
-
enable
void enable(RendererConfiguration configuration, Format[] formats, SampleStream stream, long positionUs, boolean joining, boolean mayRenderStartOfStream, long startPositionUs, long offsetUs) throws ExoPlaybackException
Deprecated.Enables the renderer to consume from the specifiedSampleStream.This method may be called when the renderer is in the following states:
STATE_DISABLED.- Parameters:
configuration- The renderer configuration.formats- The enabled formats.stream- TheSampleStreamfrom which the renderer should consume.positionUs- The player's current position.joining- Whether this renderer is being enabled to join an ongoing playback.mayRenderStartOfStream- Whether this renderer is allowed to render the start of the stream even if the state is notSTATE_STARTEDyet.startPositionUs- The start position of the stream in renderer time (microseconds).offsetUs- The offset to be added to timestamps of buffers read fromstreambefore they are rendered.- Throws:
ExoPlaybackException- If an error occurs.
-
start
void start() throws ExoPlaybackExceptionDeprecated.Starts the renderer, meaning that calls torender(long, long)will cause media to be rendered.This method may be called when the renderer is in the following states:
STATE_ENABLED.- Throws:
ExoPlaybackException- If an error occurs.
-
replaceStream
void replaceStream(Format[] formats, SampleStream stream, long startPositionUs, long offsetUs) throws ExoPlaybackException
Deprecated.Replaces theSampleStreamfrom which samples will be consumed.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.- Parameters:
formats- The enabled formats.stream- TheSampleStreamfrom which the renderer should consume.startPositionUs- The start position of the new stream in renderer time (microseconds).offsetUs- The offset to be added to timestamps of buffers read fromstreambefore they are rendered.- Throws:
ExoPlaybackException- If an error occurs.
-
getStream
@Nullable SampleStream getStream()
Deprecated.Returns theSampleStreambeing consumed, or null if the renderer is disabled.
-
hasReadStreamToEnd
boolean hasReadStreamToEnd()
Deprecated.Returns whether the renderer has read the currentSampleStreamto the end.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.
-
getReadingPositionUs
long getReadingPositionUs()
Deprecated.Returns the renderer time up to which the renderer has read samples, in microseconds, orC.TIME_END_OF_SOURCEif the renderer has read the currentSampleStreamto the end.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.
-
setCurrentStreamFinal
void setCurrentStreamFinal()
Deprecated.Signals to the renderer that the currentSampleStreamwill be the final one supplied before it is next disabled or reset.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.
-
isCurrentStreamFinal
boolean isCurrentStreamFinal()
Deprecated.Returns whether the currentSampleStreamwill be the final one supplied before the renderer is next disabled or reset.
-
maybeThrowStreamError
void maybeThrowStreamError() throws IOExceptionDeprecated.Throws an error that's preventing the renderer from reading from itsSampleStream. Does nothing if no such error exists.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.- Throws:
IOException- An error that's preventing the renderer from making progress or buffering more data.
-
resetPosition
void resetPosition(long positionUs) throws ExoPlaybackExceptionDeprecated.Signals to the renderer that a position discontinuity has occurred.After a position discontinuity, the renderer's
SampleStreamis guaranteed to provide samples starting from a key frame.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.- Parameters:
positionUs- The new playback position in microseconds.- Throws:
ExoPlaybackException- If an error occurs handling the reset.
-
setPlaybackSpeed
default void setPlaybackSpeed(float currentPlaybackSpeed, float targetPlaybackSpeed) throws ExoPlaybackExceptionDeprecated.Indicates the playback speed to this renderer.The default implementation is a no-op.
- Parameters:
currentPlaybackSpeed- The factor by which playback is currently sped up.targetPlaybackSpeed- The target factor by which playback should be sped up. This may be different fromcurrentPlaybackSpeed, for example, if the speed is temporarily adjusted for live playback.- Throws:
ExoPlaybackException- If an error occurs handling the playback speed.
-
render
void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackExceptionDeprecated.Incrementally renders theSampleStream.If the renderer is in the
STATE_ENABLEDstate then each call to this method will do work toward being ready to render theSampleStreamwhen the renderer is started. If the renderer is in theSTATE_STARTEDstate then calls to this method will render theSampleStreamin sync with the specified media positions.The renderer may also render the very start of the media at the current position (e.g. the first frame of a video stream) while still in the
STATE_ENABLEDstate, unless it's the initial start of the media after callingenable(RendererConfiguration, Format[], SampleStream, long, boolean, boolean, long, long)withmayRenderStartOfStreamset tofalse.This method should return quickly, and should not block if the renderer is unable to make useful progress.
This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.- Parameters:
positionUs- The current media time in microseconds, measured at the start of the current iteration of the rendering loop.elapsedRealtimeUs-SystemClock.elapsedRealtime()in microseconds, measured at the start of the current iteration of the rendering loop.- Throws:
ExoPlaybackException- If an error occurs.
-
isReady
boolean isReady()
Deprecated.Whether the renderer is able to immediately render media from the current position.If the renderer is in the
STATE_STARTEDstate then returning true indicates that the renderer has everything that it needs to continue playback. Returning false indicates that the player should pause until the renderer is ready.If the renderer is in the
STATE_ENABLEDstate then returning true indicates that the renderer is ready for playback to be started. Returning false indicates that it is not.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.- Returns:
- Whether the renderer is ready to render media.
-
isEnded
boolean isEnded()
Deprecated.Whether the renderer is ready for theExoPlayerinstance to transition toPlayer.STATE_ENDED. The player will make this transition as soon astrueis returned by all of its renderers.This method may be called when the renderer is in the following states:
STATE_ENABLED,STATE_STARTED.- Returns:
- Whether the renderer is ready for the player to transition to the ended state.
-
stop
void stop()
Deprecated.Stops the renderer, transitioning it to theSTATE_ENABLEDstate.This method may be called when the renderer is in the following states:
STATE_STARTED.
-
disable
void disable()
Deprecated.Disable the renderer, transitioning it to theSTATE_DISABLEDstate.This method may be called when the renderer is in the following states:
STATE_ENABLED.
-
reset
void reset()
Deprecated.Forces the renderer to give up any resources (e.g. media decoders) that it may be holding. If the renderer is not holding any resources, the call is a no-op.This method may be called when the renderer is in the following states:
STATE_DISABLED.
-
release
default void release()
Deprecated.Releases the renderer.The renderer must not be used after calling this method.
-
-