Search in sources :

Example 41 with Player

use of org.powerbot.script.rt4.Player in project ExoPlayer by google.

the class StyledPlayerControlView method updateTimeline.

private void updateTimeline() {
    @Nullable Player player = this.player;
    if (player == null) {
        return;
    }
    multiWindowTimeBar = showMultiWindowTimeBar && canShowMultiWindowTimeBar(player.getCurrentTimeline(), window);
    currentWindowOffset = 0;
    long durationUs = 0;
    int adGroupCount = 0;
    Timeline timeline = player.getCurrentTimeline();
    if (!timeline.isEmpty()) {
        int currentWindowIndex = player.getCurrentMediaItemIndex();
        int firstWindowIndex = multiWindowTimeBar ? 0 : currentWindowIndex;
        int lastWindowIndex = multiWindowTimeBar ? timeline.getWindowCount() - 1 : currentWindowIndex;
        for (int i = firstWindowIndex; i <= lastWindowIndex; i++) {
            if (i == currentWindowIndex) {
                currentWindowOffset = Util.usToMs(durationUs);
            }
            timeline.getWindow(i, window);
            if (window.durationUs == C.TIME_UNSET) {
                Assertions.checkState(!multiWindowTimeBar);
                break;
            }
            for (int j = window.firstPeriodIndex; j <= window.lastPeriodIndex; j++) {
                timeline.getPeriod(j, period);
                int removedGroups = period.getRemovedAdGroupCount();
                int totalGroups = period.getAdGroupCount();
                for (int adGroupIndex = removedGroups; adGroupIndex < totalGroups; adGroupIndex++) {
                    long adGroupTimeInPeriodUs = period.getAdGroupTimeUs(adGroupIndex);
                    if (adGroupTimeInPeriodUs == C.TIME_END_OF_SOURCE) {
                        if (period.durationUs == C.TIME_UNSET) {
                            // Don't show ad markers for postrolls in periods with unknown duration.
                            continue;
                        }
                        adGroupTimeInPeriodUs = period.durationUs;
                    }
                    long adGroupTimeInWindowUs = adGroupTimeInPeriodUs + period.getPositionInWindowUs();
                    if (adGroupTimeInWindowUs >= 0) {
                        if (adGroupCount == adGroupTimesMs.length) {
                            int newLength = adGroupTimesMs.length == 0 ? 1 : adGroupTimesMs.length * 2;
                            adGroupTimesMs = Arrays.copyOf(adGroupTimesMs, newLength);
                            playedAdGroups = Arrays.copyOf(playedAdGroups, newLength);
                        }
                        adGroupTimesMs[adGroupCount] = Util.usToMs(durationUs + adGroupTimeInWindowUs);
                        playedAdGroups[adGroupCount] = period.hasPlayedAdGroup(adGroupIndex);
                        adGroupCount++;
                    }
                }
            }
            durationUs += window.durationUs;
        }
    }
    long durationMs = Util.usToMs(durationUs);
    if (durationView != null) {
        durationView.setText(Util.getStringForTime(formatBuilder, formatter, durationMs));
    }
    if (timeBar != null) {
        timeBar.setDuration(durationMs);
        int extraAdGroupCount = extraAdGroupTimesMs.length;
        int totalAdGroupCount = adGroupCount + extraAdGroupCount;
        if (totalAdGroupCount > adGroupTimesMs.length) {
            adGroupTimesMs = Arrays.copyOf(adGroupTimesMs, totalAdGroupCount);
            playedAdGroups = Arrays.copyOf(playedAdGroups, totalAdGroupCount);
        }
        System.arraycopy(extraAdGroupTimesMs, 0, adGroupTimesMs, adGroupCount, extraAdGroupCount);
        System.arraycopy(extraPlayedAdGroups, 0, playedAdGroups, adGroupCount, extraAdGroupCount);
        timeBar.setAdGroupTimesMs(adGroupTimesMs, playedAdGroups, totalAdGroupCount);
    }
    updateProgress();
}
Also used : Player(com.google.android.exoplayer2.Player) ForwardingPlayer(com.google.android.exoplayer2.ForwardingPlayer) Timeline(com.google.android.exoplayer2.Timeline) Nullable(androidx.annotation.Nullable) SuppressLint(android.annotation.SuppressLint)

Example 42 with Player

use of org.powerbot.script.rt4.Player in project ExoPlayer by google.

the class StyledPlayerControlView method dispatchMediaKeyEvent.

/**
 * Called to process media key events. Any {@link KeyEvent} can be passed but only media key
 * events will be handled.
 *
 * @param event A key event.
 * @return Whether the key event was handled.
 */
public boolean dispatchMediaKeyEvent(KeyEvent event) {
    int keyCode = event.getKeyCode();
    @Nullable Player player = this.player;
    if (player == null || !isHandledMediaKey(keyCode)) {
        return false;
    }
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        if (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) {
            if (player.getPlaybackState() != Player.STATE_ENDED) {
                player.seekForward();
            }
        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_REWIND) {
            player.seekBack();
        } else if (event.getRepeatCount() == 0) {
            switch(keyCode) {
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                case KeyEvent.KEYCODE_HEADSETHOOK:
                    dispatchPlayPause(player);
                    break;
                case KeyEvent.KEYCODE_MEDIA_PLAY:
                    dispatchPlay(player);
                    break;
                case KeyEvent.KEYCODE_MEDIA_PAUSE:
                    dispatchPause(player);
                    break;
                case KeyEvent.KEYCODE_MEDIA_NEXT:
                    player.seekToNext();
                    break;
                case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
                    player.seekToPrevious();
                    break;
                default:
                    break;
            }
        }
    }
    return true;
}
Also used : Player(com.google.android.exoplayer2.Player) ForwardingPlayer(com.google.android.exoplayer2.ForwardingPlayer) SuppressLint(android.annotation.SuppressLint) Nullable(androidx.annotation.Nullable)

Example 43 with Player

use of org.powerbot.script.rt4.Player in project ExoPlayer by google.

the class StyledPlayerView method setPlayer.

/**
 * Sets the {@link Player} to use.
 *
 * <p>To transition a {@link Player} from targeting one view to another, it's recommended to use
 * {@link #switchTargetView(Player, StyledPlayerView, StyledPlayerView)} rather than this method.
 * If you do wish to use this method directly, be sure to attach the player to the new view
 * <em>before</em> calling {@code setPlayer(null)} to detach it from the old one. This ordering is
 * significantly more efficient and may allow for more seamless transitions.
 *
 * @param player The {@link Player} to use, or {@code null} to detach the current player. Only
 *     players which are accessed on the main thread are supported ({@code
 *     player.getApplicationLooper() == Looper.getMainLooper()}).
 */
public void setPlayer(@Nullable Player player) {
    Assertions.checkState(Looper.myLooper() == Looper.getMainLooper());
    Assertions.checkArgument(player == null || player.getApplicationLooper() == Looper.getMainLooper());
    if (this.player == player) {
        return;
    }
    @Nullable Player oldPlayer = this.player;
    if (oldPlayer != null) {
        oldPlayer.removeListener(componentListener);
        if (surfaceView instanceof TextureView) {
            oldPlayer.clearVideoTextureView((TextureView) surfaceView);
        } else if (surfaceView instanceof SurfaceView) {
            oldPlayer.clearVideoSurfaceView((SurfaceView) surfaceView);
        }
    }
    if (subtitleView != null) {
        subtitleView.setCues(null);
    }
    this.player = player;
    if (useController()) {
        controller.setPlayer(player);
    }
    updateBuffering();
    updateErrorMessage();
    updateForCurrentTrackSelections(/* isNewPlayer= */
    true);
    if (player != null) {
        if (player.isCommandAvailable(COMMAND_SET_VIDEO_SURFACE)) {
            if (surfaceView instanceof TextureView) {
                player.setVideoTextureView((TextureView) surfaceView);
            } else if (surfaceView instanceof SurfaceView) {
                player.setVideoSurfaceView((SurfaceView) surfaceView);
            }
            updateAspectRatio();
        }
        if (subtitleView != null && player.isCommandAvailable(COMMAND_GET_TEXT)) {
            subtitleView.setCues(player.getCurrentCues());
        }
        player.addListener(componentListener);
        maybeShowController(false);
    } else {
        hideController();
    }
}
Also used : Player(com.google.android.exoplayer2.Player) TextureView(android.view.TextureView) Nullable(androidx.annotation.Nullable) SurfaceView(android.view.SurfaceView) GLSurfaceView(android.opengl.GLSurfaceView)

Example 44 with Player

use of org.powerbot.script.rt4.Player in project ExoPlayer by google.

the class PlayerControlView method dispatchMediaKeyEvent.

/**
 * Called to process media key events. Any {@link KeyEvent} can be passed but only media key
 * events will be handled.
 *
 * @param event A key event.
 * @return Whether the key event was handled.
 */
public boolean dispatchMediaKeyEvent(KeyEvent event) {
    int keyCode = event.getKeyCode();
    @Nullable Player player = this.player;
    if (player == null || !isHandledMediaKey(keyCode)) {
        return false;
    }
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        if (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) {
            if (player.getPlaybackState() != Player.STATE_ENDED) {
                player.seekForward();
            }
        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_REWIND) {
            player.seekBack();
        } else if (event.getRepeatCount() == 0) {
            switch(keyCode) {
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                case KeyEvent.KEYCODE_HEADSETHOOK:
                    dispatchPlayPause(player);
                    break;
                case KeyEvent.KEYCODE_MEDIA_PLAY:
                    dispatchPlay(player);
                    break;
                case KeyEvent.KEYCODE_MEDIA_PAUSE:
                    dispatchPause(player);
                    break;
                case KeyEvent.KEYCODE_MEDIA_NEXT:
                    player.seekToNext();
                    break;
                case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
                    player.seekToPrevious();
                    break;
                default:
                    break;
            }
        }
    }
    return true;
}
Also used : Player(com.google.android.exoplayer2.Player) SuppressLint(android.annotation.SuppressLint) Nullable(androidx.annotation.Nullable)

Example 45 with Player

use of org.powerbot.script.rt4.Player in project ExoPlayer by google.

the class PlayerControlView method updateRepeatModeButton.

private void updateRepeatModeButton() {
    if (!isVisible() || !isAttachedToWindow || repeatToggleButton == null) {
        return;
    }
    if (repeatToggleModes == RepeatModeUtil.REPEAT_TOGGLE_MODE_NONE) {
        updateButton(/* visible= */
        false, /* enabled= */
        false, repeatToggleButton);
        return;
    }
    @Nullable Player player = this.player;
    if (player == null) {
        updateButton(/* visible= */
        true, /* enabled= */
        false, repeatToggleButton);
        repeatToggleButton.setImageDrawable(repeatOffButtonDrawable);
        repeatToggleButton.setContentDescription(repeatOffButtonContentDescription);
        return;
    }
    updateButton(/* visible= */
    true, /* enabled= */
    true, repeatToggleButton);
    switch(player.getRepeatMode()) {
        case Player.REPEAT_MODE_OFF:
            repeatToggleButton.setImageDrawable(repeatOffButtonDrawable);
            repeatToggleButton.setContentDescription(repeatOffButtonContentDescription);
            break;
        case Player.REPEAT_MODE_ONE:
            repeatToggleButton.setImageDrawable(repeatOneButtonDrawable);
            repeatToggleButton.setContentDescription(repeatOneButtonContentDescription);
            break;
        case Player.REPEAT_MODE_ALL:
            repeatToggleButton.setImageDrawable(repeatAllButtonDrawable);
            repeatToggleButton.setContentDescription(repeatAllButtonContentDescription);
            break;
        default:
    }
    repeatToggleButton.setVisibility(VISIBLE);
}
Also used : Player(com.google.android.exoplayer2.Player) Nullable(androidx.annotation.Nullable)

Aggregations

Player (com.google.android.exoplayer2.Player)39 Nullable (androidx.annotation.Nullable)25 ExoPlayer (com.google.android.exoplayer2.ExoPlayer)14 MediaItem (com.google.android.exoplayer2.MediaItem)11 Test (org.junit.Test)10 VideoAdPlayer (com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer)8 Timeline (com.google.android.exoplayer2.Timeline)8 Context (android.content.Context)6 ApplicationProvider (androidx.test.core.app.ApplicationProvider)6 AndroidJUnit4 (androidx.test.ext.junit.runners.AndroidJUnit4)6 ForwardingPlayer (com.google.android.exoplayer2.ForwardingPlayer)6 TestPlayerRunHelper.runUntilPendingCommandsAreFullyHandled (com.google.android.exoplayer2.robolectric.TestPlayerRunHelper.runUntilPendingCommandsAreFullyHandled)6 Tile (org.powerbot.script.Tile)6 SuppressLint (android.annotation.SuppressLint)5 Pair (android.util.Pair)5 Surface (android.view.Surface)5 SurfaceTexture (android.graphics.SurfaceTexture)4 AnalyticsListener (com.google.android.exoplayer2.analytics.AnalyticsListener)4 PlayerId (com.google.android.exoplayer2.analytics.PlayerId)4 PlaybackOutput (com.google.android.exoplayer2.robolectric.PlaybackOutput)4