public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implements MediaClock
MediaCodec and AudioTrack.| Modifier and Type | Class and Description |
|---|---|
static interface |
MediaCodecAudioTrackRenderer.EventListener
Interface definition for a callback to be notified of
MediaCodecAudioTrackRenderer
events. |
MediaCodecTrackRenderer.DecoderInitializationExceptioncodecCounters, eventHandler, SOURCE_STATE_NOT_READY, SOURCE_STATE_READY, SOURCE_STATE_READY_READ_MAY_FAILEND_OF_TRACK_US, MATCH_LONGEST_US, STATE_ENABLED, STATE_PREPARED, STATE_RELEASED, STATE_STARTED, STATE_UNPREPARED, UNKNOWN_TIME_US| Constructor and Description |
|---|
MediaCodecAudioTrackRenderer(SampleSource[] sources,
MediaCodecSelector mediaCodecSelector,
DrmSessionManager drmSessionManager,
boolean playClearSamplesWithoutKeys,
Handler eventHandler,
MediaCodecAudioTrackRenderer.EventListener eventListener,
AudioCapabilities audioCapabilities,
int streamType) |
MediaCodecAudioTrackRenderer(SampleSource source,
MediaCodecSelector mediaCodecSelector) |
MediaCodecAudioTrackRenderer(SampleSource source,
MediaCodecSelector mediaCodecSelector,
DrmSessionManager drmSessionManager,
boolean playClearSamplesWithoutKeys) |
MediaCodecAudioTrackRenderer(SampleSource source,
MediaCodecSelector mediaCodecSelector,
DrmSessionManager drmSessionManager,
boolean playClearSamplesWithoutKeys,
Handler eventHandler,
MediaCodecAudioTrackRenderer.EventListener eventListener) |
MediaCodecAudioTrackRenderer(SampleSource source,
MediaCodecSelector mediaCodecSelector,
DrmSessionManager drmSessionManager,
boolean playClearSamplesWithoutKeys,
Handler eventHandler,
MediaCodecAudioTrackRenderer.EventListener eventListener,
AudioCapabilities audioCapabilities,
int streamType) |
MediaCodecAudioTrackRenderer(SampleSource source,
MediaCodecSelector mediaCodecSelector,
Handler eventHandler,
MediaCodecAudioTrackRenderer.EventListener eventListener) |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
allowPassthrough(String mimeType)
Returns whether encoded audio passthrough should be used for playing back the input format.
|
protected void |
configureCodec(MediaCodec codec,
boolean codecIsAdaptive,
MediaFormat format,
MediaCrypto crypto)
Configures a newly created
MediaCodec. |
protected DecoderInfo |
getDecoderInfo(MediaCodecSelector mediaCodecSelector,
String mimeType,
boolean requiresSecureDecoder)
Returns a
DecoderInfo for a given format. |
protected MediaClock |
getMediaClock()
If the renderer advances its own playback position then this method returns a corresponding
MediaClock. |
long |
getPositionUs() |
protected void |
handleAudioTrackDiscontinuity() |
void |
handleMessage(int messageType,
Object message)
Handles a message delivered to the component.
|
protected boolean |
handlesTrack(MediaCodecSelector mediaCodecSelector,
MediaFormat mediaFormat)
Returns whether this renderer is capable of handling the provided track.
|
protected boolean |
isEnded()
Whether the renderer is ready for the
ExoPlayer instance to transition to
ExoPlayer.STATE_ENDED. |
protected boolean |
isReady()
Whether the renderer is able to immediately render media from the current position.
|
protected void |
onAudioSessionId(int audioSessionId)
Invoked when the audio session id becomes known.
|
protected void |
onDisabled()
Called when the renderer is disabled.
|
protected void |
onDiscontinuity(long positionUs)
Invoked when a discontinuity is encountered.
|
protected void |
onInputFormatChanged(MediaFormatHolder holder)
Invoked when a new format is read from the upstream
SampleSource. |
protected void |
onOutputFormatChanged(MediaCodec codec,
MediaFormat outputFormat)
Invoked when the output format of the
MediaCodec changes. |
protected void |
onOutputStreamEnded()
Invoked when the output stream ends, meaning that the last output buffer has been processed
and the
MediaCodec.BUFFER_FLAG_END_OF_STREAM flag has been propagated through the
decoder. |
protected void |
onStarted()
Called when the renderer is started.
|
protected void |
onStopped()
Called when the renderer is stopped.
|
protected boolean |
processOutputBuffer(long positionUs,
long elapsedRealtimeUs,
MediaCodec codec,
ByteBuffer buffer,
MediaCodec.BufferInfo bufferInfo,
int bufferIndex,
boolean shouldSkip)
Processes the provided output buffer.
|
canReconfigureCodec, codecInitialized, doSomeWork, flushCodec, getDequeueOutputBufferTimeoutUs, getSourceState, handlesTrack, haveFormat, maybeInitCodec, onProcessedOutputBuffer, onQueuedInputBuffer, releaseCodec, shouldInitCodecdoPrepare, doSomeWork, getBufferedPositionUs, getDurationUs, getFormat, getTrackCount, maybeThrowError, onEnabled, onReleased, readSource, seekTo, shiftInputPositiongetStatepublic static final int MSG_SET_VOLUME
ExoPlayer.sendMessage(com.google.android.exoplayer.ExoPlayer.ExoPlayerComponent, int, java.lang.Object) or ExoPlayer.blockingSendMessage(com.google.android.exoplayer.ExoPlayer.ExoPlayerComponent, int, java.lang.Object). The message object
should be a Float with 0 being silence and 1 being unity gain.public static final int MSG_SET_PLAYBACK_PARAMS
ExoPlayer.sendMessage(com.google.android.exoplayer.ExoPlayer.ExoPlayerComponent, int, java.lang.Object) or ExoPlayer.blockingSendMessage(com.google.android.exoplayer.ExoPlayer.ExoPlayerComponent, int, java.lang.Object). The message object
should be a PlaybackParams, which will be used to configure the
underlying AudioTrack. The message object should not be modified by the
caller after it has been passedpublic static final int MSG_SET_STREAM_TYPE
ExoPlayer.sendMessage(com.google.android.exoplayer.ExoPlayer.ExoPlayerComponent, int, java.lang.Object) or ExoPlayer.blockingSendMessage(com.google.android.exoplayer.ExoPlayer.ExoPlayerComponent, int, java.lang.Object). The message object
should be an integer stream type accepted by AudioTrack's constructor
(see AudioTrack.AudioTrack(int, int, int, int, int, int)).
Note that when the stream type changes, the AudioTrack must be reinitialized, which can introduce a brief gap in audio output. Note also that tracks in the same audio session must share the same routing, so a new audio session id will be generated.
public MediaCodecAudioTrackRenderer(SampleSource source, MediaCodecSelector mediaCodecSelector)
source - The upstream source from which the renderer obtains samples.mediaCodecSelector - A decoder selector.public MediaCodecAudioTrackRenderer(SampleSource source, MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys)
source - The upstream source from which the renderer obtains samples.mediaCodecSelector - A decoder selector.drmSessionManager - For use with encrypted content. May be null if support for encrypted
content is not required.playClearSamplesWithoutKeys - Encrypted media may contain clear (un-encrypted) regions.
For example a media file may start with a short clear region so as to allow playback to
begin in parallel with key acquisition. This parameter specifies whether the renderer is
permitted to play clear regions of encrypted media files before drmSessionManager
has obtained the keys necessary to decrypt encrypted regions of the media.public MediaCodecAudioTrackRenderer(SampleSource source, MediaCodecSelector mediaCodecSelector, Handler eventHandler, MediaCodecAudioTrackRenderer.EventListener eventListener)
source - The upstream source from which the renderer obtains samples.mediaCodecSelector - A decoder selector.eventHandler - A handler to use when delivering events to eventListener. May be
null if delivery of events is not required.eventListener - A listener of events. May be null if delivery of events is not required.public MediaCodecAudioTrackRenderer(SampleSource source, MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys, Handler eventHandler, MediaCodecAudioTrackRenderer.EventListener eventListener)
source - The upstream source from which the renderer obtains samples.mediaCodecSelector - A decoder selector.drmSessionManager - For use with encrypted content. May be null if support for encrypted
content is not required.playClearSamplesWithoutKeys - Encrypted media may contain clear (un-encrypted) regions.
For example a media file may start with a short clear region so as to allow playback to
begin in parallel with key acquisition. This parameter specifies whether the renderer is
permitted to play clear regions of encrypted media files before drmSessionManager
has obtained the keys necessary to decrypt encrypted regions of the media.eventHandler - A handler to use when delivering events to eventListener. May be
null if delivery of events is not required.eventListener - A listener of events. May be null if delivery of events is not required.public MediaCodecAudioTrackRenderer(SampleSource source, MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys, Handler eventHandler, MediaCodecAudioTrackRenderer.EventListener eventListener, AudioCapabilities audioCapabilities, int streamType)
source - The upstream source from which the renderer obtains samples.mediaCodecSelector - A decoder selector.drmSessionManager - For use with encrypted content. May be null if support for encrypted
content is not required.playClearSamplesWithoutKeys - Encrypted media may contain clear (un-encrypted) regions.
For example a media file may start with a short clear region so as to allow playback to
begin in parallel with key acquisition. This parameter specifies whether the renderer is
permitted to play clear regions of encrypted media files before drmSessionManager
has obtained the keys necessary to decrypt encrypted regions of the media.eventHandler - A handler to use when delivering events to eventListener. May be
null if delivery of events is not required.eventListener - A listener of events. May be null if delivery of events is not required.audioCapabilities - The audio capabilities for playback on this device. May be null if the
default capabilities (no encoded audio passthrough support) should be assumed.streamType - The type of audio stream for the AudioTrack.public MediaCodecAudioTrackRenderer(SampleSource[] sources, MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys, Handler eventHandler, MediaCodecAudioTrackRenderer.EventListener eventListener, AudioCapabilities audioCapabilities, int streamType)
sources - The upstream sources from which the renderer obtains samples.mediaCodecSelector - A decoder selector.drmSessionManager - For use with encrypted content. May be null if support for encrypted
content is not required.playClearSamplesWithoutKeys - Encrypted media may contain clear (un-encrypted) regions.
For example a media file may start with a short clear region so as to allow playback to
begin in parallel with key acquisition. This parameter specifies whether the renderer is
permitted to play clear regions of encrypted media files before drmSessionManager
has obtained the keys necessary to decrypt encrypted regions of the media.eventHandler - A handler to use when delivering events to eventListener. May be
null if delivery of events is not required.eventListener - A listener of events. May be null if delivery of events is not required.audioCapabilities - The audio capabilities for playback on this device. May be null if the
default capabilities (no encoded audio passthrough support) should be assumed.streamType - The type of audio stream for the AudioTrack.protected boolean handlesTrack(MediaCodecSelector mediaCodecSelector, MediaFormat mediaFormat) throws MediaCodecUtil.DecoderQueryException
MediaCodecTrackRendererhandlesTrack in class MediaCodecTrackRenderermediaCodecSelector - The decoder selector.mediaFormat - The format of the track.MediaCodecUtil.DecoderQueryException - Thrown if there was an error querying decoders.protected DecoderInfo getDecoderInfo(MediaCodecSelector mediaCodecSelector, String mimeType, boolean requiresSecureDecoder) throws MediaCodecUtil.DecoderQueryException
MediaCodecTrackRendererDecoderInfo for a given format.getDecoderInfo in class MediaCodecTrackRenderermediaCodecSelector - The decoder selector.mimeType - The mime type for which a decoder is required.requiresSecureDecoder - Whether a secure decoder is required.DecoderInfo describing the decoder to instantiate, or null if no suitable
decoder exists.MediaCodecUtil.DecoderQueryException - Thrown if there was an error querying decoders.protected boolean allowPassthrough(String mimeType)
AudioTrack's audio capabilities indicate that
passthrough is supported.mimeType - The type of input media.protected void configureCodec(MediaCodec codec, boolean codecIsAdaptive, MediaFormat format, MediaCrypto crypto)
MediaCodecTrackRendererMediaCodec.configureCodec in class MediaCodecTrackRenderercodec - The MediaCodec to configure.codecIsAdaptive - Whether the codec is adaptive.format - The format for which the codec is being configured.crypto - For drm protected playbacks, a MediaCrypto to use for decryption.protected MediaClock getMediaClock()
TrackRendererMediaClock. 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.getMediaClock in class TrackRendererMediaClock tracking the playback position of the renderer, or null.protected void onInputFormatChanged(MediaFormatHolder holder) throws ExoPlaybackException
MediaCodecTrackRendererSampleSource.onInputFormatChanged in class MediaCodecTrackRendererholder - Holds the new format.ExoPlaybackException - If an error occurs reinitializing the MediaCodec.protected void onOutputFormatChanged(MediaCodec codec, MediaFormat outputFormat)
MediaCodecTrackRendererMediaCodec changes.
The default implementation is a no-op.
onOutputFormatChanged in class MediaCodecTrackRenderercodec - The MediaCodec instance.outputFormat - The new output format.protected void onAudioSessionId(int audioSessionId)
The default implementation is a no-op. One reason for overriding this method would be to
instantiate and enable a Virtualizer in order to spatialize the audio channels. For
this use case, any Virtualizer instances should be released in onDisabled()
(if not before).
audioSessionId - The audio session id.protected void onStarted()
TrackRendererThe default implementation is a no-op.
onStarted in class MediaCodecTrackRendererprotected void onStopped()
TrackRendererThe default implementation is a no-op.
onStopped in class MediaCodecTrackRendererprotected boolean isEnded()
TrackRendererExoPlayer instance to transition to
ExoPlayer.STATE_ENDED. The player will make this transition as soon as true is
returned by all of its TrackRenderers.
This method may be called when the renderer is in the following states:
TrackRenderer.STATE_ENABLED, TrackRenderer.STATE_STARTED
isEnded in class MediaCodecTrackRendererprotected boolean isReady()
TrackRenderer
If the renderer is in the TrackRenderer.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 TrackRenderer.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:
TrackRenderer.STATE_ENABLED, TrackRenderer.STATE_STARTED
isReady in class MediaCodecTrackRendererpublic long getPositionUs()
getPositionUs in interface MediaClockprotected void onDisabled()
throws ExoPlaybackException
TrackRendererThe default implementation is a no-op.
onDisabled in class MediaCodecTrackRendererExoPlaybackException - If an error occurs.protected void onDiscontinuity(long positionUs)
throws ExoPlaybackException
SampleSourceTrackRendereronDiscontinuity in class MediaCodecTrackRendererpositionUs - The playback position after the discontinuity, or the position at which
the renderer is being enabled.ExoPlaybackException - If an error occurs handling the discontinuity.protected boolean processOutputBuffer(long positionUs,
long elapsedRealtimeUs,
MediaCodec codec,
ByteBuffer buffer,
MediaCodec.BufferInfo bufferInfo,
int bufferIndex,
boolean shouldSkip)
throws ExoPlaybackException
MediaCodecTrackRendererprocessOutputBuffer in class MediaCodecTrackRendererExoPlaybackException - If an error occurs processing the output buffer.protected void onOutputStreamEnded()
MediaCodecTrackRendererMediaCodec.BUFFER_FLAG_END_OF_STREAM flag has been propagated through the
decoder.
The default implementation is a no-op.
onOutputStreamEnded in class MediaCodecTrackRendererprotected void handleAudioTrackDiscontinuity()
public void handleMessage(int messageType,
Object message)
throws ExoPlaybackException
ExoPlayer.ExoPlayerComponenthandleMessage in interface ExoPlayer.ExoPlayerComponenthandleMessage in class TrackRenderermessageType - An integer identifying the type of message.message - The message object.ExoPlaybackException - If an error occurred whilst handling the message.