Add ExoPlayer.retry convenience method
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=211463309
This commit is contained in:
parent
7959a691ad
commit
c57fe1897c
@ -7,8 +7,9 @@
|
|||||||
`compileOptions { targetCompatibility JavaVersion.VERSION_1_8 }` to their
|
`compileOptions { targetCompatibility JavaVersion.VERSION_1_8 }` to their
|
||||||
gradle settings to ensure bytecode compatibility.
|
gradle settings to ensure bytecode compatibility.
|
||||||
* Set `compileSdkVersion` and `targetSdkVersion` to 28.
|
* Set `compileSdkVersion` and `targetSdkVersion` to 28.
|
||||||
* Added support for automatic audio focus handling via
|
* Support for automatic audio focus handling via
|
||||||
`SimpleExoPlayer.setAudioAttributes`.
|
`SimpleExoPlayer.setAudioAttributes`.
|
||||||
|
* Added `ExoPlayer.retry` convenience method.
|
||||||
* Add `AudioListener` for listening to changes in audio configuration during
|
* Add `AudioListener` for listening to changes in audio configuration during
|
||||||
playback ([#3994](https://github.com/google/ExoPlayer/issues/3994)).
|
playback ([#3994](https://github.com/google/ExoPlayer/issues/3994)).
|
||||||
* Add `LoadErrorHandlingPolicy` to allow configuration of load error handling
|
* Add `LoadErrorHandlingPolicy` to allow configuration of load error handling
|
||||||
|
@ -188,6 +188,12 @@ public interface ExoPlayer extends Player {
|
|||||||
*/
|
*/
|
||||||
Looper getApplicationLooper();
|
Looper getApplicationLooper();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retries a failed or stopped playback. Does nothing if the player has been reset, or if playback
|
||||||
|
* has not failed or been stopped.
|
||||||
|
*/
|
||||||
|
void retry();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares the player to play the provided {@link MediaSource}. Equivalent to
|
* Prepares the player to play the provided {@link MediaSource}. Equivalent to
|
||||||
* {@code prepare(mediaSource, true, true)}.
|
* {@code prepare(mediaSource, true, true)}.
|
||||||
|
@ -65,6 +65,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
private final Timeline.Period period;
|
private final Timeline.Period period;
|
||||||
private final ArrayDeque<PlaybackInfoUpdate> pendingPlaybackInfoUpdates;
|
private final ArrayDeque<PlaybackInfoUpdate> pendingPlaybackInfoUpdates;
|
||||||
|
|
||||||
|
private MediaSource mediaSource;
|
||||||
private boolean playWhenReady;
|
private boolean playWhenReady;
|
||||||
private boolean internalPlayWhenReady;
|
private boolean internalPlayWhenReady;
|
||||||
private @RepeatMode int repeatMode;
|
private @RepeatMode int repeatMode;
|
||||||
@ -191,14 +192,23 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
return playbackError;
|
return playbackError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void retry() {
|
||||||
|
if (mediaSource != null
|
||||||
|
&& (playbackError != null || playbackInfo.playbackState == Player.STATE_IDLE)) {
|
||||||
|
prepare(mediaSource, /* resetPosition= */ false, /* resetState= */ false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(MediaSource mediaSource) {
|
public void prepare(MediaSource mediaSource) {
|
||||||
prepare(mediaSource, true, true);
|
prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
|
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
|
||||||
playbackError = null;
|
playbackError = null;
|
||||||
|
this.mediaSource = mediaSource;
|
||||||
PlaybackInfo playbackInfo =
|
PlaybackInfo playbackInfo =
|
||||||
getResetPlaybackInfo(
|
getResetPlaybackInfo(
|
||||||
resetPosition, resetState, /* playbackState= */ Player.STATE_BUFFERING);
|
resetPosition, resetState, /* playbackState= */ Player.STATE_BUFFERING);
|
||||||
@ -384,6 +394,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
public void stop(boolean reset) {
|
public void stop(boolean reset) {
|
||||||
if (reset) {
|
if (reset) {
|
||||||
playbackError = null;
|
playbackError = null;
|
||||||
|
mediaSource = null;
|
||||||
}
|
}
|
||||||
PlaybackInfo playbackInfo =
|
PlaybackInfo playbackInfo =
|
||||||
getResetPlaybackInfo(
|
getResetPlaybackInfo(
|
||||||
@ -410,6 +421,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
Log.i(TAG, "Release " + Integer.toHexString(System.identityHashCode(this)) + " ["
|
Log.i(TAG, "Release " + Integer.toHexString(System.identityHashCode(this)) + " ["
|
||||||
+ ExoPlayerLibraryInfo.VERSION_SLASHY + "] [" + Util.DEVICE_DEBUG_INFO + "] ["
|
+ ExoPlayerLibraryInfo.VERSION_SLASHY + "] [" + Util.DEVICE_DEBUG_INFO + "] ["
|
||||||
+ ExoPlayerLibraryInfo.registeredModules() + "]");
|
+ ExoPlayerLibraryInfo.registeredModules() + "]");
|
||||||
|
mediaSource = null;
|
||||||
internalPlayer.release();
|
internalPlayer.release();
|
||||||
eventHandler.removeCallbacksAndMessages(null);
|
eventHandler.removeCallbacksAndMessages(null);
|
||||||
}
|
}
|
||||||
|
@ -832,6 +832,14 @@ public class SimpleExoPlayer
|
|||||||
return player.getPlaybackError();
|
return player.getPlaybackError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void retry() {
|
||||||
|
if (mediaSource != null
|
||||||
|
&& (getPlaybackError() != null || getPlaybackState() == Player.STATE_IDLE)) {
|
||||||
|
prepare(mediaSource, /* resetPosition= */ false, /* resetState= */ false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(MediaSource mediaSource) {
|
public void prepare(MediaSource mediaSource) {
|
||||||
prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);
|
prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);
|
||||||
@ -839,14 +847,12 @@ public class SimpleExoPlayer
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
|
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
|
||||||
if (this.mediaSource != mediaSource) {
|
|
||||||
if (this.mediaSource != null) {
|
if (this.mediaSource != null) {
|
||||||
this.mediaSource.removeEventListener(analyticsCollector);
|
this.mediaSource.removeEventListener(analyticsCollector);
|
||||||
analyticsCollector.resetForNewMediaSource();
|
analyticsCollector.resetForNewMediaSource();
|
||||||
}
|
}
|
||||||
mediaSource.addEventListener(eventHandler, analyticsCollector);
|
|
||||||
this.mediaSource = mediaSource;
|
this.mediaSource = mediaSource;
|
||||||
}
|
mediaSource.addEventListener(eventHandler, analyticsCollector);
|
||||||
@AudioFocusManager.PlayerCommand
|
@AudioFocusManager.PlayerCommand
|
||||||
int playerCommand = audioFocusManager.handlePrepare(getPlayWhenReady());
|
int playerCommand = audioFocusManager.handlePrepare(getPlayWhenReady());
|
||||||
updatePlayWhenReady(getPlayWhenReady(), playerCommand);
|
updatePlayWhenReady(getPlayWhenReady(), playerCommand);
|
||||||
@ -949,8 +955,10 @@ public class SimpleExoPlayer
|
|||||||
player.stop(reset);
|
player.stop(reset);
|
||||||
if (mediaSource != null) {
|
if (mediaSource != null) {
|
||||||
mediaSource.removeEventListener(analyticsCollector);
|
mediaSource.removeEventListener(analyticsCollector);
|
||||||
mediaSource = null;
|
|
||||||
analyticsCollector.resetForNewMediaSource();
|
analyticsCollector.resetForNewMediaSource();
|
||||||
|
if (reset) {
|
||||||
|
mediaSource = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
audioFocusManager.handleStop();
|
audioFocusManager.handleStop();
|
||||||
currentCues = Collections.emptyList();
|
currentCues = Collections.emptyList();
|
||||||
@ -969,6 +977,7 @@ public class SimpleExoPlayer
|
|||||||
}
|
}
|
||||||
if (mediaSource != null) {
|
if (mediaSource != null) {
|
||||||
mediaSource.removeEventListener(analyticsCollector);
|
mediaSource.removeEventListener(analyticsCollector);
|
||||||
|
mediaSource = null;
|
||||||
}
|
}
|
||||||
bandwidthMeter.removeEventListener(analyticsCollector);
|
bandwidthMeter.removeEventListener(analyticsCollector);
|
||||||
currentCues = Collections.emptyList();
|
currentCues = Collections.emptyList();
|
||||||
|
@ -79,6 +79,11 @@ public abstract class StubExoPlayer implements ExoPlayer {
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void retry() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(MediaSource mediaSource) {
|
public void prepare(MediaSource mediaSource) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user