androidx / media

Jetpack Media3 support libraries for media use cases, including ExoPlayer, an extensible media player for Android
Apache License 2.0
1.34k stars 315 forks source link

CompositionPlayer crashes when we seek the player in demo App #1489

Open pawaom opened 6 days ago

pawaom commented 6 days ago

CompositionPlayer crashes when we seek the player in demo App using media3_version = "1.4.0-alpha02"

Here is the example video

https://github.com/androidx/media/assets/28686824/b961885b-2360-4215-adad-4271950f106e

After we seek the video it crashes with the error displayed as toast and the player stops playing.

How can we prevent this error and keep the video playing.

droid-girl commented 5 days ago

Hi @pawaom The team is still working on this API and specifically on seeking. This bug should be fixed in the later release. Please provide logcat with an error you see.

Please keep in mind that CompositionPlayer is still under active development and work-in-progress and @RestrictTo to indicate that this API should not be used outside of the library

pawaom commented 5 days ago

Thanks for the reply Here is the logcat as requested, it is the behavior similar to the one shared in the video crash when we seek the video,

can this be tagged as enhancement so that we can track the development

it is reproduced in the Demo Composition app just run the app and seek the video it will cause the error

2024-06-24 09:47:20.363  6203-6814  MediaCodec              org.own.media14beta                  E  Codec reported err 0x80000000/UNKNOWN_ERROR, actionCode 0, while in state 7/FLUSHING
2024-06-24 09:47:20.389  6203-6704  ExoPlayerImplInternal   org.own.media14beta                  

E  Playback error (Ask Gemini)

androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:725)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: android.media.MediaCodec$CodecException: 
at android.media.MediaCodec.native_flush(Native Method)
at android.media.MediaCodec.flush(MediaCodec.java:2504)
at androidx.media3.exoplayer.mediacodec.AsynchronousMediaCodecAdapter.flush(AsynchronousMediaCodecAdapter.java:247)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:960)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:953)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReinitializeCodec(MediaCodecRenderer.java:916)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onPositionReset(MediaCodecRenderer.java:755)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onPositionReset(MediaCodecVideoRenderer.java:651)
at androidx.media3.exoplayer.BaseRenderer.resetPosition(BaseRenderer.java:202)
at androidx.media3.exoplayer.BaseRenderer.resetPosition(BaseRenderer.java:195)
at androidx.media3.exoplayer.ExoPlayerImplInternal.resetRendererPosition(ExoPlayerImplInternal.java:1491)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToPeriodPosition(ExoPlayerImplInternal.java:1469)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToPeriodPosition(ExoPlayerImplInternal.java:1408)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToInternal(ExoPlayerImplInternal.java:1378)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:571)
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loopOnce(Looper.java:230) 
at android.os.Looper.loop(Looper.java:319) 
at android.os.HandlerThread.run(HandlerThread.java:67) 
2024-06-24 09:47:20.402  6203-6814  MediaCodec              org.own.media14beta                  E  flush() is valid only at Executing states; currently at Released state
2024-06-24 09:47:20.419  6203-6704  ExoPlayerImplInternal   org.own.media14beta                  E  Disable failed. (Ask Gemini)
java.lang.IllegalStateException: flush() is valid only at Executing states; currently at Released state

at android.media.MediaCodec.native_flush(Native Method)
at android.media.MediaCodec.flush(MediaCodec.java:2504)
at androidx.media3.exoplayer.mediacodec.AsynchronousMediaCodecAdapter.flush(AsynchronousMediaCodecAdapter.java:247)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:960)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:953)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:780)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:709)
at androidx.media3.exoplayer.BaseRenderer.disable(BaseRenderer.java:220)
at androidx.media3.exoplayer.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:1850)
at androidx.media3.exoplayer.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:1571)
at androidx.media3.exoplayer.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:1528)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:727)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.os.HandlerThread.run(HandlerThread.java:67)
2024-06-24 09:47:20.474  6203-6203  EventLogger             org.own.media14beta                  E  playerFailed [eventTime=24.75, mediaPos=28.14, window=0, period=1, errorCode=ERROR_CODE_FAILED_RUNTIME_CHECK (Ask Gemini)
androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:725)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: android.media.MediaCodec$CodecException: 
at android.media.MediaCodec.native_flush(Native Method)
at android.media.MediaCodec.flush(MediaCodec.java:2504)
at androidx.media3.exoplayer.mediacodec.AsynchronousMediaCodecAdapter.flush(AsynchronousMediaCodecAdapter.java:247)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:960)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:953)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReinitializeCodec(MediaCodecRenderer.java:916)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onPositionReset(MediaCodecRenderer.java:755)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onPositionReset(MediaCodecVideoRenderer.java:651)
at androidx.media3.exoplayer.BaseRenderer.resetPosition(BaseRenderer.java:202)
at androidx.media3.exoplayer.BaseRenderer.resetPosition(BaseRenderer.java:195)
at androidx.media3.exoplayer.ExoPlayerImplInternal.resetRendererPosition(ExoPlayerImplInternal.java:1491)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToPeriodPosition(ExoPlayerImplInternal.java:1469)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToPeriodPosition(ExoPlayerImplInternal.java:1408)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToInternal(ExoPlayerImplInternal.java:1378)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:571)
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loopOnce(Looper.java:230) 
at android.os.Looper.loop(Looper.java:319) 
at android.os.HandlerThread.run(HandlerThread.java:67) 
                                                                                                    ]
2024-06-24 09:47:20.583  6203-6203  CompPreviewActivity     org.own.media14beta                  E  Preview error (Ask Gemini)
androidx.media3.common.PlaybackException: error from player 0
at androidx.media3.transformer.CompositionPlayer.maybeUpdatePlaybackError(CompositionPlayer.java:728)
at androidx.media3.transformer.CompositionPlayer.access$1200(CompositionPlayer.java:94)
at androidx.media3.transformer.CompositionPlayer$PlayerListener.onPlayerError(CompositionPlayer.java:889)
at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$16(ExoPlayerImpl.java:2128)
at androidx.media3.exoplayer.ExoPlayerImpl$$ExternalSyntheticLambda14.invoke(D8$$SyntheticClass:0)
at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke(ListenerSet.java:339)
at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0(ListenerSet.java:223)
at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda1.run(D8$$SyntheticClass:0)
at androidx.media3.common.util.ListenerSet.flushEvents(ListenerSet.java:245)
at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo(ExoPlayerImpl.java:2189)
at androidx.media3.exoplayer.ExoPlayerImpl.handlePlaybackInfo(ExoPlayerImpl.java:2023)
at androidx.media3.exoplayer.ExoPlayerImpl.lambda$new$1$androidx-media3-exoplayer-ExoPlayerImpl(ExoPlayerImpl.java:350)
at androidx.media3.exoplayer.ExoPlayerImpl$$ExternalSyntheticLambda23.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8913)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:725)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: android.media.MediaCodec$CodecException: 
at android.media.MediaCodec.native_flush(Native Method)
at android.media.MediaCodec.flush(MediaCodec.java:2504)
at androidx.media3.exoplayer.mediacodec.AsynchronousMediaCodecAdapter.flush(AsynchronousMediaCodecAdapter.java:247)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:960)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:953)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReinitializeCodec(MediaCodecRenderer.java:916)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onPositionReset(MediaCodecRenderer.java:755)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onPositionReset(MediaCodecVideoRenderer.java:651)
at androidx.media3.exoplayer.BaseRenderer.resetPosition(BaseRenderer.java:202)
at androidx.media3.exoplayer.BaseRenderer.resetPosition(BaseRenderer.java:195)
at androidx.media3.exoplayer.ExoPlayerImplInternal.resetRendererPosition(ExoPlayerImplInternal.java:1491)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToPeriodPosition(ExoPlayerImplInternal.java:1469)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToPeriodPosition(ExoPlayerImplInternal.java:1408)
at androidx.media3.exoplayer.ExoPlayerImplInternal.seekToInternal(ExoPlayerImplInternal.java:1378)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:571)
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loopOnce(Looper.java:230) 
at android.os.Looper.loop(Looper.java:319) 
at android.os.HandlerThread.run(HandlerThread.java:67) 
claincly commented 5 days ago

Hello @pawaom,

it seems the error is from MediaCodec flush, which rarely happens to us. I wonder

  1. Do you reproduce it 100% or flaky?
  2. What’s the model and API version of your test device?
  3. Can you try play the video using ExoPlayer demo and see if selling works?
pawaom commented 5 days ago

media3_version = "1.4.0-alpha02"

It is reproduced all the time I am testing the demo composition app

will try it in the demo main app

Android Version 14

Tablet: Samsung Galaxy Tab A 7 Lite Model name: SM - T 225

pawaom commented 5 days ago

I did a quick test with exoplayer and the video plays correctly here is the video

https://github.com/androidx/media/assets/28686824/004a6dec-508d-43f2-b048-e1c1b06c3add

claincly commented 5 days ago

Thanks! We'll investigate