Search in sources :

Example 11 with PlaybackException

use of com.google.android.exoplayer2.PlaybackException in project ExoPlayer by google.

the class DefaultAnalyticsCollectorTest method recursiveListenerInvocation_arrivesInCorrectOrder.

@Test
public void recursiveListenerInvocation_arrivesInCorrectOrder() {
    AnalyticsCollector analyticsCollector = new DefaultAnalyticsCollector(Clock.DEFAULT);
    analyticsCollector.setPlayer(new ExoPlayer.Builder(ApplicationProvider.getApplicationContext()).build(), Looper.myLooper());
    AnalyticsListener listener1 = mock(AnalyticsListener.class);
    AnalyticsListener listener2 = spy(new AnalyticsListener() {

        @Override
        public void onPlayerError(EventTime eventTime, PlaybackException error) {
            analyticsCollector.onSurfaceSizeChanged(/* width= */
            0, /* height= */
            0);
        }
    });
    AnalyticsListener listener3 = mock(AnalyticsListener.class);
    analyticsCollector.addListener(listener1);
    analyticsCollector.addListener(listener2);
    analyticsCollector.addListener(listener3);
    analyticsCollector.onPlayerError(ExoPlaybackException.createForSource(new IOException(), PlaybackException.ERROR_CODE_IO_UNSPECIFIED));
    InOrder inOrder = inOrder(listener1, listener2, listener3);
    inOrder.verify(listener1).onPlayerError(any(), any());
    inOrder.verify(listener2).onPlayerError(any(), any());
    inOrder.verify(listener3).onPlayerError(any(), any());
    inOrder.verify(listener1).onSurfaceSizeChanged(any(), eq(0), eq(0));
    inOrder.verify(listener2).onSurfaceSizeChanged(any(), eq(0), eq(0));
    inOrder.verify(listener3).onSurfaceSizeChanged(any(), eq(0), eq(0));
}
Also used : ExoPlaybackException(com.google.android.exoplayer2.ExoPlaybackException) PlaybackException(com.google.android.exoplayer2.PlaybackException) InOrder(org.mockito.InOrder) TestExoPlayerBuilder(com.google.android.exoplayer2.testutil.TestExoPlayerBuilder) IOException(java.io.IOException) Test(org.junit.Test)

Example 12 with PlaybackException

use of com.google.android.exoplayer2.PlaybackException in project ExoPlayer by google.

the class MediaCodecRenderer method render.

@Override
public void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException {
    if (pendingOutputEndOfStream) {
        pendingOutputEndOfStream = false;
        processEndOfStream();
    }
    if (pendingPlaybackException != null) {
        ExoPlaybackException playbackException = pendingPlaybackException;
        pendingPlaybackException = null;
        throw playbackException;
    }
    try {
        if (outputStreamEnded) {
            renderToEndOfStream();
            return;
        }
        if (inputFormat == null && !readSourceOmittingSampleData(FLAG_REQUIRE_FORMAT)) {
            // We still don't have a format and can't make progress without one.
            return;
        }
        // We have a format.
        maybeInitCodecOrBypass();
        if (bypassEnabled) {
            TraceUtil.beginSection("bypassRender");
            while (bypassRender(positionUs, elapsedRealtimeUs)) {
            }
            TraceUtil.endSection();
        } else if (codec != null) {
            long renderStartTimeMs = SystemClock.elapsedRealtime();
            TraceUtil.beginSection("drainAndFeed");
            while (drainOutputBuffer(positionUs, elapsedRealtimeUs) && shouldContinueRendering(renderStartTimeMs)) {
            }
            while (feedInputBuffer() && shouldContinueRendering(renderStartTimeMs)) {
            }
            TraceUtil.endSection();
        } else {
            decoderCounters.skippedInputBufferCount += skipSource(positionUs);
            // We need to read any format changes despite not having a codec so that drmSession can be
            // updated, and so that we have the most recent format should the codec be initialized. We
            // may also reach the end of the stream. FLAG_PEEK is used because we don't want to advance
            // the source further than skipSource has already done.
            readSourceOmittingSampleData(FLAG_PEEK);
        }
        decoderCounters.ensureUpdated();
    } catch (IllegalStateException e) {
        if (isMediaCodecException(e)) {
            onCodecError(e);
            boolean isRecoverable = Util.SDK_INT >= 21 && isRecoverableMediaCodecExceptionV21(e);
            if (isRecoverable) {
                releaseCodec();
            }
            throw createRendererException(createDecoderException(e, getCodecInfo()), inputFormat, isRecoverable, PlaybackException.ERROR_CODE_DECODING_FAILED);
        }
        throw e;
    }
}
Also used : ExoPlaybackException(com.google.android.exoplayer2.ExoPlaybackException)

Example 13 with PlaybackException

use of com.google.android.exoplayer2.PlaybackException in project ExoPlayer by google.

the class StyledPlayerView method updateErrorMessage.

private void updateErrorMessage() {
    if (errorMessageView != null) {
        if (customErrorMessage != null) {
            errorMessageView.setText(customErrorMessage);
            errorMessageView.setVisibility(View.VISIBLE);
            return;
        }
        @Nullable PlaybackException error = player != null ? player.getPlayerError() : null;
        if (error != null && errorMessageProvider != null) {
            CharSequence errorMessage = errorMessageProvider.getErrorMessage(error).second;
            errorMessageView.setText(errorMessage);
            errorMessageView.setVisibility(View.VISIBLE);
        } else {
            errorMessageView.setVisibility(View.GONE);
        }
    }
}
Also used : PlaybackException(com.google.android.exoplayer2.PlaybackException) Nullable(androidx.annotation.Nullable)

Example 14 with PlaybackException

use of com.google.android.exoplayer2.PlaybackException in project ExoPlayer by google.

the class PlayerView method updateErrorMessage.

private void updateErrorMessage() {
    if (errorMessageView != null) {
        if (customErrorMessage != null) {
            errorMessageView.setText(customErrorMessage);
            errorMessageView.setVisibility(View.VISIBLE);
            return;
        }
        @Nullable PlaybackException error = player != null ? player.getPlayerError() : null;
        if (error != null && errorMessageProvider != null) {
            CharSequence errorMessage = errorMessageProvider.getErrorMessage(error).second;
            errorMessageView.setText(errorMessage);
            errorMessageView.setVisibility(View.VISIBLE);
        } else {
            errorMessageView.setVisibility(View.GONE);
        }
    }
}
Also used : PlaybackException(com.google.android.exoplayer2.PlaybackException) Nullable(androidx.annotation.Nullable)

Aggregations

PlaybackException (com.google.android.exoplayer2.PlaybackException)8 Nullable (androidx.annotation.Nullable)7 ExoPlaybackException (com.google.android.exoplayer2.ExoPlaybackException)4 Test (org.junit.Test)4 AtomicReference (java.util.concurrent.atomic.AtomicReference)3 ExoPlayer (com.google.android.exoplayer2.ExoPlayer)2 MediaItem (com.google.android.exoplayer2.MediaItem)2 Player (com.google.android.exoplayer2.Player)2 EventTime (com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)2 TestExoPlayerBuilder (com.google.android.exoplayer2.testutil.TestExoPlayerBuilder)2 SuppressLint (android.annotation.SuppressLint)1 DeniedByServerException (android.media.DeniedByServerException)1 MediaCodec (android.media.MediaCodec)1 MediaDrm (android.media.MediaDrm)1 MediaDrmResetException (android.media.MediaDrmResetException)1 NotProvisionedException (android.media.NotProvisionedException)1 Bundle (android.os.Bundle)1 PlaybackStateCompat (android.support.v4.media.session.PlaybackStateCompat)1 ErrnoException (android.system.ErrnoException)1 Pair (android.util.Pair)1