Merge pull request #3513 from Stypox/exoplayer
Update to ExoPlayer 2.11.4
This commit is contained in:
commit
c05467fb92
|
@ -81,7 +81,7 @@ android {
|
|||
|
||||
ext {
|
||||
androidxLibVersion = '1.0.0'
|
||||
exoPlayerLibVersion = '2.10.8'
|
||||
exoPlayerLibVersion = '2.11.4'
|
||||
roomDbLibVersion = '2.1.0'
|
||||
leakCanaryLibVersion = '1.5.4' //1.6.1
|
||||
okHttpLibVersion = '3.12.6'
|
||||
|
|
|
@ -49,7 +49,6 @@ import org.schabi.newpipe.BuildConfig;
|
|||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||
import org.schabi.newpipe.player.event.PlayerEventListener;
|
||||
import org.schabi.newpipe.player.helper.LockManager;
|
||||
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
|
||||
import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
|
||||
import org.schabi.newpipe.player.resolver.MediaSourceTag;
|
||||
|
@ -91,7 +90,6 @@ public final class BackgroundPlayer extends Service {
|
|||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Service-Activity Binder
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
private LockManager lockManager;
|
||||
private SharedPreferences sharedPreferences;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
|
@ -116,7 +114,6 @@ public final class BackgroundPlayer extends Service {
|
|||
Log.d(TAG, "onCreate() called");
|
||||
}
|
||||
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
|
||||
lockManager = new LockManager(this);
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||
assureCorrectAppLanguage(this);
|
||||
ThemeHelper.setTheme(this);
|
||||
|
@ -166,9 +163,6 @@ public final class BackgroundPlayer extends Service {
|
|||
Log.d(TAG, "onClose() called");
|
||||
}
|
||||
|
||||
if (lockManager != null) {
|
||||
lockManager.releaseWifiAndCpu();
|
||||
}
|
||||
if (basePlayerImpl != null) {
|
||||
basePlayerImpl.savePlaybackState();
|
||||
basePlayerImpl.stopActivityBinding();
|
||||
|
@ -179,7 +173,6 @@ public final class BackgroundPlayer extends Service {
|
|||
}
|
||||
mBinder = null;
|
||||
basePlayerImpl = null;
|
||||
lockManager = null;
|
||||
|
||||
stopForeground(true);
|
||||
stopSelf();
|
||||
|
@ -663,7 +656,6 @@ public final class BackgroundPlayer extends Service {
|
|||
resetNotification();
|
||||
updateNotificationThumbnail();
|
||||
updateNotification(R.drawable.ic_pause_white);
|
||||
lockManager.acquireWifiAndCpu();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -672,7 +664,6 @@ public final class BackgroundPlayer extends Service {
|
|||
resetNotification();
|
||||
updateNotificationThumbnail();
|
||||
updateNotification(R.drawable.ic_play_arrow_white);
|
||||
lockManager.releaseWifiAndCpu();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -687,7 +678,6 @@ public final class BackgroundPlayer extends Service {
|
|||
}
|
||||
updateNotificationThumbnail();
|
||||
updateNotification(R.drawable.ic_replay_white);
|
||||
lockManager.releaseWifiAndCpu();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,9 +35,9 @@ import android.widget.Toast;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.DefaultRenderersFactory;
|
||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||
import com.google.android.exoplayer2.ExoPlayerFactory;
|
||||
import com.google.android.exoplayer2.LoadControl;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
|
@ -232,14 +232,18 @@ public abstract class BasePlayer implements
|
|||
|
||||
public void initPlayer(final boolean playOnReady) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "initPlayer() called with: context = [" + context + "]");
|
||||
Log.d(TAG, "initPlayer() called with: playOnReady = [" + playOnReady + "]");
|
||||
}
|
||||
|
||||
simpleExoPlayer = ExoPlayerFactory
|
||||
.newSimpleInstance(context, renderFactory, trackSelector, loadControl);
|
||||
simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderFactory)
|
||||
.setTrackSelector(trackSelector)
|
||||
.setLoadControl(loadControl)
|
||||
.build();
|
||||
simpleExoPlayer.addListener(this);
|
||||
simpleExoPlayer.setPlayWhenReady(playOnReady);
|
||||
simpleExoPlayer.setSeekParameters(PlayerHelper.getSeekParameters(context));
|
||||
simpleExoPlayer.setWakeMode(C.WAKE_MODE_NETWORK);
|
||||
simpleExoPlayer.setHandleAudioBecomingNoisy(true);
|
||||
|
||||
audioReactor = new AudioReactor(context, simpleExoPlayer);
|
||||
mediaSessionManager = new MediaSessionManager(context, simpleExoPlayer,
|
||||
|
@ -666,11 +670,9 @@ public abstract class BasePlayer implements
|
|||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@Override
|
||||
public void onTimelineChanged(final Timeline timeline, final Object manifest,
|
||||
@Player.TimelineChangeReason final int reason) {
|
||||
public void onTimelineChanged(final Timeline timeline, final int reason) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "ExoPlayer - onTimelineChanged() called with "
|
||||
+ (manifest == null ? "no manifest" : "available manifest") + ", "
|
||||
+ "timeline size = [" + timeline.getWindowCount() + "], "
|
||||
+ "reason = [" + reason + "]");
|
||||
}
|
||||
|
|
|
@ -68,7 +68,6 @@ import org.schabi.newpipe.BuildConfig;
|
|||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
import org.schabi.newpipe.player.event.PlayerEventListener;
|
||||
import org.schabi.newpipe.player.helper.LockManager;
|
||||
import org.schabi.newpipe.player.helper.PlayerHelper;
|
||||
import org.schabi.newpipe.player.resolver.MediaSourceTag;
|
||||
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
|
||||
|
@ -132,7 +131,6 @@ public final class PopupVideoPlayer extends Service {
|
|||
private RemoteViews notRemoteView;
|
||||
|
||||
private VideoPlayerImpl playerImpl;
|
||||
private LockManager lockManager;
|
||||
private boolean isPopupClosing = false;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
|
@ -152,7 +150,6 @@ public final class PopupVideoPlayer extends Service {
|
|||
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
|
||||
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
|
||||
|
||||
lockManager = new LockManager(this);
|
||||
playerImpl = new VideoPlayerImpl(this);
|
||||
ThemeHelper.setTheme(this);
|
||||
|
||||
|
@ -378,9 +375,6 @@ public final class PopupVideoPlayer extends Service {
|
|||
}
|
||||
|
||||
mBinder = null;
|
||||
if (lockManager != null) {
|
||||
lockManager.releaseWifiAndCpu();
|
||||
}
|
||||
if (notificationManager != null) {
|
||||
notificationManager.cancel(NOTIFICATION_ID);
|
||||
}
|
||||
|
@ -914,7 +908,6 @@ public final class PopupVideoPlayer extends Service {
|
|||
hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME);
|
||||
|
||||
startForeground(NOTIFICATION_ID, notBuilder.build());
|
||||
lockManager.acquireWifiAndCpu();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -932,9 +925,7 @@ public final class PopupVideoPlayer extends Service {
|
|||
|
||||
resetNotification();
|
||||
updateNotification(R.drawable.ic_play_arrow_white);
|
||||
|
||||
videoPlayPause.setBackgroundResource(R.drawable.ic_play_arrow_white);
|
||||
lockManager.releaseWifiAndCpu();
|
||||
|
||||
stopForeground(false);
|
||||
}
|
||||
|
@ -956,9 +947,7 @@ public final class PopupVideoPlayer extends Service {
|
|||
|
||||
resetNotification();
|
||||
updateNotification(R.drawable.ic_replay_white);
|
||||
|
||||
videoPlayPause.setBackgroundResource(R.drawable.ic_replay_white);
|
||||
lockManager.releaseWifiAndCpu();
|
||||
|
||||
stopForeground(false);
|
||||
}
|
||||
|
|
|
@ -36,9 +36,9 @@ public class LoadedMediaSource implements ManagedMediaSource {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void prepareSource(final SourceInfoRefreshListener listener,
|
||||
public void prepareSource(final MediaSourceCaller mediaSourceCaller,
|
||||
@Nullable final TransferListener mediaTransferListener) {
|
||||
source.prepareSource(listener, mediaTransferListener);
|
||||
source.prepareSource(mediaSourceCaller, mediaTransferListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -46,6 +46,11 @@ public class LoadedMediaSource implements ManagedMediaSource {
|
|||
source.maybeThrowSourceInfoRefreshError();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enable(final MediaSourceCaller caller) {
|
||||
source.enable(caller);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MediaPeriod createPeriod(final MediaPeriodId id, final Allocator allocator,
|
||||
final long startPositionUs) {
|
||||
|
@ -58,8 +63,13 @@ public class LoadedMediaSource implements ManagedMediaSource {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void releaseSource(final SourceInfoRefreshListener listener) {
|
||||
source.releaseSource(listener);
|
||||
public void disable(final MediaSourceCaller caller) {
|
||||
source.disable(caller);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseSource(final MediaSourceCaller mediaSourceCaller) {
|
||||
source.releaseSource(mediaSourceCaller);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.schabi.newpipe.player.mediasource;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
|
||||
|
@ -27,4 +28,10 @@ public interface ManagedMediaSource extends MediaSource {
|
|||
* @return whether this source is for the specified stream
|
||||
*/
|
||||
boolean isStreamEqual(@NonNull PlayQueueItem stream);
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
default Object getTag() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ public class ManagedMediaSourcePlaylist {
|
|||
@Nullable
|
||||
public ManagedMediaSource get(final int index) {
|
||||
return (index < 0 || index >= size())
|
||||
? null : (ManagedMediaSource) internalSource.getMediaSource(index);
|
||||
? null : (ManagedMediaSource) internalSource.getMediaSource(index).getTag();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
|
|
@ -8,6 +8,7 @@ import androidx.annotation.Nullable;
|
|||
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.RendererCapabilities.Capabilities;
|
||||
import com.google.android.exoplayer2.source.TrackGroup;
|
||||
import com.google.android.exoplayer2.source.TrackGroupArray;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||
|
@ -48,27 +49,31 @@ public class CustomTrackSelector extends DefaultTrackSelector {
|
|||
@Override
|
||||
@Nullable
|
||||
protected Pair<TrackSelection.Definition, TextTrackScore> selectTextTrack(
|
||||
final TrackGroupArray groups, final int[][] formatSupport, final Parameters params,
|
||||
final TrackGroupArray groups,
|
||||
@NonNull final int[][] formatSupport,
|
||||
@NonNull final Parameters params,
|
||||
@Nullable final String selectedAudioLanguage) {
|
||||
TrackGroup selectedGroup = null;
|
||||
int selectedTrackIndex = C.INDEX_UNSET;
|
||||
int newPipeTrackScore = 0;
|
||||
TextTrackScore selectedTrackScore = null;
|
||||
|
||||
for (int groupIndex = 0; groupIndex < groups.length; groupIndex++) {
|
||||
TrackGroup trackGroup = groups.get(groupIndex);
|
||||
int[] trackFormatSupport = formatSupport[groupIndex];
|
||||
@Capabilities int[] trackFormatSupport = formatSupport[groupIndex];
|
||||
|
||||
for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) {
|
||||
if (isSupported(trackFormatSupport[trackIndex],
|
||||
params.exceedRendererCapabilitiesIfNecessary)) {
|
||||
Format format = trackGroup.getFormat(trackIndex);
|
||||
TextTrackScore trackScore = new TextTrackScore(format, params,
|
||||
trackFormatSupport[trackIndex], selectedAudioLanguage);
|
||||
|
||||
if (formatHasLanguage(format, preferredTextLanguage)) {
|
||||
selectedGroup = trackGroup;
|
||||
selectedTrackIndex = trackIndex;
|
||||
selectedTrackScore = trackScore;
|
||||
// found user selected match (perfect!)
|
||||
break;
|
||||
break; // found user selected match (perfect!)
|
||||
|
||||
} else if (trackScore.isWithinConstraints && (selectedTrackScore == null
|
||||
|| trackScore.compareTo(selectedTrackScore) > 0)) {
|
||||
selectedGroup = trackGroup;
|
||||
|
|
Loading…
Reference in New Issue