media icon indicating copy to clipboard operation
media copied to clipboard

Playback will not stop if multiple exceptions occur in the playingPeriodHolder.prepared state

Open WitchReimu opened this issue 2 months ago • 6 comments

When I play an online MP4 video, I get an exception:

java.io.EOFException
at androidx.media3.exoplayer.source.SampleDataQueue.sampleData(SampleDataQueue.java:186)
at androidx.media3.exoplayer.source.SampleQueue.sampleData(SampleQueue.java:635)
at androidx.media3.extractor.TrackOutput.sampleData(TrackOutput.java:168)
at androidx.media3.extractor.mp4.Mp4Extractor.readSample(Mp4Extractor.java:961)
at androidx.media3.extractor.mp4.Mp4Extractor.read(Mp4Extractor.java:410)
at androidx.media3.exoplayer.source.BundledExtractorsAdapter.read(BundledExtractorsAdapter.java:147)
at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1146)
at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)

When I turn off autoplay in EXO, the above exception recurs, consuming my phone's network data. Is there a way to destroy EXO without playing the video or prevent network requests when an exception occurs?

This issue frequently occurs with the following online MP4 video links: https://www.maersk.com.cn/~/media_sc9/maersk/homepage/videos/all-the-way_16x9_SUBS_ENG.mp4

WitchReimu avatar Oct 15 '25 06:10 WitchReimu

Hi @WitchReimu,

Is it reproducible on demo app? I used your video link and played on demo app, the player did do some retries after the first exception, and then surfaced the playback failure and finally end up in the IDLE state (no more network requests from then since the player didn't load anymore).

2025-10-15 11:53:29.958 27951-27951 EventLogger             androidx.media3.demo.main            D  state [eventTime=0.01, mediaPos=0.00, window=0, BUFFERING]
2025-10-15 11:53:29.974 27951-27951 EventLogger             androidx.media3.demo.main            D  surfaceSize [eventTime=0.02, mediaPos=0.00, window=0, w=1440, h=2891]
2025-10-15 11:53:29.982 27951-27951 EventLogger             androidx.media3.demo.main            D  audioSessionId [eventTime=0.03, mediaPos=0.00, window=0, 12321]
2025-10-15 11:53:29.983 27951-27951 EventLogger             androidx.media3.demo.main            D  loading [eventTime=0.03, mediaPos=0.00, window=0, period=0, true]
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D  timeline [eventTime=0.03, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D    period [?]
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D    window [?, seekable=false, dynamic=false]
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D  ]
2025-10-15 11:53:32.012 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=2.06, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:33.409 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=3.45, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:35.877 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=5.92, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:39.666 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=9.71, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:39.689 27951-27951 EventLogger             androidx.media3.demo.main            E  playerFailed [eventTime=9.73, mediaPos=0.00, window=0, period=0, errorCode=ERROR_CODE_IO_NETWORK_CONNECTION_FAILED
                                                                                                      androidx.media3.exoplayer.ExoPlaybackException: Source error
                                                                                                          at androidx.media3.exoplayer.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:927)
                                                                                                          at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:899)
                                                                                                          at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                          at android.os.Looper.dispatchMessage(Looper.java:315)
                                                                                                          at android.os.Looper.loopOnce(Looper.java:251)
                                                                                                          at android.os.Looper.loop(Looper.java:349)
                                                                                                          at android.os.HandlerThread.run(HandlerThread.java:100)
                                                                                                      Caused by: androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:39.690 27951-27951 EventLogger             androidx.media3.demo.main            D  loading [eventTime=9.74, mediaPos=0.00, window=0, period=0, false]
2025-10-15 11:53:39.692 27951-27951 EventLogger             androidx.media3.demo.main            D  state [eventTime=9.74, mediaPos=0.00, window=0, period=0, IDLE]

Or do you want a different error handling behaviour? We use DefaultLoadErrorHandlingPolicy, but you can do the customization at different levels.

For the simplest customization, you can specify your desired retry count when initializing the DefaultLoadErrorHandlingPolicy: https://github.com/androidx/media/blob/bfe5930f7f29c6492d60e3d01a90abd3c138b615/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultLoadErrorHandlingPolicy.java#L76-L78

or extend this class to set the custom retry delay logic. For a more complex case, you can even implement your own LoadErrorHandlingPolicy. With all of these cases, you will need to set the customized DefaultLoadErrorHandlingPolicy or your own LoadErrorHandlingPolicy to MediaSource.Factory, and set that MediaSource.Factory via ExoPlayer.Builder.

tianyif avatar Oct 15 '25 11:10 tianyif

Yes, it happens in the demo app. I didn't express it clearly. You need to make the following changes in PlayerActivity。

protected boolean initializePlayer() {
    Intent intent = getIntent();
    if (player == null) {

      mediaItems = createMediaItems(intent);
      if (mediaItems.isEmpty()) {
        return false;
      }

      lastSeenTracks = Tracks.EMPTY;
      ExoPlayer.Builder playerBuilder =
          new ExoPlayer.Builder(/* context= */ this)
              .setMediaSourceFactory(createMediaSourceFactory());
      setRenderersFactory(
          playerBuilder, intent.getBooleanExtra(IntentUtil.PREFER_EXTENSION_DECODERS_EXTRA, false));
      player = playerBuilder.build();
      player.setTrackSelectionParameters(trackSelectionParameters);
      player.addListener(new PlayerEventListener());
      player.addAnalyticsListener(new EventLogger());
      player.setAudioAttributes(AudioAttributes.DEFAULT, /* handleAudioFocus= */ true);
      //-----------------------------------Make changes here. Originally it was true.-----------------------------------------------------------
      player.setPlayWhenReady(false);
      playerView.setPlayer(player);
      configurePlayerWithServerSideAdsLoader();
      debugViewHelper = new DebugTextViewHelper(player, debugTextView);
      debugViewHelper.start();
    }

WitchReimu avatar Oct 20 '25 00:10 WitchReimu

Hi @WitchReimu,

Is it reproducible on demo app? I used your video link and played on demo app, the player did do some retries after the first exception, and then surfaced the playback failure and finally end up in the IDLE state (no more network requests from then since the player didn't load anymore).

2025-10-15 11:53:29.958 27951-27951 EventLogger             androidx.media3.demo.main            D  state [eventTime=0.01, mediaPos=0.00, window=0, BUFFERING]
2025-10-15 11:53:29.974 27951-27951 EventLogger             androidx.media3.demo.main            D  surfaceSize [eventTime=0.02, mediaPos=0.00, window=0, w=1440, h=2891]
2025-10-15 11:53:29.982 27951-27951 EventLogger             androidx.media3.demo.main            D  audioSessionId [eventTime=0.03, mediaPos=0.00, window=0, 12321]
2025-10-15 11:53:29.983 27951-27951 EventLogger             androidx.media3.demo.main            D  loading [eventTime=0.03, mediaPos=0.00, window=0, period=0, true]
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D  timeline [eventTime=0.03, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D    period [?]
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D    window [?, seekable=false, dynamic=false]
2025-10-15 11:53:29.984 27951-27951 EventLogger             androidx.media3.demo.main            D  ]
2025-10-15 11:53:32.012 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=2.06, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:33.409 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=3.45, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:35.877 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=5.92, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:39.666 27951-27951 EventLogger             androidx.media3.demo.main            E  internalError [eventTime=9.71, mediaPos=0.00, window=0, period=0, loadError
                                                                                                      androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:39.689 27951-27951 EventLogger             androidx.media3.demo.main            E  playerFailed [eventTime=9.73, mediaPos=0.00, window=0, period=0, errorCode=ERROR_CODE_IO_NETWORK_CONNECTION_FAILED
                                                                                                      androidx.media3.exoplayer.ExoPlaybackException: Source error
                                                                                                          at androidx.media3.exoplayer.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:927)
                                                                                                          at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:899)
                                                                                                          at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                          at android.os.Looper.dispatchMessage(Looper.java:315)
                                                                                                          at android.os.Looper.loopOnce(Looper.java:251)
                                                                                                          at android.os.Looper.loop(Looper.java:349)
                                                                                                          at android.os.HandlerThread.run(HandlerThread.java:100)
                                                                                                      Caused by: androidx.media3.datasource.HttpEngineDataSource$OpenException: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at androidx.media3.datasource.HttpEngineDataSource.open(HttpEngineDataSource.java:476)
                                                                                                          at androidx.media3.datasource.DefaultDataSource.open(DefaultDataSource.java:275)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.openNextSource(CacheDataSource.java:802)
                                                                                                          at androidx.media3.datasource.cache.CacheDataSource.open(CacheDataSource.java:615)
                                                                                                          at androidx.media3.datasource.StatsDataSource.open(StatsDataSource.java:88)
                                                                                                          at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1109)
                                                                                                          at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
                                                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
                                                                                                          at java.lang.Thread.run(Thread.java:1119)
                                                                                                      Caused by: android.net.http.NetworkExceptionWrapper: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.http.CronetExceptionTranslationUtils.translateException(CronetExceptionTranslationUtils.java:45)
                                                                                                          at android.net.http.UrlRequestCallbackWrapper.onFailed(UrlRequestCallbackWrapper.java:104)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.VersionSafeCallbacks$UrlRequestCallback.onFailed(VersionSafeCallbacks.java:65)
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest$8.run(CronetUrlRequest.java:924)
                                                                                                          ... 3 more
                                                                                                      Caused by: android.net.connectivity.org.chromium.net.impl.NetworkExceptionImpl: Exception in CronetUrlRequest: net::ERR_HTTP2_PROTOCOL_ERROR, ErrorCode=11, InternalErrorCode=-337, Retryable=false
                                                                                                          at android.net.connectivity.org.chromium.net.impl.CronetUrlRequest.onError(CronetUrlRequest.java:805)
                                                                                                    ]
2025-10-15 11:53:39.690 27951-27951 EventLogger             androidx.media3.demo.main            D  loading [eventTime=9.74, mediaPos=0.00, window=0, period=0, false]
2025-10-15 11:53:39.692 27951-27951 EventLogger             androidx.media3.demo.main            D  state [eventTime=9.74, mediaPos=0.00, window=0, period=0, IDLE]

Or do you want a different error handling behaviour? We use DefaultLoadErrorHandlingPolicy, but you can do the customization at different levels.

For the simplest customization, you can specify your desired retry count when initializing the DefaultLoadErrorHandlingPolicy:

media/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultLoadErrorHandlingPolicy.java

Lines 76 to 78 in bfe5930

public DefaultLoadErrorHandlingPolicy(int minimumLoadableRetryCount) { this.minimumLoadableRetryCount = minimumLoadableRetryCount; } or extend this class to set the custom retry delay logic. For a more complex case, you can even implement your own LoadErrorHandlingPolicy. With all of these cases, you will need to set the customized DefaultLoadErrorHandlingPolicy or your own LoadErrorHandlingPolicy to MediaSource.Factory, and set that MediaSource.Factory via ExoPlayer.Builder.

I tried to modify the number of retries of DefaultLoadErrorHandlingPolicy during initialization, but it did not achieve the expected effect when autoplay is turned off.

WitchReimu avatar Oct 20 '25 01:10 WitchReimu

Hi @WitchReimu,

Sorry, I just realized that I've made a mistake in my last comment. In my last repro, the error I got is a network exception from HttpEngineDataSource, which is different than your exception and then maybe handled by different code paths. However, when I used CronetDataSource, the network exception wouldn't happen, but I couldn't reproduce your scenario neither (with autoplay OFF), it kept loading without playing until the buffer was full.

Could you please share what device and OS version you were reproducing with?

(It also worth to look at why HttpEngineDataSource has issue with open the connection and CronetDataSource doesn't, but it is another problem than what is asked in this issue)

tianyif avatar Nov 12 '25 14:11 tianyif

Hi @WitchReimu,

Sorry, I just realized that I've made a mistake in my last comment. In my last repro, the error I got is a network exception from HttpEngineDataSource, which is different than your exception and then maybe handled by different code paths. However, when I used CronetDataSource, the network exception wouldn't happen, but I couldn't reproduce your scenario neither (with autoplay OFF), it kept loading without playing until the buffer was full.

Could you please share what device and OS version you were reproducing with?

(It also worth to look at why HttpEngineDataSource has issue with open the connection and CronetDataSource doesn't, but it is another problem than what is asked in this issue)

devcie info

  1. hongmi K50
  2. MIUI Version 13.0.24
  3. Android Version 12

WitchReimu avatar Nov 13 '25 08:11 WitchReimu

Did you call the method setPlayWhenReady(playWhenReady:Boolean) in PlayerActivity and set it to false?

This problem is probabilistic and not guaranteed to occur.

WitchReimu avatar Nov 19 '25 09:11 WitchReimu