@Override public boolean dispatchSeekTo(Player player, int windowIndex, long positionMs) { player.seekTo(windowIndex, positionMs); return true; }
@Override public void onSeekTo(Player player, long position) { long duration = player.getDuration(); if (duration != C.TIME_UNSET) { position = Math.min(position, duration); } player.seekTo(Math.max(position, 0)); }
@Override public void onSkipToNext(Player player) { Timeline timeline = player.getCurrentTimeline(); if (timeline.isEmpty() || player.isPlayingAd()) { return; } int windowIndex = player.getCurrentWindowIndex(); int nextWindowIndex = player.getNextWindowIndex(); if (nextWindowIndex != C.INDEX_UNSET) { player.seekTo(nextWindowIndex, C.TIME_UNSET); } else if (timeline.getWindow(windowIndex, window).isDynamic) { player.seekTo(windowIndex, C.TIME_UNSET); } }
/** * Starts playback of the item at the given position. * * @param itemIndex The index of the item to play. * @param positionMs The position at which playback should start. * @param playWhenReady Whether the player should proceed when ready to do so. */ private void setCurrentItem(int itemIndex, long positionMs, boolean playWhenReady) { maybeSetCurrentItemAndNotify(itemIndex); if (castMediaQueueCreationPending) { MediaQueueItem[] items = new MediaQueueItem[mediaQueue.size()]; for (int i = 0; i < items.length; i++) { items[i] = buildMediaQueueItem(mediaQueue.get(i)); } castMediaQueueCreationPending = false; castPlayer.loadItems(items, itemIndex, positionMs, Player.REPEAT_MODE_OFF); } else { currentPlayer.seekTo(itemIndex, positionMs); currentPlayer.setPlayWhenReady(playWhenReady); } }
@Override public void onSkipToQueueItem(Player player, long id) { Timeline timeline = player.getCurrentTimeline(); if (timeline.isEmpty() || player.isPlayingAd()) { return; } int windowIndex = (int) id; if (0 <= windowIndex && windowIndex < timeline.getWindowCount()) { player.seekTo(windowIndex, C.TIME_UNSET); } }
@Override public void onSkipToPrevious(Player player) { Timeline timeline = player.getCurrentTimeline(); if (timeline.isEmpty() || player.isPlayingAd()) { return; } int windowIndex = player.getCurrentWindowIndex(); timeline.getWindow(windowIndex, window); int previousWindowIndex = player.getPreviousWindowIndex(); if (previousWindowIndex != C.INDEX_UNSET && (player.getCurrentPosition() <= MAX_POSITION_FOR_SEEK_TO_PREVIOUS || (window.isDynamic && !window.isSeekable))) { player.seekTo(previousWindowIndex, C.TIME_UNSET); } else { player.seekTo(0); } }
private void initExoPlayer() { if (loading_progress!=null) { loading_progress.setVisibility(View.GONE); } BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); LoadControl loadControl = new DefaultLoadControl(); SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(this), trackSelector, loadControl); mExoPlayerView.setPlayer(player); boolean haveResumePosition = mResumeWindow != C.INDEX_UNSET; if (haveResumePosition) { mExoPlayerView.getPlayer().seekTo(mResumeWindow, mResumePosition); } player.prepare(mVideoSource); mExoPlayerView.getPlayer().setPlayWhenReady(true); }