Commit d4aceef8 by olly Committed by Oliver Woodman

Add getPlaybackError to Player/ExoPlayer interface

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=193400443
parent fb5e31d3
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
* Updated default max buffer length in `DefaultLoadControl`. * Updated default max buffer length in `DefaultLoadControl`.
* Added `AnalyticsListener` interface which can be registered in * Added `AnalyticsListener` interface which can be registered in
`SimpleExoPlayer` to receive detailed meta data for each ExoPlayer event. `SimpleExoPlayer` to receive detailed meta data for each ExoPlayer event.
* Added `getPlaybackError` to `Player` interface.
* UI components: * UI components:
* Add support for listening to `AspectRatioFrameLayout`'s aspect ratio update * Add support for listening to `AspectRatioFrameLayout`'s aspect ratio update
([#3736](https://github.com/google/ExoPlayer/issues/3736)). ([#3736](https://github.com/google/ExoPlayer/issues/3736)).
......
...@@ -308,6 +308,11 @@ public final class CastPlayer implements Player { ...@@ -308,6 +308,11 @@ public final class CastPlayer implements Player {
} }
@Override @Override
public Exception getPlaybackError() {
return null;
}
@Override
public void setPlayWhenReady(boolean playWhenReady) { public void setPlayWhenReady(boolean playWhenReady) {
if (remoteMediaClient == null) { if (remoteMediaClient == null) {
return; return;
......
...@@ -185,6 +185,10 @@ public interface ExoPlayer extends Player { ...@@ -185,6 +185,10 @@ public interface ExoPlayer extends Player {
*/ */
Looper getPlaybackLooper(); Looper getPlaybackLooper();
@Override
@Nullable
ExoPlaybackException getPlaybackError();
/** /**
* 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)}.
......
...@@ -61,6 +61,7 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -61,6 +61,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
private boolean hasPendingPrepare; private boolean hasPendingPrepare;
private boolean hasPendingSeek; private boolean hasPendingSeek;
private PlaybackParameters playbackParameters; private PlaybackParameters playbackParameters;
private @Nullable ExoPlaybackException playbackError;
// Playback information when there is no pending seek/set source operation. // Playback information when there is no pending seek/set source operation.
private PlaybackInfo playbackInfo; private PlaybackInfo playbackInfo;
...@@ -157,12 +158,18 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -157,12 +158,18 @@ import java.util.concurrent.CopyOnWriteArraySet;
} }
@Override @Override
public @Nullable ExoPlaybackException getPlaybackError() {
return playbackError;
}
@Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
prepare(mediaSource, true, true); prepare(mediaSource, true, true);
} }
@Override @Override
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) { public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
playbackError = null;
PlaybackInfo playbackInfo = PlaybackInfo playbackInfo =
getResetPlaybackInfo( getResetPlaybackInfo(
resetPosition, resetState, /* playbackState= */ Player.STATE_BUFFERING); resetPosition, resetState, /* playbackState= */ Player.STATE_BUFFERING);
...@@ -325,6 +332,9 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -325,6 +332,9 @@ import java.util.concurrent.CopyOnWriteArraySet;
@Override @Override
public void stop(boolean reset) { public void stop(boolean reset) {
if (reset) {
playbackError = null;
}
PlaybackInfo playbackInfo = PlaybackInfo playbackInfo =
getResetPlaybackInfo( getResetPlaybackInfo(
/* resetPosition= */ reset, /* resetPosition= */ reset,
...@@ -560,9 +570,9 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -560,9 +570,9 @@ import java.util.concurrent.CopyOnWriteArraySet;
} }
break; break;
case ExoPlayerImplInternal.MSG_ERROR: case ExoPlayerImplInternal.MSG_ERROR:
ExoPlaybackException exception = (ExoPlaybackException) msg.obj; playbackError = (ExoPlaybackException) msg.obj;
for (Player.EventListener listener : listeners) { for (Player.EventListener listener : listeners) {
listener.onPlayerError(exception); listener.onPlayerError(playbackError);
} }
break; break;
default: default:
......
...@@ -460,6 +460,17 @@ public interface Player { ...@@ -460,6 +460,17 @@ public interface Player {
int getPlaybackState(); int getPlaybackState();
/** /**
* Returns the error that caused playback to fail. This is the same error that will have been
* reported via @link Player.EventListener#onPlayerError(ExoPlaybackException)} at the time of
* failure. It can be queried using this method until {@code stop(true)} is called or the player
* is re-prepared.
*
* @return The error, or {@code null}.
*/
@Nullable
Exception getPlaybackError();
/**
* Sets whether playback should proceed when {@link #getPlaybackState()} == {@link #STATE_READY}. * Sets whether playback should proceed when {@link #getPlaybackState()} == {@link #STATE_READY}.
* <p> * <p>
* If the player is already in the ready state then this method can be used to pause and resume * If the player is already in the ready state then this method can be used to pause and resume
......
...@@ -654,6 +654,11 @@ public class SimpleExoPlayer implements ExoPlayer, Player.VideoComponent, Player ...@@ -654,6 +654,11 @@ public class SimpleExoPlayer implements ExoPlayer, Player.VideoComponent, Player
} }
@Override @Override
public ExoPlaybackException getPlaybackError() {
return player.getPlaybackError();
}
@Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true); prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);
} }
......
...@@ -17,6 +17,7 @@ package com.google.android.exoplayer2.testutil; ...@@ -17,6 +17,7 @@ package com.google.android.exoplayer2.testutil;
import android.os.Looper; import android.os.Looper;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
...@@ -64,6 +65,11 @@ public abstract class StubExoPlayer implements ExoPlayer { ...@@ -64,6 +65,11 @@ public abstract class StubExoPlayer implements ExoPlayer {
} }
@Override @Override
public ExoPlaybackException getPlaybackError() {
throw new UnsupportedOperationException();
}
@Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment