media icon indicating copy to clipboard operation
media copied to clipboard

Video loaded from resources is stuck at BUFFERING state

Open DenislavNedev opened this issue 1 year ago • 3 comments

Version

Media3 1.2.0

More version details

No response

Devices that reproduce the issue

  • Xiaomi Mi 10T Lite 5G, Android 12
  • Samsung Galaxy A12, Android 12

Devices that do not reproduce the issue

  • Samsung Galaxy A34

Reproducible in the demo app?

Yes

Reproduction steps

I am playing video as a background of the app. The app is using Jetpack Compose. The video is located in the raw folder in the resources and it is played automatically when the app is started. Sometimes the video is not playing and a black screen is shown. I've attached EventLogger and saw that the player is stuck at BUFFERING state.

EventLogger when the video is working:

 22:37:20.524   surfaceSize [eventTime=0.26, mediaPos=0.00, window=0, 0, 0]
 22:37:20.527   playWhenReady [eventTime=0.26, mediaPos=0.00, window=0, true, USER_REQUEST]
 22:37:20.584   surfaceSize [eventTime=0.32, mediaPos=0.00, window=0, 1080, 2400]
 22:37:20.793   videoEnabled [eventTime=0.53, mediaPos=0.00, window=0, period=0]
 22:37:20.795   downstreamFormat [eventTime=0.53, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, color=BT709/Limited range/SDR SMPTE 170M, fps=23.876902]
 22:37:20.797   videoDecoderInitialized [eventTime=0.53, mediaPos=0.00, window=0, period=0, OMX.qcom.video.decoder.avc]
 22:37:20.798   videoInputFormat [eventTime=0.53, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, color=BT709/Limited range/SDR SMPTE 170M, fps=23.876902]
 22:37:20.800   timeline [eventTime=0.54, mediaPos=0.10, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
 22:37:20.801     period [33.92]
 22:37:20.801     window [33.92, seekable=true, dynamic=false]
 22:37:20.801   ]
 22:37:20.801   tracks [eventTime=0.54, mediaPos=0.10, window=0, period=0
 22:37:20.801     group [
 22:37:20.802       [X] Track:0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, color=BT709/Limited range/SDR SMPTE 170M, fps=23.876902, supported=YES
 22:37:20.802     ]
 22:37:20.802     Metadata [
 22:37:20.802       Creation time: 1678563673000
 22:37:20.802     ]
 22:37:20.802   ]
 22:37:20.803   loading [eventTime=0.54, mediaPos=0.10, window=0, period=0, true]
 22:37:20.804   state [eventTime=0.54, mediaPos=0.10, window=0, period=0, READY]
 22:37:20.805   isPlaying [eventTime=0.54, mediaPos=0.10, window=0, period=0, true]
 22:37:20.810   videoSize [eventTime=0.55, mediaPos=0.10, window=0, period=0, 1920, 1080]
 22:37:20.812   renderedFirstFrame [eventTime=0.55, mediaPos=0.10, window=0, period=0, Surface(name=null)/@0x1f08f15]
 22:37:20.817   loading [eventTime=0.55, mediaPos=0.28, window=0, period=0, false]
 22:37:20.873   surfaceSize [eventTime=0.61, mediaPos=0.34, window=0, period=0, 4266, 2400]
 22:37:22.106   surfaceSize [eventTime=1.84, mediaPos=1.58, window=0, period=0, 0, 0]

EventLogger when the video is not working

 22:37:23.533    surfaceSize [eventTime=0.23, mediaPos=0.00, window=0, 0, 0]
 22:37:23.536    playWhenReady [eventTime=0.23, mediaPos=0.00, window=0, true, USER_REQUEST]
 22:37:23.586    surfaceSize [eventTime=0.28, mediaPos=0.00, window=0, 1080, 2400]
 22:37:23.786    videoEnabled [eventTime=0.49, mediaPos=0.00, window=0, period=0]
 22:37:23.788    downstreamFormat [eventTime=0.49, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, color=BT709/Limited range/SDR SMPTE 170M, fps=23.876902]
 22:37:23.792    videoDecoderInitialized [eventTime=0.49, mediaPos=0.00, window=0, period=0, OMX.qcom.video.decoder.avc]
 22:37:23.793    videoInputFormat [eventTime=0.49, mediaPos=0.00, window=0, period=0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, color=BT709/Limited range/SDR SMPTE 170M, fps=23.876902]
 22:37:23.795    timeline [eventTime=0.49, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
 22:37:23.795      period [33.92]
 22:37:23.796      window [33.92, seekable=true, dynamic=false]
 22:37:23.796    ]
 22:37:23.796    tracks [eventTime=0.50, mediaPos=0.00, window=0, period=0
 22:37:23.796      group [
 22:37:23.797        [X] Track:0, id=1, mimeType=video/avc, codecs=avc1.640028, res=1920x1080, color=BT709/Limited range/SDR SMPTE 170M, fps=23.876902, supported=YES
 22:37:23.797      ]
 22:37:23.797      Metadata [
 22:37:23.797        Creation time: 1678563673000
 22:37:23.797      ]
 22:37:23.797    ]
 22:37:23.798    loading [eventTime=0.50, mediaPos=0.00, window=0, period=0, true]
 22:37:23.801    state [eventTime=0.50, mediaPos=0.06, window=0, period=0, READY]
 22:37:23.802    isPlaying [eventTime=0.50, mediaPos=0.06, window=0, period=0, true]
 22:37:23.806    loading [eventTime=0.50, mediaPos=0.06, window=0, period=0, false]
 22:37:23.808    loading [eventTime=0.51, mediaPos=0.12, window=0, period=0, true]
 22:37:23.896    loading [eventTime=0.60, mediaPos=0.27, window=0, period=0, false]
 22:37:26.244    loading [eventTime=2.94, mediaPos=2.61, window=0, period=0, true]
 22:37:26.270    loading [eventTime=2.97, mediaPos=2.65, window=0, period=0, false]
 22:37:28.633    state [eventTime=5.33, mediaPos=5.01, window=0, period=0, BUFFERING]
 22:37:28.635    isPlaying [eventTime=5.33, mediaPos=5.01, window=0, period=0, false]
 22:37:45.397    surfaceSize [eventTime=22.10, mediaPos=5.01, window=0, period=0, 0, 0]
 22:37:45.701    state [eventTime=22.40, mediaPos=5.31, window=0, period=0, READY]
 22:37:45.702    isPlaying [eventTime=22.40, mediaPos=5.31, window=0, period=0, true]
 22:37:49.188    surfaceSize [eventTime=25.89, mediaPos=8.80, window=0, period=0, 1080, 2400]
 22:37:52.510    loading [eventTime=29.21, mediaPos=12.12, window=0, period=0, true]
 22:37:52.539    loading [eventTime=29.24, mediaPos=12.15, window=0, period=0, false]
 22:37:52.551    loading [eventTime=29.25, mediaPos=12.16, window=0, period=0, true]
 22:37:52.560    loading [eventTime=29.26, mediaPos=12.17, window=0, period=0, false]
 22:37:54.204    state [eventTime=30.90, mediaPos=13.81, window=0, period=0, BUFFERING]
 22:37:54.207    isPlaying [eventTime=30.91, mediaPos=13.81, window=0, period=0, false]

This issue is happening sometimes on different devices. On Xiaomi Mi10 Lite is happening once in 20-30 startups, while on Samsung A12 almost whenever the app is opened. I tried reproducing it on an emulator with low RAM and memory, but the video was still playing.

Note: This is a copy of https://github.com/androidx/media/issues/944 because the other issue was not reopened after I've sent the media.

Expected result

Play the video all the time.

Actual result

Video is not played sometimes.

Media

I've send the media file to the email

Bug Report

  • [X] You will email the zip file produced by adb bugreport to [email protected] after filing this issue.

DenislavNedev avatar Feb 26 '24 13:02 DenislavNedev

@DenislavNedev I am not sure it is related to my issue or not but I got the same issue on Android 12 (Samsung device) . I was able to resolve it by following this https://github.com/google/ExoPlayer/issues/10021#issuecomment-1134589796 Hope this help

peterstickermaker avatar Jul 11 '24 07:07 peterstickermaker

Hi all. As you can see from the mention in the timeline, I think we are seeing an issue in AVPro Video (a Unity video playback asset) that maybe a manifestation of this issue. I think we are only seeing it when we create a new ExoPlayer object every time we play a video (opening the same video over and over on a persistent ExoPlayer object seems fine), destroying the previous one before the creation of the new one. Also, I think it is only seen with a video that has no audio tracks. The issue was not 100% reproducible, but we can make it happen often.

What led me here is that the player was getting stuck in the buffering state, and we would get no 'onVideoSizeChanged(...)' callback firing when the video was getting stuck...and the times it was playing as expected I was seeing this fire and then moving out of the buffering state.

Devices tested (issue seen on all of them):

  • Xiaomi Mi 10T Lite 5G, Android 12
  • Oculus Quest 2 (latest Oculus version)
  • Samsung 850, Android 11

Ste-RH avatar Jul 15 '24 16:07 Ste-RH

@DenislavNedev I am not sure it is related to my issue or not but I got the same issue on Android 12 (Samsung device) . I was able to resolve it by following this google/ExoPlayer#10021 (comment) Hope this help

It seems this only resolve for some videos only i was able to reproduce it with some other videos. it happens randomly, not 100% @Ste-RH Do you find any solution for this ?

peterstickermaker avatar Aug 01 '24 01:08 peterstickermaker

@peterstickermaker For us, deferral our surface creation/attach by two frames from where we were doing it (which was in a callback) seems to have fixed the issue. Strange it is 2 frames...1 frame made things better, but did not completely eradicate the problem.

Ste-RH avatar Sep 09 '24 09:09 Ste-RH

Experiencing the same issue on A12 (A10 is fine). Media3 1.2.0 (tried 1.4.0, 1.8.0 - does not help).

In my setup we may have 2 HDMI displays connected to Android device. In this case a video should be played on both displays, hence 2 instances of ExoPlayer.

The issue happens only if there is more than a single ExoPlayer at the same time. And it happens only sometimes (like maybe 10-20%).

The workaround suggested by @icbaker at https://github.com/google/ExoPlayer/issues/10021#issuecomment-1134589796 (DefaultRenderersFactory#forceDisableMediaCodecAsynchronousQueueing) only reduces the reproducibility, but not eliminates completely.

UPDATE: was also able to repro with just a single display/player.

vitkhudenko avatar Aug 13 '25 14:08 vitkhudenko