Interface Renderer

    • Field Detail

      • MSG_SET_VIDEO_OUTPUT

        static final int MSG_SET_VIDEO_OUTPUT
        The type of a message that can be passed to a video renderer via ExoPlayer.createMessage(Target). The message payload is normally a Surface, 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_AUDIO_ATTRIBUTES

        static final int MSG_SET_AUDIO_ATTRIBUTES
        A type of a message that can be passed to an audio renderer via ExoPlayer.createMessage(Target). The message payload should be an AudioAttributes instance 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 returned C.AudioUsage to build an audio attributes instance.

        See Also:
        Constant Field Values
      • MSG_SET_SKIP_SILENCE_ENABLED

        static final int MSG_SET_SKIP_SILENCE_ENABLED
        The type of a message that can be passed to an audio renderer via ExoPlayer.createMessage(Target). The message payload should be a Boolean instance 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
        The type of a message that can be passed to audio and video renderers via ExoPlayer.createMessage(Target). The message payload should be an Integer instance 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_CUSTOM_BASE

        static final int MSG_CUSTOM_BASE
        Applications or extensions may define custom MSG_* 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
        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
        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
    • Method Detail

      • getName

        String getName()
        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.
      • getCapabilities

        RendererCapabilities getCapabilities()
        Returns the capabilities of the renderer.
        Returns:
        The capabilities of the renderer.
      • setIndex

        void setIndex​(int index)
        Sets the index of this renderer within the player.
        Parameters:
        index - The renderer index.
      • getMediaClock

        @Nullable
        MediaClock getMediaClock()
        If the renderer advances its own playback position then this method returns a corresponding MediaClock. If provided, the player will use the returned MediaClock as its source of time during playback. A player may have at most one renderer that returns a MediaClock from this method.
        Returns:
        The MediaClock tracking the playback position of the renderer, or null.
      • enable

        void enable​(RendererConfiguration configuration,
                    Format[] formats,
                    SampleStream stream,
                    long positionUs,
                    boolean joining,
                    boolean mayRenderStartOfStream,
                    long startPositionUs,
                    long offsetUs)
             throws ExoPlaybackException
        Enables the renderer to consume from the specified SampleStream.

        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 - The SampleStream from 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 not STATE_STARTED yet.
        startPositionUs - The start position of the stream in renderer time (microseconds).
        offsetUs - The offset to be added to timestamps of buffers read from stream before they are rendered.
        Throws:
        ExoPlaybackException - If an error occurs.
      • replaceStream

        void replaceStream​(Format[] formats,
                           SampleStream stream,
                           long startPositionUs,
                           long offsetUs)
                    throws ExoPlaybackException
        Replaces the SampleStream from 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 - The SampleStream from 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 from stream before they are rendered.
        Throws:
        ExoPlaybackException - If an error occurs.
      • getStream

        @Nullable
        SampleStream getStream()
        Returns the SampleStream being consumed, or null if the renderer is disabled.
      • hasReadStreamToEnd

        boolean hasReadStreamToEnd()
        Returns whether the renderer has read the current SampleStream to the end.

        This method may be called when the renderer is in the following states: STATE_ENABLED, STATE_STARTED.

      • getReadingPositionUs

        long getReadingPositionUs()
        Returns the renderer time up to which the renderer has read samples, in microseconds, or C.TIME_END_OF_SOURCE if the renderer has read the current SampleStream to the end.

        This method may be called when the renderer is in the following states: STATE_ENABLED, STATE_STARTED.

      • setCurrentStreamFinal

        void setCurrentStreamFinal()
        Signals to the renderer that the current SampleStream will 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()
        Returns whether the current SampleStream will be the final one supplied before the renderer is next disabled or reset.
      • maybeThrowStreamError

        void maybeThrowStreamError()
                            throws IOException
        Throws an error that's preventing the renderer from reading from its SampleStream. 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 ExoPlaybackException
        Signals to the renderer that a position discontinuity has occurred.

        After a position discontinuity, the renderer's SampleStream is 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 ExoPlaybackException
        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 from currentPlaybackSpeed, 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 ExoPlaybackException
        Incrementally renders the SampleStream.

        If the renderer is in the STATE_ENABLED state then each call to this method will do work toward being ready to render the SampleStream when the renderer is started. If the renderer is in the STATE_STARTED state then calls to this method will render the SampleStream in 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_ENABLED state, unless it's the initial start of the media after calling enable(RendererConfiguration, Format[], SampleStream, long, boolean, boolean, long, long) with mayRenderStartOfStream set to false.

        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()
        Whether the renderer is able to immediately render media from the current position.

        If the renderer is in the STATE_STARTED state 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_ENABLED state 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()
        Whether the renderer is ready for the ExoPlayer instance to transition to Player.STATE_ENDED. The player will make this transition as soon as true is 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()
        Stops the renderer, transitioning it to the STATE_ENABLED state.

        This method may be called when the renderer is in the following states: STATE_STARTED.

      • disable

        void disable()
        Disable the renderer, transitioning it to the STATE_DISABLED state.

        This method may be called when the renderer is in the following states: STATE_ENABLED.

      • reset

        void reset()
        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.