Search in sources :

Example 46 with Player

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

the class PlayerControlView 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) Timeline(com.google.android.exoplayer2.Timeline) Nullable(androidx.annotation.Nullable) SuppressLint(android.annotation.SuppressLint)

Example 47 with Player

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

the class PlayerControlView method updateProgress.

private void updateProgress() {
    if (!isVisible() || !isAttachedToWindow) {
        return;
    }
    @Nullable Player player = this.player;
    long position = 0;
    long bufferedPosition = 0;
    if (player != null) {
        position = currentWindowOffset + player.getContentPosition();
        bufferedPosition = currentWindowOffset + player.getContentBufferedPosition();
    }
    boolean positionChanged = position != currentPosition;
    boolean bufferedPositionChanged = bufferedPosition != currentBufferedPosition;
    currentPosition = position;
    currentBufferedPosition = bufferedPosition;
    // same position to the user.
    if (positionView != null && !scrubbing && positionChanged) {
        positionView.setText(Util.getStringForTime(formatBuilder, formatter, position));
    }
    if (timeBar != null) {
        timeBar.setPosition(position);
        timeBar.setBufferedPosition(bufferedPosition);
    }
    if (progressUpdateListener != null && (positionChanged || bufferedPositionChanged)) {
        progressUpdateListener.onProgressUpdate(position, bufferedPosition);
    }
    // Cancel any pending updates and schedule a new one if necessary.
    removeCallbacks(updateProgressAction);
    int playbackState = player == null ? Player.STATE_IDLE : player.getPlaybackState();
    if (player != null && player.isPlaying()) {
        long mediaTimeDelayMs = timeBar != null ? timeBar.getPreferredUpdateDelay() : MAX_UPDATE_INTERVAL_MS;
        // Limit delay to the start of the next full second to ensure position display is smooth.
        long mediaTimeUntilNextFullSecondMs = 1000 - position % 1000;
        mediaTimeDelayMs = Math.min(mediaTimeDelayMs, mediaTimeUntilNextFullSecondMs);
        // Calculate the delay until the next update in real time, taking playback speed into account.
        float playbackSpeed = player.getPlaybackParameters().speed;
        long delayMs = playbackSpeed > 0 ? (long) (mediaTimeDelayMs / playbackSpeed) : MAX_UPDATE_INTERVAL_MS;
        // Constrain the delay to avoid too frequent / infrequent updates.
        delayMs = Util.constrainValue(delayMs, timeBarMinUpdateIntervalMs, MAX_UPDATE_INTERVAL_MS);
        postDelayed(updateProgressAction, delayMs);
    } else if (playbackState != Player.STATE_ENDED && playbackState != Player.STATE_IDLE) {
        postDelayed(updateProgressAction, MAX_UPDATE_INTERVAL_MS);
    }
}
Also used : Player(com.google.android.exoplayer2.Player) Nullable(androidx.annotation.Nullable) SuppressLint(android.annotation.SuppressLint)

Example 48 with Player

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

the class Transformer method getProgress.

/**
 * Returns the current {@link ProgressState} and updates {@code progressHolder} with the current
 * progress if it is {@link #PROGRESS_STATE_AVAILABLE available}.
 *
 * <p>After a transformation {@link Listener#onTransformationCompleted(MediaItem) completes}, this
 * method returns {@link #PROGRESS_STATE_NO_TRANSFORMATION}.
 *
 * @param progressHolder A {@link ProgressHolder}, updated to hold the percentage progress if
 *     {@link #PROGRESS_STATE_AVAILABLE available}.
 * @return The {@link ProgressState}.
 * @throws IllegalStateException If this method is called from the wrong thread.
 */
@ProgressState
public int getProgress(ProgressHolder progressHolder) {
    verifyApplicationThread();
    if (progressState == PROGRESS_STATE_AVAILABLE) {
        Player player = checkNotNull(this.player);
        long durationMs = player.getDuration();
        long positionMs = player.getCurrentPosition();
        progressHolder.progress = min((int) (positionMs * 100 / durationMs), 99);
    }
    return progressState;
}
Also used : Player(com.google.android.exoplayer2.Player) ExoPlayer(com.google.android.exoplayer2.ExoPlayer)

Example 49 with Player

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

the class PlayerManager method setCurrentPlayer.

private void setCurrentPlayer(Player currentPlayer) {
    if (this.currentPlayer == currentPlayer) {
        return;
    }
    playerView.setPlayer(currentPlayer);
    playerView.setControllerHideOnTouch(currentPlayer == localPlayer);
    if (currentPlayer == castPlayer) {
        playerView.setControllerShowTimeoutMs(0);
        playerView.showController();
        playerView.setDefaultArtwork(ResourcesCompat.getDrawable(context.getResources(), R.drawable.ic_baseline_cast_connected_400, /* theme= */
        null));
    } else {
        // currentPlayer == localPlayer
        playerView.setControllerShowTimeoutMs(StyledPlayerControlView.DEFAULT_SHOW_TIMEOUT_MS);
        playerView.setDefaultArtwork(null);
    }
    // Player state management.
    long playbackPositionMs = C.TIME_UNSET;
    int currentItemIndex = C.INDEX_UNSET;
    boolean playWhenReady = false;
    Player previousPlayer = this.currentPlayer;
    if (previousPlayer != null) {
        // Save state from the previous player.
        int playbackState = previousPlayer.getPlaybackState();
        if (playbackState != Player.STATE_ENDED) {
            playbackPositionMs = previousPlayer.getCurrentPosition();
            playWhenReady = previousPlayer.getPlayWhenReady();
            currentItemIndex = previousPlayer.getCurrentMediaItemIndex();
            if (currentItemIndex != this.currentItemIndex) {
                playbackPositionMs = C.TIME_UNSET;
                currentItemIndex = this.currentItemIndex;
            }
        }
        previousPlayer.stop();
        previousPlayer.clearMediaItems();
    }
    this.currentPlayer = currentPlayer;
    // Media queue management.
    currentPlayer.setMediaItems(mediaQueue, currentItemIndex, playbackPositionMs);
    currentPlayer.setPlayWhenReady(playWhenReady);
    currentPlayer.prepare();
}
Also used : CastPlayer(com.google.android.exoplayer2.ext.cast.CastPlayer) Player(com.google.android.exoplayer2.Player) ExoPlayer(com.google.android.exoplayer2.ExoPlayer)

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