Add some comments and a JavaDoc

This commit is contained in:
TiA4f8R 2021-11-27 16:52:54 +01:00
parent 7a356412d5
commit a1c5c94753
No known key found for this signature in database
GPG Key ID: E6D3E7F5949450DD
2 changed files with 28 additions and 6 deletions

View File

@ -3295,9 +3295,18 @@ public final class Player implements
} else { } else {
if (isAudioOnly if (isAudioOnly
&& !videoResolver.wasLastResolvedVideoAndAudioSeparated().orElse(false)) { && !videoResolver.wasLastResolvedVideoAndAudioSeparated().orElse(false)) {
// If the current info has only video streams with audio and if the stream is
// played as audio, we need to use the audio resolver, otherwise the video stream
// will be played in background.
return audioResolver.resolve(info); return audioResolver.resolve(info);
} }
// Even if the stream is played in background, we need to use the video resolver if the
// info played is separated video-only and audio-only streams; otherwise, if the audio
// resolver was called when the app was in background, the app will only stream audio
// when the user come back to the app and will never fetch the video stream.
// Note that the video is not fetched when the app is in background because the video
// renderer is fully disabled (see useVideoSource method).
return videoResolver.resolve(info); return videoResolver.resolve(info);
} }
} }
@ -4160,8 +4169,8 @@ public final class Player implements
} }
isAudioOnly = !videoEnabled; isAudioOnly = !videoEnabled;
// When a user returns from background controls could be hidden // When a user returns from background, controls could be hidden but SystemUI will be shown
// but systemUI will be shown 100%. Hide it // 100%. Hide it.
if (!isAudioOnly && !isControlsVisible()) { if (!isAudioOnly && !isControlsVisible()) {
hideSystemUIIfNeeded(); hideSystemUIIfNeeded();
} }
@ -4198,9 +4207,13 @@ public final class Player implements
final TrackGroupArray videoTrackGroupArray = Objects.requireNonNull( final TrackGroupArray videoTrackGroupArray = Objects.requireNonNull(
trackSelector.getCurrentMappedTrackInfo()).getTrackGroups(videoRenderIndex); trackSelector.getCurrentMappedTrackInfo()).getTrackGroups(videoRenderIndex);
if (videoEnabled) { if (videoEnabled) {
// Clearing the null selection override enable again the video stream (and its
// fetching).
trackSelector.setParameters(trackSelector.buildUponParameters() trackSelector.setParameters(trackSelector.buildUponParameters()
.clearSelectionOverride(videoRenderIndex, videoTrackGroupArray)); .clearSelectionOverride(videoRenderIndex, videoTrackGroupArray));
} else { } else {
// Using setRendererDisabled still fetch the video stream in background, contrary
// to setSelectionOverride with a null override.
trackSelector.setParameters(trackSelector.buildUponParameters() trackSelector.setParameters(trackSelector.buildUponParameters()
.setSelectionOverride(videoRenderIndex, videoTrackGroupArray, null)); .setSelectionOverride(videoRenderIndex, videoTrackGroupArray, null));
} }
@ -4436,6 +4449,15 @@ public final class Player implements
} }
//endregion //endregion
/**
* Get the video renderer index of the current playing stream.
*
* This method returns the video renderer index of the current
* {@link MappingTrackSelector.MappedTrackInfo} or {@link #RENDERER_UNAVAILABLE} if the current
* {@link MappingTrackSelector.MappedTrackInfo} is null or if there is no video renderer index.
*
* @return the video renderer index or {@link #RENDERER_UNAVAILABLE} if it cannot be get
*/
private int getVideoRendererIndex() { private int getVideoRendererIndex() {
final MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector final MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector
.getCurrentMappedTrackInfo(); .getCurrentMappedTrackInfo();

View File

@ -128,11 +128,11 @@ public class VideoPlaybackResolver implements PlaybackResolver {
} }
/** /**
* Determines if the last resolved StreamInfo had separated audio and video streams * Determine if the last resolved {@link StreamInfo} had separated audio and video streams (or
* (or only audio). * only audio).
* *
* @return {@link Optional#empty()} if nothing was resolved * @return {@link Optional#empty()} if nothing was resolved, otherwise {@code true} or
* otherwise <code>true</code> or <code>false</code> * {@code false}
*/ */
public Optional<Boolean> wasLastResolvedVideoAndAudioSeparated() { public Optional<Boolean> wasLastResolvedVideoAndAudioSeparated() {
return Optional.ofNullable(wasLastResolvedVideoAndAudioSeparated); return Optional.ofNullable(wasLastResolvedVideoAndAudioSeparated);