Skip to content

Commit 9abdbb1

Browse files
TacoTheDankInfinityLoop1308
authored andcommitted
Update ExoPlayer to 2.18.0
(cherry picked from commit 1404581)
1 parent f5abe39 commit 9abdbb1

6 files changed

Lines changed: 48 additions & 46 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ ext {
134134
androidxWorkVersion = '2.7.1'
135135

136136
icepickVersion = '3.2.0'
137-
exoPlayerVersion = '2.17.1'
137+
exoPlayerVersion = '2.18.0'
138138
googleAutoServiceVersion = '1.0.1'
139139
groupieVersion = '2.10.0'
140140
markwonVersion = '4.6.2'

app/src/main/java/org/schabi/newpipe/player/Player.java

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
import androidx.appcompat.view.ContextThemeWrapper;
6969
import androidx.appcompat.widget.AppCompatImageButton;
7070
import androidx.appcompat.widget.PopupMenu;
71-
import androidx.collection.ArraySet;
7271
import androidx.core.content.ContextCompat;
7372
import androidx.core.graphics.Insets;
7473
import androidx.core.view.GestureDetectorCompat;
@@ -81,8 +80,11 @@
8180

8281
import com.google.android.exoplayer2.*;
8382
import com.google.android.exoplayer2.Player.PositionInfo;
83+
import com.google.android.exoplayer2.RenderersFactory;
84+
import com.google.android.exoplayer2.Timeline;
85+
import com.google.android.exoplayer2.Tracks;
8486
import com.google.android.exoplayer2.source.MediaSource;
85-
import com.google.android.exoplayer2.text.Cue;
87+
import com.google.android.exoplayer2.text.CueGroup;
8688
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
8789
import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
8890
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
@@ -2916,15 +2918,15 @@ public void onEvents(@NonNull final com.google.android.exoplayer2.Player player,
29162918
}
29172919

29182920
@Override
2919-
public void onTracksInfoChanged(@NonNull final TracksInfo tracksInfo) {
2921+
public void onTracksChanged(@NonNull final Tracks tracks) {
29202922
if (DEBUG) {
29212923
Log.d(TAG, "ExoPlayer - onTracksChanged(), "
2922-
+ "track group size = " + tracksInfo.getTrackGroupInfos().size());
2924+
+ "track group size = " + tracks.getGroups().size());
29232925
}
29242926
if(enqueueTimer != null){
29252927
enqueueTimer.cancel(true);
29262928
}
2927-
onTextTracksChanged(tracksInfo);
2929+
onTextTracksChanged(tracks);
29282930
}
29292931

29302932
@Override
@@ -2990,8 +2992,8 @@ public void onRenderedFirstFrame() {
29902992
}
29912993

29922994
@Override
2993-
public void onCues(@NonNull final List<Cue> cues) {
2994-
binding.subtitleView.onCues(cues);
2995+
public void onCues(@NonNull final CueGroup cueGroup) {
2996+
binding.subtitleView.setCues(cueGroup.cues);
29952997
}
29962998
//endregion
29972999

@@ -4137,35 +4139,36 @@ private void setupSubtitleView() {
41374139
binding.subtitleView.setStyle(captionStyle);
41384140
}
41394141

4140-
private void onTextTracksChanged(@NonNull final TracksInfo currentTrackInfo) {
4142+
private void onTextTracksChanged(@NonNull final Tracks currentTrack) {
41414143
if (binding == null) {
41424144
return;
41434145
}
41444146

4145-
if (trackSelector.getCurrentMappedTrackInfo() == null
4146-
|| !currentTrackInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_TEXT)) {
4147+
final boolean trackTypeTextSupported = !currentTrack.containsType(C.TRACK_TYPE_TEXT)
4148+
|| currentTrack.isTypeSupported(C.TRACK_TYPE_TEXT, false);
4149+
if (trackSelector.getCurrentMappedTrackInfo() == null || !trackTypeTextSupported) {
41474150
binding.captionTextView.setVisibility(View.GONE);
41484151
return;
41494152
}
41504153

41514154
// Extract all loaded languages
4152-
final List<TracksInfo.TrackGroupInfo> textTracks = currentTrackInfo
4153-
.getTrackGroupInfos()
4155+
final List<Tracks.Group> textTracks = currentTrack
4156+
.getGroups()
41544157
.stream()
4155-
.filter(trackGroupInfo -> C.TRACK_TYPE_TEXT == trackGroupInfo.getTrackType())
4158+
.filter(trackGroupInfo -> C.TRACK_TYPE_TEXT == trackGroupInfo.getType())
41564159
.collect(Collectors.toList());
41574160
final List<String> availableLanguages = textTracks.stream()
4158-
.map(TracksInfo.TrackGroupInfo::getTrackGroup)
4161+
.map(Tracks.Group::getMediaTrackGroup)
41594162
.filter(textTrack -> textTrack.length > 0)
41604163
.map(textTrack -> textTrack.getFormat(0).language)
41614164
.filter(Objects::nonNull)
41624165
.collect(Collectors.toList());
41634166

41644167
// Find selected text track
41654168
final Optional<Format> selectedTracks = textTracks.stream()
4166-
.filter(TracksInfo.TrackGroupInfo::isSelected)
4167-
.filter(info -> info.getTrackGroup().length >= 1)
4168-
.map(info -> info.getTrackGroup().getFormat(0))
4169+
.filter(Tracks.Group::isSelected)
4170+
.filter(info -> info.getMediaTrackGroup().length >= 1)
4171+
.map(info -> info.getMediaTrackGroup().getFormat(0))
41694172
.findFirst();
41704173

41714174
// Build UI
@@ -4745,20 +4748,12 @@ private void useVideoSource(final boolean videoEnabled) {
47454748
return;
47464749
}
47474750

4748-
final DefaultTrackSelector.ParametersBuilder parametersBuilder =
4751+
final DefaultTrackSelector.Parameters.Builder parametersBuilder =
47494752
trackSelector.buildUponParameters();
47504753

4751-
if (videoEnabled) {
4752-
// Enable again the video track and the subtitles, if there is one selected
4753-
parametersBuilder.setDisabledTrackTypes(Collections.emptySet());
4754-
} else {
4755-
// Disable the video track and the ability to select subtitles
4756-
// Use an ArraySet because we can't use Set.of() on all supported APIs by the app
4757-
final ArraySet<Integer> disabledTracks = new ArraySet<>();
4758-
disabledTracks.add(C.TRACK_TYPE_TEXT);
4759-
disabledTracks.add(C.TRACK_TYPE_VIDEO);
4760-
parametersBuilder.setDisabledTrackTypes(disabledTracks);
4761-
}
4754+
// Enable/disable the video track and the ability to select subtitles
4755+
parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, !videoEnabled);
4756+
parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, !videoEnabled);
47624757

47634758
trackSelector.setParameters(parametersBuilder);
47644759
}
@@ -5265,7 +5260,7 @@ public void setLongPressSpeedingEnabled(boolean enabled) {
52655260
public boolean getLongPressSpeedingEnabled() {
52665261
return longPressSpeedingEnabled;
52675262
}
5268-
5263+
52695264
public void onBufferingFailed() {
52705265
pause();
52715266
pauseBCPlayer();

app/src/main/java/org/schabi/newpipe/player/datasource/YoutubeHttpDataSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Based on ExoPlayer's DefaultHttpDataSource, version 2.17.1.
2+
* Based on ExoPlayer's DefaultHttpDataSource, version 2.18.0.
33
*
44
* Original source code copyright (C) 2016 The Android Open Source Project, licensed under the
55
* Apache License, Version 2.0.

app/src/main/java/org/schabi/newpipe/player/mediaitem/MediaItemTag.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.net.Uri;
44

55
import com.google.android.exoplayer2.MediaItem;
6+
import com.google.android.exoplayer2.MediaItem.RequestMetadata;
67
import com.google.android.exoplayer2.MediaMetadata;
78
import com.google.android.exoplayer2.Player;
89

@@ -76,18 +77,22 @@ default String makeMediaId() {
7677
@NonNull
7778
default MediaItem asMediaItem() {
7879
final MediaMetadata mediaMetadata = new MediaMetadata.Builder()
79-
.setMediaUri(Uri.parse(getStreamUrl()))
8080
.setArtworkUri(Uri.parse(getThumbnailUrl()))
8181
.setArtist(getUploaderName())
8282
.setDescription(getTitle())
8383
.setDisplayTitle(getTitle())
8484
.setTitle(getTitle())
8585
.build();
8686

87+
final RequestMetadata requestMetaData = new RequestMetadata.Builder()
88+
.setMediaUri(Uri.parse(getStreamUrl()))
89+
.build();
90+
8791
return MediaItem.fromUri(getStreamUrl())
8892
.buildUpon()
8993
.setMediaId(makeMediaId())
9094
.setMediaMetadata(mediaMetadata)
95+
.setRequestMetadata(requestMetaData)
9196
.setTag(this)
9297
.build();
9398
}

app/src/main/java/org/schabi/newpipe/player/playback/SurfaceHolderCallback.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import android.view.SurfaceHolder;
55

66
import com.google.android.exoplayer2.Player;
7-
import com.google.android.exoplayer2.video.DummySurface;
7+
import com.google.android.exoplayer2.video.PlaceholderSurface;
88

99
/**
1010
* Prevent error message: 'Unrecoverable player error occurred'
@@ -26,7 +26,7 @@ public final class SurfaceHolderCallback implements SurfaceHolder.Callback {
2626

2727
private final Context context;
2828
private final Player player;
29-
private DummySurface dummySurface;
29+
private PlaceholderSurface placeholderSurface;
3030

3131
public SurfaceHolderCallback(final Context context, final Player player) {
3232
this.context = context;
@@ -47,16 +47,16 @@ public void surfaceChanged(final SurfaceHolder holder,
4747

4848
@Override
4949
public void surfaceDestroyed(final SurfaceHolder holder) {
50-
if (dummySurface == null) {
51-
dummySurface = DummySurface.newInstanceV17(context, false);
50+
if (placeholderSurface == null) {
51+
placeholderSurface = PlaceholderSurface.newInstanceV17(context, false);
5252
}
53-
player.setVideoSurface(dummySurface);
53+
player.setVideoSurface(placeholderSurface);
5454
}
5555

5656
public void release() {
57-
if (dummySurface != null) {
58-
dummySurface.release();
59-
dummySurface = null;
57+
if (placeholderSurface != null) {
58+
placeholderSurface.release();
59+
placeholderSurface = null;
6060
}
6161
}
6262
}

app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ static MediaSource maybeBuildLiveMediaSource(@NonNull final PlayerDataSource dat
7070

7171
final StreamInfoTag tag = StreamInfoTag.of(info);
7272
if (!info.getHlsUrl().isEmpty()) {
73-
return buildLiveMediaSource(dataSource, info.getHlsUrl(), C.TYPE_HLS, tag);
73+
return buildLiveMediaSource(dataSource, info.getHlsUrl(), C.CONTENT_TYPE_HLS, tag);
7474
} else if (!info.getDashMpdUrl().isEmpty()) {
75-
return buildLiveMediaSource(dataSource, info.getDashMpdUrl(), C.TYPE_DASH, tag);
75+
return buildLiveMediaSource(dataSource, info.getDashMpdUrl(), C.CONTENT_TYPE_DASH, tag);
7676
}
7777

7878
return null;
@@ -98,15 +98,17 @@ static MediaSource buildLiveMediaSource(@NonNull final PlayerDataSource dataSour
9898
);
9999
}
100100
switch (type) {
101-
case C.TYPE_SS:
101+
case C.CONTENT_TYPE_SS:
102102
factory = dataSource.getLiveSsMediaSourceFactory();
103103
break;
104-
case C.TYPE_DASH:
104+
case C.CONTENT_TYPE_DASH:
105105
factory = dataSource.getLiveDashMediaSourceFactory();
106106
break;
107-
case C.TYPE_HLS:
107+
case C.CONTENT_TYPE_HLS:
108108
factory = dataSource.getLiveHlsMediaSourceFactory();
109109
break;
110+
case C.CONTENT_TYPE_OTHER:
111+
case C.CONTENT_TYPE_RTSP:
110112
default:
111113
throw new IllegalStateException("Unsupported type: " + type);
112114
}

0 commit comments

Comments
 (0)