Merge pull request #7406 from Redirion/usedefaultloadcontrol

Use DefaultLoadcontrol
This commit is contained in:
litetex 2021-11-21 15:11:21 +01:00 committed by GitHub
commit d8236bbedd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 76 deletions

View file

@ -1,81 +1,28 @@
package org.schabi.newpipe.player.helper; package org.schabi.newpipe.player.helper;
import com.google.android.exoplayer2.DefaultLoadControl; import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
import com.google.android.exoplayer2.upstream.Allocator;
public class LoadController implements LoadControl { public class LoadController extends DefaultLoadControl {
public static final String TAG = "LoadController"; public static final String TAG = "LoadController";
private final long initialPlaybackBufferUs;
private final LoadControl internalLoadControl;
private boolean preloadingEnabled = true; private boolean preloadingEnabled = true;
/*//////////////////////////////////////////////////////////////////////////
// Default Load Control
//////////////////////////////////////////////////////////////////////////*/
public LoadController() {
this(PlayerHelper.getPlaybackStartBufferMs());
}
private LoadController(final int initialPlaybackBufferMs) {
this.initialPlaybackBufferUs = initialPlaybackBufferMs * 1000;
final DefaultLoadControl.Builder builder = new DefaultLoadControl.Builder();
builder.setBufferDurationsMs(
DefaultLoadControl.DEFAULT_MIN_BUFFER_MS,
DefaultLoadControl.DEFAULT_MAX_BUFFER_MS,
initialPlaybackBufferMs,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS);
internalLoadControl = builder.build();
}
/*//////////////////////////////////////////////////////////////////////////
// Custom behaviours
//////////////////////////////////////////////////////////////////////////*/
@Override @Override
public void onPrepared() { public void onPrepared() {
preloadingEnabled = true; preloadingEnabled = true;
internalLoadControl.onPrepared(); super.onPrepared();
}
@Override
public void onTracksSelected(final Renderer[] renderers, final TrackGroupArray trackGroups,
final ExoTrackSelection[] trackSelections) {
internalLoadControl.onTracksSelected(renderers, trackGroups, trackSelections);
} }
@Override @Override
public void onStopped() { public void onStopped() {
preloadingEnabled = true; preloadingEnabled = true;
internalLoadControl.onStopped(); super.onStopped();
} }
@Override @Override
public void onReleased() { public void onReleased() {
preloadingEnabled = true; preloadingEnabled = true;
internalLoadControl.onReleased(); super.onReleased();
}
@Override
public Allocator getAllocator() {
return internalLoadControl.getAllocator();
}
@Override
public long getBackBufferDurationUs() {
return internalLoadControl.getBackBufferDurationUs();
}
@Override
public boolean retainBackBufferFromKeyframe() {
return internalLoadControl.retainBackBufferFromKeyframe();
} }
@Override @Override
@ -85,21 +32,10 @@ public class LoadController implements LoadControl {
if (!preloadingEnabled) { if (!preloadingEnabled) {
return false; return false;
} }
return internalLoadControl.shouldContinueLoading( return super.shouldContinueLoading(
playbackPositionUs, bufferedDurationUs, playbackSpeed); playbackPositionUs, bufferedDurationUs, playbackSpeed);
} }
@Override
public boolean shouldStartPlayback(final long bufferedDurationUs, final float playbackSpeed,
final boolean rebuffering, final long targetLiveOffsetUs) {
final boolean isInitialPlaybackBufferFilled
= bufferedDurationUs >= this.initialPlaybackBufferUs * playbackSpeed;
final boolean isInternalStartingPlayback = internalLoadControl
.shouldStartPlayback(bufferedDurationUs, playbackSpeed, rebuffering,
targetLiveOffsetUs);
return isInitialPlaybackBufferFilled || isInternalStartingPlayback;
}
public void disablePreloadingOfCurrentTrack() { public void disablePreloadingOfCurrentTrack() {
preloadingEnabled = false; preloadingEnabled = false;
} }

View file

@ -305,13 +305,6 @@ public final class PlayerHelper {
return 2 * 1024 * 1024L; // ExoPlayer CacheDataSink.MIN_RECOMMENDED_FRAGMENT_SIZE return 2 * 1024 * 1024L; // ExoPlayer CacheDataSink.MIN_RECOMMENDED_FRAGMENT_SIZE
} }
/**
* @return the number of milliseconds the player buffers for before starting playback
*/
public static int getPlaybackStartBufferMs() {
return 500;
}
public static ExoTrackSelection.Factory getQualitySelector() { public static ExoTrackSelection.Factory getQualitySelector() {
return new AdaptiveTrackSelection.Factory( return new AdaptiveTrackSelection.Factory(
1000, 1000,