-
Notifications
You must be signed in to change notification settings - Fork 6k
Closed
Labels
Description
Issue description
The player throws an error IllegalStateException: Top bit not zero: -90000 when playing a certain video.
Reproduction steps
- Play the linked URL through the ExoPlayer demo
- Observe a "Playback failed" error
- The video plays properly on VLC (File> Open network stream) and other players like JWPlayer 8
media.exolist.json
[
{
"name": "Custom",
"samples": [
{
"name": "Bug",
"uri": "http://51.91.154.98:1935/mediacache/_definst_/smil:cache0/5c376083c7bd33220c4c28ad/5e8dc57ef9a4a93a85167f87.smil/manifest.mpd"
}
]
}
]
Link to test content
A full bug report captured from the device
Stacktrace
2020-04-08 16:10:32.993 6847-6847/com.google.android.exoplayer2.demo E/EventLogger: playerFailed [eventTime=1.08, mediaPos=0.00, window=0, period=0]
com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected IllegalStateException: Top bit not zero: -90000
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:394)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:216)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected IllegalStateException: Top bit not zero: -90000
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:413)
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:923)
Caused by: java.lang.IllegalStateException: Top bit not zero: -90000
at com.google.android.exoplayer2.util.ParsableByteArray.readUnsignedIntToInt(ParsableByteArray.java:397)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.parseTfhd(FragmentedMp4Extractor.java:876)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.parseTraf(FragmentedMp4Extractor.java:704)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.parseMoof(FragmentedMp4Extractor.java:693)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.onMoofContainerAtomRead(FragmentedMp4Extractor.java:542)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.onContainerAtomRead(FragmentedMp4Extractor.java:456)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.processAtomEnded(FragmentedMp4Extractor.java:434)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.readAtomPayload(FragmentedMp4Extractor.java:429)
at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.read(FragmentedMp4Extractor.java:315)
at com.google.android.exoplayer2.source.chunk.ContainerMediaChunk.load(ContainerMediaChunk.java:135)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391)
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:923)
Version of ExoPlayer being used
ExoPlayer Demo from the latest release (r2.11.3)
I added android:usesCleartextTraffic="true" in the <application> node in AndroidManifest.xml in order to make Android accept non HTTPS link (I am unable to provide an example on HTTPS for the moment)
Device(s) and version(s) of Android being used
Tested on the Android emulator API 30 and on various devices like Xiaomi Mi A1 (Android 9)
Reactions are currently unavailable