Add getPlaybackError to Player/ExoPlayer interface

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=193400443
This commit is contained in:
olly 2018-04-18 12:41:15 -07:00 committed by Oliver Woodman
parent fb5e31d3d6
commit d4aceef8a8
7 changed files with 44 additions and 2 deletions

View file

@ -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)).

View file

@ -307,6 +307,11 @@ public final class CastPlayer implements Player {
return playbackState; return playbackState;
} }
@Override
public Exception getPlaybackError() {
return null;
}
@Override @Override
public void setPlayWhenReady(boolean playWhenReady) { public void setPlayWhenReady(boolean playWhenReady) {
if (remoteMediaClient == null) { if (remoteMediaClient == null) {

View file

@ -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)}.

View file

@ -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;
@ -156,6 +157,11 @@ import java.util.concurrent.CopyOnWriteArraySet;
return playbackInfo.playbackState; return playbackInfo.playbackState;
} }
@Override
public @Nullable ExoPlaybackException getPlaybackError() {
return playbackError;
}
@Override @Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
prepare(mediaSource, true, true); prepare(mediaSource, true, true);
@ -163,6 +169,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
@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;
@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;
} }
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:

View file

@ -459,6 +459,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>

View file

@ -653,6 +653,11 @@ public class SimpleExoPlayer implements ExoPlayer, Player.VideoComponent, Player
return player.getPlaybackState(); return player.getPlaybackState();
} }
@Override
public ExoPlaybackException getPlaybackError() {
return player.getPlaybackError();
}
@Override @Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true); prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);

View file

@ -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;
@ -63,6 +64,11 @@ public abstract class StubExoPlayer implements ExoPlayer {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Override
public ExoPlaybackException getPlaybackError() {
throw new UnsupportedOperationException();
}
@Override @Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();