-Fixed seek problems caused by dynamic timeline .

-Removed debouncing, players are now much more responsive.
-Removed some redundant methods.
This commit is contained in:
John Zhen M 2017-09-09 16:11:45 -07:00 committed by John Zhen Mo
parent c38e4190f1
commit c24d46cf0f
3 changed files with 14 additions and 23 deletions

View File

@ -534,6 +534,17 @@ public abstract class BasePlayer implements Player.EventListener,
@Override @Override
public void onTimelineChanged(Timeline timeline, Object manifest) { public void onTimelineChanged(Timeline timeline, Object manifest) {
if (DEBUG) Log.d(TAG, "onTimelineChanged(), timeline size = " + timeline.getWindowCount()); if (DEBUG) Log.d(TAG, "onTimelineChanged(), timeline size = " + timeline.getWindowCount());
if (simpleExoPlayer.getCurrentWindowIndex() != playbackManager.getCurrentSourceIndex()) {
if (timeline.getWindowCount() > playbackManager.getCurrentSourceIndex()) {
if (DEBUG) Log.d(TAG, "Rewinding to correct window");
simpleExoPlayer.seekToDefaultPosition(playbackManager.getCurrentSourceIndex());
}
}
if (!simpleExoPlayer.isCurrentWindowDynamic() && simpleExoPlayer.isCurrentWindowSeekable()) {
simpleExoPlayer.setPlayWhenReady(true);
}
} }
@Override @Override
@ -638,7 +649,6 @@ public abstract class BasePlayer implements Player.EventListener,
simpleExoPlayer.prepare(playbackManager.getMediaSource()); simpleExoPlayer.prepare(playbackManager.getMediaSource());
simpleExoPlayer.seekTo(playbackManager.getCurrentSourceIndex(), videoStartPos); simpleExoPlayer.seekTo(playbackManager.getCurrentSourceIndex(), videoStartPos);
simpleExoPlayer.setPlayWhenReady(false);
} }
@Override @Override
@ -650,20 +660,9 @@ public abstract class BasePlayer implements Player.EventListener,
videoThumbnailUrl = info.thumbnail_url; videoThumbnailUrl = info.thumbnail_url;
videoTitle = info.name; videoTitle = info.name;
onTimelineChanged(simpleExoPlayer.getCurrentTimeline(), null);
initThumbnail(videoThumbnailUrl); initThumbnail(videoThumbnailUrl);
if (simpleExoPlayer.getCurrentWindowIndex() != playbackManager.getCurrentSourceIndex()) {
if (DEBUG) Log.w(TAG, "Rewinding to correct window");
if (simpleExoPlayer.getCurrentTimeline().getWindowCount() > playbackManager.getCurrentSourceIndex()) {
simpleExoPlayer.seekToDefaultPosition(playbackManager.getCurrentSourceIndex());
} else {
if (DEBUG) Log.w(TAG, "Play Queue out of sync");
playbackManager.reset();
return;
}
}
simpleExoPlayer.setPlayWhenReady(true);
} }
@Override @Override

View File

@ -109,13 +109,6 @@ public class PlaybackManager {
load(); load();
} }
public void reset() {
tryBlock();
resetSources();
load();
}
public void dispose() { public void dispose() {
if (playQueueReactor != null) playQueueReactor.cancel(); if (playQueueReactor != null) playQueueReactor.cancel();
if (disposables != null) disposables.dispose(); if (disposables != null) disposables.dispose();

View File

@ -26,7 +26,6 @@ import io.reactivex.subjects.BehaviorSubject;
public abstract class PlayQueue implements Serializable { public abstract class PlayQueue implements Serializable {
private final String TAG = "PlayQueue@" + Integer.toHexString(hashCode()); private final String TAG = "PlayQueue@" + Integer.toHexString(hashCode());
private final int INDEX_CHANGE_DEBOUNCE = 350;
public static final boolean DEBUG = true; public static final boolean DEBUG = true;
@ -59,7 +58,7 @@ public abstract class PlayQueue implements Serializable {
broadcastReceiver = Flowable.merge( broadcastReceiver = Flowable.merge(
streamsEventBroadcast.toFlowable(BackpressureStrategy.BUFFER), streamsEventBroadcast.toFlowable(BackpressureStrategy.BUFFER),
indexEventBroadcast.toFlowable(BackpressureStrategy.BUFFER).debounce(INDEX_CHANGE_DEBOUNCE, TimeUnit.MILLISECONDS) indexEventBroadcast.toFlowable(BackpressureStrategy.BUFFER)
).startWith(new InitEvent()); ).startWith(new InitEvent());
if (DEBUG) broadcastReceiver.subscribe(getSelfReporter()); if (DEBUG) broadcastReceiver.subscribe(getSelfReporter());