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
http://51.91.154.98:1935/mediacache/_definst_/smil:cache0/5c376083c7bd33220c4c28ad/5e8dc57ef9a4a93a85167f87.smil/manifest.mpd
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)
https://we.tl/t-s3wBcK2IsJ
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)
Issue description
The player throws an error
IllegalStateException: Top bit not zero: -90000when playing a certain video.Reproduction steps
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
http://51.91.154.98:1935/mediacache/_definst_/smil:cache0/5c376083c7bd33220c4c28ad/5e8dc57ef9a4a93a85167f87.smil/manifest.mpd
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)https://we.tl/t-s3wBcK2IsJ
Version of ExoPlayer being used
ExoPlayer Demo from the latest release (r2.11.3)
I added
android:usesCleartextTraffic="true"in the<application>node inAndroidManifest.xmlin 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)