Search in sources :

Example 11 with LoadControl

use of com.google.android.exoplayer2.LoadControl in project ExoPlayer by google.

the class TestExoPlayerBuilder method build.

/**
 * Builds an {@link ExoPlayer} using the provided values or their defaults.
 */
public ExoPlayer build() {
    Assertions.checkNotNull(looper, "TestExoPlayer builder run on a thread without Looper and no Looper specified.");
    // Do not update renderersFactory and renderers here, otherwise their getters may
    // return different values before and after build() is called, making them confusing.
    RenderersFactory playerRenderersFactory = renderersFactory;
    if (playerRenderersFactory == null) {
        playerRenderersFactory = (eventHandler, videoRendererEventListener, audioRendererEventListener, textRendererOutput, metadataRendererOutput) -> renderers != null ? renderers : new Renderer[] { new FakeVideoRenderer(eventHandler, videoRendererEventListener), new FakeAudioRenderer(eventHandler, audioRendererEventListener) };
    }
    ExoPlayer.Builder builder = new ExoPlayer.Builder(context, playerRenderersFactory).setTrackSelector(trackSelector).setLoadControl(loadControl).setBandwidthMeter(bandwidthMeter).setAnalyticsCollector(new DefaultAnalyticsCollector(clock)).setClock(clock).setUseLazyPreparation(useLazyPreparation).setLooper(looper).setSeekBackIncrementMs(seekBackIncrementMs).setSeekForwardIncrementMs(seekForwardIncrementMs);
    if (mediaSourceFactory != null) {
        builder.setMediaSourceFactory(mediaSourceFactory);
    }
    return builder.build();
}
Also used : Renderer(com.google.android.exoplayer2.Renderer) RenderersFactory(com.google.android.exoplayer2.RenderersFactory) ExoPlayer(com.google.android.exoplayer2.ExoPlayer) DefaultAnalyticsCollector(com.google.android.exoplayer2.analytics.DefaultAnalyticsCollector)

Example 12 with LoadControl

use of com.google.android.exoplayer2.LoadControl in project ExoPlayer by google.

the class ExoPlayerTest method loadControlNeverWantsToPlay_playbackDoesNotGetStuck.

@Test
public void loadControlNeverWantsToPlay_playbackDoesNotGetStuck() throws Exception {
    LoadControl neverLoadingOrPlayingLoadControl = new DefaultLoadControl() {

        @Override
        public boolean shouldContinueLoading(long playbackPositionUs, long bufferedDurationUs, float playbackSpeed) {
            return true;
        }

        @Override
        public boolean shouldStartPlayback(long bufferedDurationUs, float playbackSpeed, boolean rebuffering, long targetLiveOffsetUs) {
            return false;
        }
    };
    // Use chunked data to ensure the player actually needs to continue loading and playing.
    FakeAdaptiveDataSet.Factory dataSetFactory = new FakeAdaptiveDataSet.Factory(/* chunkDurationUs= */
    500_000, /* bitratePercentStdDev= */
    10.0, new Random(0));
    MediaSource chunkedMediaSource = new FakeAdaptiveMediaSource(new FakeTimeline(), new TrackGroupArray(new TrackGroup(ExoPlayerTestRunner.VIDEO_FORMAT)), new FakeChunkSource.Factory(dataSetFactory, new FakeDataSource.Factory()));
    new ExoPlayerTestRunner.Builder(context).setLoadControl(neverLoadingOrPlayingLoadControl).setMediaSources(chunkedMediaSource).build().start().blockUntilEnded(TIMEOUT_MS);
}
Also used : FakeAdaptiveMediaSource(com.google.android.exoplayer2.testutil.FakeAdaptiveMediaSource) TrackGroupArray(com.google.android.exoplayer2.source.TrackGroupArray) FakeMediaSourceFactory(com.google.android.exoplayer2.testutil.FakeMediaSourceFactory) FakeAdaptiveDataSet(com.google.android.exoplayer2.testutil.FakeAdaptiveDataSet) Random(java.util.Random) ServerSideAdInsertionMediaSource(com.google.android.exoplayer2.source.ads.ServerSideAdInsertionMediaSource) FakeAdaptiveMediaSource(com.google.android.exoplayer2.testutil.FakeAdaptiveMediaSource) MaskingMediaSource(com.google.android.exoplayer2.source.MaskingMediaSource) ConcatenatingMediaSource(com.google.android.exoplayer2.source.ConcatenatingMediaSource) MediaSource(com.google.android.exoplayer2.source.MediaSource) CompositeMediaSource(com.google.android.exoplayer2.source.CompositeMediaSource) ClippingMediaSource(com.google.android.exoplayer2.source.ClippingMediaSource) FakeMediaSource(com.google.android.exoplayer2.testutil.FakeMediaSource) FakeTimeline(com.google.android.exoplayer2.testutil.FakeTimeline) TrackGroup(com.google.android.exoplayer2.source.TrackGroup) FakeChunkSource(com.google.android.exoplayer2.testutil.FakeChunkSource) ExoPlayerTestRunner(com.google.android.exoplayer2.testutil.ExoPlayerTestRunner) Test(org.junit.Test)

Example 13 with LoadControl

use of com.google.android.exoplayer2.LoadControl in project ExoPlayer by google.

the class RtspMediaPeriod method selectTracks.

@Override
public long selectTracks(@NullableType ExoTrackSelection[] selections, boolean[] mayRetainStreamFlags, @NullableType SampleStream[] streams, boolean[] streamResetFlags, long positionUs) {
    // Input array streams contains the streams selected in the previous track selection.
    for (int i = 0; i < selections.length; i++) {
        if (streams[i] != null && (selections[i] == null || !mayRetainStreamFlags[i])) {
            streams[i] = null;
        }
    }
    // Select new tracks.
    selectedLoadInfos.clear();
    for (int i = 0; i < selections.length; i++) {
        TrackSelection selection = selections[i];
        if (selection == null) {
            continue;
        }
        TrackGroup trackGroup = selection.getTrackGroup();
        int trackGroupIndex = checkNotNull(trackGroups).indexOf(trackGroup);
        selectedLoadInfos.add(checkNotNull(rtspLoaderWrappers.get(trackGroupIndex)).loadInfo);
        // Find the sampleStreamWrapper that contains this track group.
        if (trackGroups.contains(trackGroup)) {
            if (streams[i] == null) {
                streams[i] = new SampleStreamImpl(trackGroupIndex);
                // Update flag for newly created SampleStream.
                streamResetFlags[i] = true;
            }
        }
    }
    // Cancel non-selected loadables.
    for (int i = 0; i < rtspLoaderWrappers.size(); i++) {
        RtspLoaderWrapper loadControl = rtspLoaderWrappers.get(i);
        if (!selectedLoadInfos.contains(loadControl.loadInfo)) {
            loadControl.cancelLoad();
        }
    }
    trackSelected = true;
    maybeSetupTracks();
    return positionUs;
}
Also used : TrackGroup(com.google.android.exoplayer2.source.TrackGroup) TrackSelection(com.google.android.exoplayer2.trackselection.TrackSelection) ExoTrackSelection(com.google.android.exoplayer2.trackselection.ExoTrackSelection)

Aggregations

DefaultTrackSelector (com.google.android.exoplayer2.trackselection.DefaultTrackSelector)6 DefaultLoadControl (com.google.android.exoplayer2.DefaultLoadControl)5 MediaSource (com.google.android.exoplayer2.source.MediaSource)5 ExoPlayerFactory (com.google.android.exoplayer2.ExoPlayerFactory)4 LoadControl (com.google.android.exoplayer2.LoadControl)4 ClippingMediaSource (com.google.android.exoplayer2.source.ClippingMediaSource)4 CompositeMediaSource (com.google.android.exoplayer2.source.CompositeMediaSource)4 ConcatenatingMediaSource (com.google.android.exoplayer2.source.ConcatenatingMediaSource)4 MaskingMediaSource (com.google.android.exoplayer2.source.MaskingMediaSource)4 TrackGroup (com.google.android.exoplayer2.source.TrackGroup)4 TrackGroupArray (com.google.android.exoplayer2.source.TrackGroupArray)4 ServerSideAdInsertionMediaSource (com.google.android.exoplayer2.source.ads.ServerSideAdInsertionMediaSource)4 FakeAdaptiveMediaSource (com.google.android.exoplayer2.testutil.FakeAdaptiveMediaSource)4 FakeMediaSource (com.google.android.exoplayer2.testutil.FakeMediaSource)4 FakeTimeline (com.google.android.exoplayer2.testutil.FakeTimeline)4 TrackSelection (com.google.android.exoplayer2.trackselection.TrackSelection)4 Test (org.junit.Test)4 Nullable (androidx.annotation.Nullable)3 DefaultRenderersFactory (com.google.android.exoplayer2.DefaultRenderersFactory)3 SimpleExoPlayer (com.google.android.exoplayer2.SimpleExoPlayer)3