Search in sources :

Example 1 with Clock

use of com.google.android.exoplayer2.util.Clock in project ExoPlayer by google.

the class MetadataRetriever method retrieveMetadata.

@VisibleForTesting
static /* package */
ListenableFuture<TrackGroupArray> retrieveMetadata(Context context, MediaItem mediaItem, Clock clock) {
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory().setMp4ExtractorFlags(Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA | Mp4Extractor.FLAG_READ_SEF_DATA);
    MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context, extractorsFactory);
    return retrieveMetadata(mediaSourceFactory, mediaItem, clock);
}
Also used : DefaultExtractorsFactory(com.google.android.exoplayer2.extractor.DefaultExtractorsFactory) MediaSource(com.google.android.exoplayer2.source.MediaSource) ExtractorsFactory(com.google.android.exoplayer2.extractor.ExtractorsFactory) DefaultExtractorsFactory(com.google.android.exoplayer2.extractor.DefaultExtractorsFactory) DefaultMediaSourceFactory(com.google.android.exoplayer2.source.DefaultMediaSourceFactory) VisibleForTesting(androidx.annotation.VisibleForTesting)

Example 2 with Clock

use of com.google.android.exoplayer2.util.Clock in project ExoPlayer by google.

the class DefaultMediaClock method onRendererEnabled.

/**
 * Notifies the media clock that a renderer has been enabled. Starts using the media clock of the
 * provided renderer if available.
 *
 * @param renderer The renderer which has been enabled.
 * @throws ExoPlaybackException If the renderer provides a media clock and another renderer media
 *     clock is already provided.
 */
public void onRendererEnabled(Renderer renderer) throws ExoPlaybackException {
    @Nullable MediaClock rendererMediaClock = renderer.getMediaClock();
    if (rendererMediaClock != null && rendererMediaClock != rendererClock) {
        if (rendererClock != null) {
            throw ExoPlaybackException.createForUnexpected(new IllegalStateException("Multiple renderer media clocks enabled."));
        }
        this.rendererClock = rendererMediaClock;
        this.rendererClockSource = renderer;
        rendererClock.setPlaybackParameters(standaloneClock.getPlaybackParameters());
    }
}
Also used : MediaClock(com.google.android.exoplayer2.util.MediaClock) StandaloneMediaClock(com.google.android.exoplayer2.util.StandaloneMediaClock) Nullable(androidx.annotation.Nullable)

Example 3 with Clock

use of com.google.android.exoplayer2.util.Clock in project ExoPlayer by google.

the class DefaultMediaClock method syncClocks.

private void syncClocks(boolean isReadingAhead) {
    if (shouldUseStandaloneClock(isReadingAhead)) {
        isUsingStandaloneClock = true;
        if (standaloneClockIsStarted) {
            standaloneClock.start();
        }
        return;
    }
    // We are either already using the renderer clock or switching from the standalone to the
    // renderer clock, so it must be non-null.
    MediaClock rendererClock = Assertions.checkNotNull(this.rendererClock);
    long rendererClockPositionUs = rendererClock.getPositionUs();
    if (isUsingStandaloneClock) {
        // Ensure enabling the renderer clock doesn't jump backwards in time.
        if (rendererClockPositionUs < standaloneClock.getPositionUs()) {
            standaloneClock.stop();
            return;
        }
        isUsingStandaloneClock = false;
        if (standaloneClockIsStarted) {
            standaloneClock.start();
        }
    }
    // Continuously sync stand-alone clock to renderer clock so that it can take over if needed.
    standaloneClock.resetPosition(rendererClockPositionUs);
    PlaybackParameters playbackParameters = rendererClock.getPlaybackParameters();
    if (!playbackParameters.equals(standaloneClock.getPlaybackParameters())) {
        standaloneClock.setPlaybackParameters(playbackParameters);
        listener.onPlaybackParametersChanged(playbackParameters);
    }
}
Also used : MediaClock(com.google.android.exoplayer2.util.MediaClock) StandaloneMediaClock(com.google.android.exoplayer2.util.StandaloneMediaClock)

Example 4 with Clock

use of com.google.android.exoplayer2.util.Clock in project ExoPlayer by google.

the class DefaultMediaClockTest method getPositionWithPlaybackSpeedChange_shouldTriggerCallback.

@Test
public void getPositionWithPlaybackSpeedChange_shouldTriggerCallback() throws ExoPlaybackException {
    MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(PlaybackParameters.DEFAULT, /* playbackParametersAreMutable= */
    true);
    mediaClock.onRendererEnabled(mediaClockRenderer);
    // Silently change playback speed of renderer clock.
    mediaClockRenderer.playbackParameters = TEST_PLAYBACK_PARAMETERS;
    mediaClock.syncAndGetPositionUs(/* isReadingAhead= */
    false);
    verify(listener).onPlaybackParametersChanged(TEST_PLAYBACK_PARAMETERS);
}
Also used : FakeMediaClockRenderer(com.google.android.exoplayer2.testutil.FakeMediaClockRenderer) Test(org.junit.Test)

Example 5 with Clock

use of com.google.android.exoplayer2.util.Clock in project ExoPlayer by google.

the class RtspPlaybackTest method createExoPlayer.

private ExoPlayer createExoPlayer(int serverRtspPortNumber, RtpDataChannel.Factory rtpDataChannelFactory) {
    ExoPlayer player = new ExoPlayer.Builder(applicationContext, capturingRenderersFactory).setClock(clock).build();
    player.setMediaSource(new RtspMediaSource(MediaItem.fromUri(RtspTestUtils.getTestUri(serverRtspPortNumber)), rtpDataChannelFactory, "ExoPlayer:PlaybackTest", SocketFactory.getDefault(), /* debugLoggingEnabled= */
    false), false);
    return player;
}
Also used : ExoPlayer(com.google.android.exoplayer2.ExoPlayer)

Aggregations

Test (org.junit.Test)16 ExoPlayer (com.google.android.exoplayer2.ExoPlayer)5 TrackGroupArray (com.google.android.exoplayer2.source.TrackGroupArray)5 FakeClock (com.google.android.exoplayer2.testutil.FakeClock)4 FakeMediaClockRenderer (com.google.android.exoplayer2.testutil.FakeMediaClockRenderer)4 Clock (com.google.android.exoplayer2.util.Clock)4 Listener (com.google.android.exoplayer2.Player.Listener)3 MediaSource (com.google.android.exoplayer2.source.MediaSource)2 FakeMediaSource (com.google.android.exoplayer2.testutil.FakeMediaSource)2 TestExoPlayerBuilder (com.google.android.exoplayer2.testutil.TestExoPlayerBuilder)2 MediaClock (com.google.android.exoplayer2.util.MediaClock)2 StandaloneMediaClock (com.google.android.exoplayer2.util.StandaloneMediaClock)2 ArrayList (java.util.ArrayList)2 Before (org.junit.Before)2 HandlerThread (android.os.HandlerThread)1 Nullable (androidx.annotation.Nullable)1 VisibleForTesting (androidx.annotation.VisibleForTesting)1 AndroidJUnit4 (androidx.test.ext.junit.runners.AndroidJUnit4)1 DefaultLoadControl (com.google.android.exoplayer2.DefaultLoadControl)1 Format (com.google.android.exoplayer2.Format)1