Skip to content

Commit 93b913e

Browse files
authored
Merge pull request #8536 from TacoTheDank/bumpExoPlayer
Update ExoPlayer to 2.18.0
2 parents b96c8a0 + 00b9c08 commit 93b913e

6 files changed

Lines changed: 47 additions & 48 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ ext {
105105
androidxWorkVersion = '2.7.1'
106106

107107
icepickVersion = '3.2.0'
108-
exoPlayerVersion = '2.17.1'
108+
exoPlayerVersion = '2.18.0'
109109
googleAutoServiceVersion = '1.0.1'
110110
groupieVersion = '2.10.1'
111111
markwonVersion = '4.6.2'

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

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116
import androidx.appcompat.view.ContextThemeWrapper;
117117
import androidx.appcompat.widget.AppCompatImageButton;
118118
import androidx.appcompat.widget.PopupMenu;
119-
import androidx.collection.ArraySet;
120119
import androidx.core.content.ContextCompat;
121120
import androidx.core.graphics.Insets;
122121
import androidx.core.view.ViewCompat;
@@ -135,9 +134,9 @@
135134
import com.google.android.exoplayer2.Player.PositionInfo;
136135
import com.google.android.exoplayer2.RenderersFactory;
137136
import com.google.android.exoplayer2.Timeline;
138-
import com.google.android.exoplayer2.TracksInfo;
137+
import com.google.android.exoplayer2.Tracks;
139138
import com.google.android.exoplayer2.source.MediaSource;
140-
import com.google.android.exoplayer2.text.Cue;
139+
import com.google.android.exoplayer2.text.CueGroup;
141140
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
142141
import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
143142
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
@@ -513,6 +512,7 @@ private void initPlayer(final boolean playOnReady) {
513512
simpleExoPlayer = new ExoPlayer.Builder(context, renderFactory)
514513
.setTrackSelector(trackSelector)
515514
.setLoadControl(loadController)
515+
.setUsePlatformDiagnostics(false)
516516
.build();
517517
simpleExoPlayer.addListener(this);
518518
simpleExoPlayer.setPlayWhenReady(playOnReady);
@@ -2515,12 +2515,12 @@ public void onEvents(@NonNull final com.google.android.exoplayer2.Player player,
25152515
}
25162516

25172517
@Override
2518-
public void onTracksInfoChanged(@NonNull final TracksInfo tracksInfo) {
2518+
public void onTracksChanged(@NonNull final Tracks tracks) {
25192519
if (DEBUG) {
25202520
Log.d(TAG, "ExoPlayer - onTracksChanged(), "
2521-
+ "track group size = " + tracksInfo.getTrackGroupInfos().size());
2521+
+ "track group size = " + tracks.getGroups().size());
25222522
}
2523-
onTextTracksChanged(tracksInfo);
2523+
onTextTracksChanged(tracks);
25242524
}
25252525

25262526
@Override
@@ -2586,8 +2586,8 @@ public void onRenderedFirstFrame() {
25862586
}
25872587

25882588
@Override
2589-
public void onCues(@NonNull final List<Cue> cues) {
2590-
binding.subtitleView.onCues(cues);
2589+
public void onCues(@NonNull final CueGroup cueGroup) {
2590+
binding.subtitleView.setCues(cueGroup.cues);
25912591
}
25922592
//endregion
25932593

@@ -3674,34 +3674,35 @@ private void setupSubtitleView() {
36743674
binding.subtitleView.setStyle(captionStyle);
36753675
}
36763676

3677-
private void onTextTracksChanged(@NonNull final TracksInfo currentTrackInfo) {
3677+
private void onTextTracksChanged(@NonNull final Tracks currentTrack) {
36783678
if (binding == null) {
36793679
return;
36803680
}
36813681

3682-
if (trackSelector.getCurrentMappedTrackInfo() == null
3683-
|| !currentTrackInfo.isTypeSupportedOrEmpty(C.TRACK_TYPE_TEXT)) {
3682+
final boolean trackTypeTextSupported = !currentTrack.containsType(C.TRACK_TYPE_TEXT)
3683+
|| currentTrack.isTypeSupported(C.TRACK_TYPE_TEXT, false);
3684+
if (trackSelector.getCurrentMappedTrackInfo() == null || !trackTypeTextSupported) {
36843685
binding.captionTextView.setVisibility(View.GONE);
36853686
return;
36863687
}
36873688

36883689
// Extract all loaded languages
3689-
final List<TracksInfo.TrackGroupInfo> textTracks = currentTrackInfo
3690-
.getTrackGroupInfos()
3690+
final List<Tracks.Group> textTracks = currentTrack
3691+
.getGroups()
36913692
.stream()
3692-
.filter(trackGroupInfo -> C.TRACK_TYPE_TEXT == trackGroupInfo.getTrackType())
3693+
.filter(trackGroupInfo -> C.TRACK_TYPE_TEXT == trackGroupInfo.getType())
36933694
.collect(Collectors.toList());
36943695
final List<String> availableLanguages = textTracks.stream()
3695-
.map(TracksInfo.TrackGroupInfo::getTrackGroup)
3696+
.map(Tracks.Group::getMediaTrackGroup)
36963697
.filter(textTrack -> textTrack.length > 0)
36973698
.map(textTrack -> textTrack.getFormat(0).language)
36983699
.collect(Collectors.toList());
36993700

37003701
// Find selected text track
37013702
final Optional<Format> selectedTracks = textTracks.stream()
3702-
.filter(TracksInfo.TrackGroupInfo::isSelected)
3703-
.filter(info -> info.getTrackGroup().length >= 1)
3704-
.map(info -> info.getTrackGroup().getFormat(0))
3703+
.filter(Tracks.Group::isSelected)
3704+
.filter(info -> info.getMediaTrackGroup().length >= 1)
3705+
.map(info -> info.getMediaTrackGroup().getFormat(0))
37053706
.findFirst();
37063707

37073708
// Build UI
@@ -4249,20 +4250,12 @@ private void useVideoSource(final boolean videoEnabled) {
42494250
return;
42504251
}
42514252

4252-
final DefaultTrackSelector.ParametersBuilder parametersBuilder =
4253+
final DefaultTrackSelector.Parameters.Builder parametersBuilder =
42534254
trackSelector.buildUponParameters();
42544255

4255-
if (videoEnabled) {
4256-
// Enable again the video track and the subtitles, if there is one selected
4257-
parametersBuilder.setDisabledTrackTypes(Collections.emptySet());
4258-
} else {
4259-
// Disable the video track and the ability to select subtitles
4260-
// Use an ArraySet because we can't use Set.of() on all supported APIs by the app
4261-
final ArraySet<Integer> disabledTracks = new ArraySet<>();
4262-
disabledTracks.add(C.TRACK_TYPE_TEXT);
4263-
disabledTracks.add(C.TRACK_TYPE_VIDEO);
4264-
parametersBuilder.setDisabledTrackTypes(disabledTracks);
4265-
}
4256+
// Enable/disable the video track and the ability to select subtitles
4257+
parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, !videoEnabled);
4258+
parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, !videoEnabled);
42664259

42674260
trackSelector.setParameters(parametersBuilder);
42684261
}

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: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,10 @@ static MediaSource maybeBuildLiveMediaSource(final PlayerDataSource dataSource,
172172
try {
173173
final StreamInfoTag tag = StreamInfoTag.of(info);
174174
if (!info.getHlsUrl().isEmpty()) {
175-
return buildLiveMediaSource(dataSource, info.getHlsUrl(), C.TYPE_HLS, tag);
175+
return buildLiveMediaSource(dataSource, info.getHlsUrl(), C.CONTENT_TYPE_HLS, tag);
176176
} else if (!info.getDashMpdUrl().isEmpty()) {
177-
return buildLiveMediaSource(dataSource, info.getDashMpdUrl(), C.TYPE_DASH, tag);
177+
return buildLiveMediaSource(
178+
dataSource, info.getDashMpdUrl(), C.CONTENT_TYPE_DASH, tag);
178179
}
179180
} catch (final Exception e) {
180181
Log.w(TAG, "Error when generating live media source, falling back to standard sources",
@@ -190,17 +191,17 @@ static MediaSource buildLiveMediaSource(final PlayerDataSource dataSource,
190191
final MediaItemTag metadata) throws ResolverException {
191192
final MediaSource.Factory factory;
192193
switch (type) {
193-
case C.TYPE_SS:
194+
case C.CONTENT_TYPE_SS:
194195
factory = dataSource.getLiveSsMediaSourceFactory();
195196
break;
196-
case C.TYPE_DASH:
197+
case C.CONTENT_TYPE_DASH:
197198
factory = dataSource.getLiveDashMediaSourceFactory();
198199
break;
199-
case C.TYPE_HLS:
200+
case C.CONTENT_TYPE_HLS:
200201
factory = dataSource.getLiveHlsMediaSourceFactory();
201202
break;
202-
case C.TYPE_OTHER:
203-
case C.TYPE_RTSP:
203+
case C.CONTENT_TYPE_OTHER:
204+
case C.CONTENT_TYPE_RTSP:
204205
default:
205206
throw new ResolverException("Unsupported type: " + type);
206207
}

0 commit comments

Comments
 (0)