media icon indicating copy to clipboard operation
media copied to clipboard

Video freeze and audio continue playing when adapt from high bitrate to low on Pixel 6, Pixel 7, Pixel 7a with os 14 onwards

Open zgzong opened this issue 1 year ago • 3 comments

Version

Media3 main branch

More version details

1.2.1 1.4.0

Devices that reproduce the issue

Pixel 6 with android 14 Pixel 7 with android 15 beta 4 Pixel 7a with android 14

Devices that do not reproduce the issue

Pixel 6/7/7a with android 13

Reproducible in the demo app?

Yes

Reproduction steps

Play a Dash stream, Allow player ABR engine to adapt bitrate from high to lower,

Expected result

The stream continuously plays smoothly, audio and video are sync

Actual result

Audio is playing but video frame is freeze no updates, can't automatically recovery.

Decoder doesn't throw any exception or error.

Media

Stream will share via email.

Bug Report

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

zgzong avatar Aug 13 '24 17:08 zgzong

I'm not able to reproduce this. I tried your stream on a Pixel 7a running Android 15 (AP31.240617.010) and modified the ExoPlayer demo app to force switching between tracks using RandomTrackSelection, by making the following change in PlayerActivity.initializePlayer:

ExoPlayer.Builder playerBuilder =
    new ExoPlayer.Builder(/* context= */ this)
        .setMediaSourceFactory(createMediaSourceFactory())
        .setTrackSelector(new DefaultTrackSelector(this, new RandomTrackSelection.Factory(/* seed= */ 0)));

I see the selected track changing in logcat:

downstreamFormat [eventTime=0.90, mediaPos=3.98, window=0, period=0, id=dzHACQ6f, mimeType=video/avc, container=video/mp4, bitrate=920000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=640x360, fps=25.0]
downstreamFormat [eventTime=2.31, mediaPos=4.94, window=0, period=0, id=dzHQ1hyf, mimeType=video/avc, container=video/mp4, bitrate=1890000, codecs=avc1.640029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=720x404, fps=50.0]
downstreamFormat [eventTime=4.86, mediaPos=3.49, window=0, period=0, id=dzEgoQef, mimeType=video/avc, container=video/mp4, bitrate=500000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=384x216, fps=25.0]
downstreamFormat [eventTime=8.34, mediaPos=4.97, window=0, period=0, id=dzFABhmf, mimeType=video/avc, container=video/mp4, bitrate=1640000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=704x396, fps=25.0]
downstreamFormat [eventTime=12.33, mediaPos=4.95, window=0, period=0, id=dzHACQ6f, mimeType=video/avc, container=video/mp4, bitrate=920000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=640x360, fps=25.0]
downstreamFormat [eventTime=14.33, mediaPos=6.95, window=0, period=0, id=dzFABhmf, mimeType=video/avc, container=video/mp4, bitrate=1640000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=704x396, fps=25.0]
downstreamFormat [eventTime=16.32, mediaPos=4.96, window=0, period=0, id=dzEgoQef, mimeType=video/avc, container=video/mp4, bitrate=500000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=384x216, fps=25.0]
downstreamFormat [eventTime=20.32, mediaPos=4.95, window=0, period=0, id=dzHQ1hyf, mimeType=video/avc, container=video/mp4, bitrate=1890000, codecs=avc1.640029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=720x404, fps=50.0]
downstreamFormat [eventTime=22.86, mediaPos=5.50, window=0, period=0, id=dzHACQ6f, mimeType=video/avc, container=video/mp4, bitrate=920000, codecs=avc1.4d4029, drm=[playready,unknown (adb41c24-2dbf-4a6d-958b-4457c0d27b95),widevine,cenc], res=640x360, fps=25.0]

But playback seems to continue smoothly.

Are you able to reproduce the issue using my process? If not, what's different with the way you are reproducing it?

icbaker avatar Aug 14 '24 11:08 icbaker

@icbaker We found that issue occurs when player start play with 3145728 bitrate first, then switch to 1890000. If player played 1890000 bitrate first then jump from highest bitrate back to 1890000, then won't reproduce issue.

zgzong avatar Aug 14 '24 13:08 zgzong

Ah right, thanks, with that specific ordering I can reproduce on a Pixel 7a.

@microkatz You can refer to cl/663750371 internally for repro code.

icbaker avatar Aug 16 '24 16:08 icbaker