Skip to content

ArrayIndexOutOfBoundsException in MP4 parsing (regression from 1.4.x to 1.5.x) #2062

Closed
@JonatanPlesko

Description

@JonatanPlesko

Version

Media3 main branch

More version details

Media3 1.5.0 and 1.5.1.
This issue does not occur on Media3 1.4.1.

Devices that reproduce the issue

Google Pixel 7 running Android 15
Samsung Galaxy S10+ running Android 12

Devices that do not reproduce the issue

(None found so far; it appears consistent on all tested Android devices.)

Reproducible in the demo app?

Yes

Reproduction steps

  1. Launch the Media3 demo app (or your own app that uses Media3 1.5.x).
  2. Play the problematic MP4 file.
  3. Observe that playback fails with an ArrayIndexOutOfBoundsException.

Expected result

The video should play normally (as it does in the browser, QuickTime, iOS devices, and previous Media3 1.4.1).

Actual result

Playback fails with a Source error in the Media3 logs. The exception stack trace looks like:

08:51:38.668  E  Unexpected exception loading stream
                   java.lang.ArrayIndexOutOfBoundsException: src.length=417 srcPos=-1 dst.length=418 dstPos=0 length=418
                       at java.lang.System.arraycopy(Native Method)
                       at androidx.media3.extractor.mp4.BoxParser.parseStbl(BoxParser.java:776)
                       at androidx.media3.extractor.mp4.BoxParser.parseTraks(BoxParser.java:168)
                       at androidx.media3.extractor.mp4.Mp4Extractor.processMoovAtom(Mp4Extractor.java:691)
                       at androidx.media3.extractor.mp4.Mp4Extractor.processAtomEnded(Mp4Extractor.java:634)
                       at androidx.media3.extractor.mp4.Mp4Extractor.readAtomPayload(Mp4Extractor.java:610)
                       at androidx.media3.extractor.mp4.Mp4Extractor.read(Mp4Extractor.java:388)
                       at androidx.media3.exoplayer.source.BundledExtractorsAdapter.read(BundledExtractorsAdapter.java:147)
                       at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1122)
                       at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:450)
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
                       at java.lang.Thread.run(Thread.java:920)
08:51:38.671  E  internalError [eventTime=10.26, mediaPos=0.00, window=0, period=0, loadError
                   androidx.media3.exoplayer.upstream.Loader$UnexpectedLoaderException: Unexpected ArrayIndexOutOfBoundsException: src.length=417 srcPos=-1 dst.length=418 dstPos=0 length=418
                       at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:471)
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
                       at java.lang.Thread.run(Thread.java:920)
                   Caused by: java.lang.ArrayIndexOutOfBoundsException: src.length=417 srcPos=-1 dst.length=418 dstPos=0 length=418
                       at java.lang.System.arraycopy(Native Method)
                       at androidx.media3.extractor.mp4.BoxParser.parseStbl(BoxParser.java:776)
                       at androidx.media3.extractor.mp4.BoxParser.parseTraks(BoxParser.java:168)
                       at androidx.media3.extractor.mp4.Mp4Extractor.processMoovAtom(Mp4Extractor.java:691)
                       at androidx.media3.extractor.mp4.Mp4Extractor.processAtomEnded(Mp4Extractor.java:634)
                       at androidx.media3.extractor.mp4.Mp4Extractor.readAtomPayload(Mp4Extractor.java:610)
                       at androidx.media3.extractor.mp4.Mp4Extractor.read(Mp4Extractor.java:388)
                       at androidx.media3.exoplayer.source.BundledExtractorsAdapter.read(BundledExtractorsAdapter.java:147)
                       at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1122)
                       at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:450)
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
                       at java.lang.Thread.run(Thread.java:920) 
                 ]
08:51:38.679  E  Playback error
                   androidx.media3.exoplayer.ExoPlaybackException: Source error
                       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:737)
                       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:713)
                       at android.os.Handler.dispatchMessage(Handler.java:102)
                       at android.os.Looper.loopOnce(Looper.java:226)
                       at android.os.Looper.loop(Looper.java:313)
                       at android.os.HandlerThread.run(HandlerThread.java:67)
                   Caused by: androidx.media3.exoplayer.upstream.Loader$UnexpectedLoaderException: Unexpected ArrayIndexOutOfBoundsException: src.length=417 srcPos=-1 dst.length=418 dstPos=0 length=418
                       at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:471)
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
                       at java.lang.Thread.run(Thread.java:920)
                   Caused by: java.lang.ArrayIndexOutOfBoundsException: src.length=417 srcPos=-1 dst.length=418 dstPos=0 length=418
                       at java.lang.System.arraycopy(Native Method)
                       at androidx.media3.extractor.mp4.BoxParser.parseStbl(BoxParser.java:776)
                       at androidx.media3.extractor.mp4.BoxParser.parseTraks(BoxParser.java:168)
                       at androidx.media3.extractor.mp4.Mp4Extractor.processMoovAtom(Mp4Extractor.java:691)
                       at androidx.media3.extractor.mp4.Mp4Extractor.processAtomEnded(Mp4Extractor.java:634)
                       at androidx.media3.extractor.mp4.Mp4Extractor.readAtomPayload(Mp4Extractor.java:610)
                       at androidx.media3.extractor.mp4.Mp4Extractor.read(Mp4Extractor.java:388)
                       at androidx.media3.exoplayer.source.BundledExtractorsAdapter.read(BundledExtractorsAdapter.java:147)
                       at androidx.media3.exoplayer.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1122)
                       at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:450)
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
                       at java.lang.Thread.run(Thread.java:920) 

Media

I will email the media file to [email protected] shortly after filing this issue.

Bug Report

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions