Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HLS: ArrayIndexOutOfBoundsException on track update #3622

Closed
juechemparathy opened this issue Dec 20, 2017 · 7 comments
Closed

HLS: ArrayIndexOutOfBoundsException on track update #3622

juechemparathy opened this issue Dec 20, 2017 · 7 comments
Assignees
Labels

Comments

@juechemparathy
Copy link

juechemparathy commented Dec 20, 2017

12-20 13:52:50.414 32236-1196/com.google.android.exoplayer2.demo E/ExoPlayerImplInternal: Internal runtime error.
                                                                                          java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
                                                                                              at com.google.android.exoplayer2.source.hls.HlsSampleStreamWrapper.discardBuffer(HlsSampleStreamWrapper.java:294)
                                                                                              at com.google.android.exoplayer2.source.hls.HlsMediaPeriod.discardBuffer(HlsMediaPeriod.java:188)
                                                                                              at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:552)
                                                                                              at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:306)
                                                                                              at android.os.Handler.dispatchMessage(Handler.java:101)
                                                                                              at android.os.Looper.loop(Looper.java:164)
                                                                                              at android.os.HandlerThread.run(HandlerThread.java:65)

Reproduction steps

  1. Go to url in the related mail to (dev.exoplayer@gmail.com)
  2. Change the Audio track

Result: ArrayIndexOutOfBoundsException### Link to test content

@andrewlewis
Copy link
Collaborator

Are you able to reproduce the reported IndexOutOfBoundsException on the development branch? I'm not sure which version of the library you're using, but I couldn't reproduce it.

I did hit a NullPointerException part way through the stream after changing audio tracks in peekId3PrivTimestamp: it looks like we load an AAC chunk immediately after a TS chunk, which means that the AAC HlsMediaChunk's id3Data is null.

@juechemparathy
Copy link
Author

juechemparathy commented Dec 21, 2017

@andrewlewis for the quick response.Above logs are from latest dev-v2-r2.6.1.
Also make sure a server side ad shows up in the start.Most of the times it does.The crash happens when the ad completes and switch to main content.

Not sure if Null Pointer on peekId3PrivTimestamp is a side effect of ArrayIndexOutOfBoundsException mentioned above.
Video: https://drive.google.com/file/d/1yWx5UOZEsBYQM2svLQECxVlZWuQ-p-wf/view?usp=sharing
Adding some more logs below where I see both NPE and ArrayIndexOutOfBoundsException

12-21 10:00:35.086 19983-19990/com.google.android.exoplayer2.demo I/zygote64: After code cache collection, code=251KB, data=148KB
12-21 10:00:35.086 19983-19990/com.google.android.exoplayer2.demo I/zygote64: Increasing code cache capacity to 1024KB
12-21 10:00:35.749 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: loading [false]
12-21 10:00:37.449 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: audioDisabled [5.70]
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: Tracks [
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:0 [
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=YES [
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=0, mimeType=video/avc, bitrate=355732, res=408x170, supported=YES
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:1, id=1, mimeType=video/avc, bitrate=589685, res=696x290, supported=YES
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:2, id=2, mimeType=video/avc, bitrate=1003586, res=888x370, supported=YES
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:3, id=3, mimeType=video/avc, bitrate=2052829, res=1272x530, supported=YES
12-21 10:00:37.474 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:4, id=4, mimeType=video/avc, bitrate=107001, res=192x80, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:5, id=5, mimeType=video/avc, bitrate=202564, res=240x100, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:1, adaptive_supported=N/A [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=Spanish, mimeType=video/avc, language=es, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:1 [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=English, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, language=en, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:1, adaptive_supported=N/A [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=1/15, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:2 [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1/8219, mimeType=application/cea-608, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:1, adaptive_supported=N/A [
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=English, mimeType=text/vtt, language=en, supported=YES
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.475 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:2, adaptive_supported=N/A [
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=English, mimeType=text/vtt, language=en, supported=YES
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   ]
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:3 [
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=1/21, mimeType=application/id3, supported=YES
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     Group:1, adaptive_supported=N/A [
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1/21, mimeType=application/id3, supported=YES
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:     ]
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger:   ]
12-21 10:00:37.476 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: ]
12-21 10:00:37.477 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: audioEnabled [5.73]
12-21 10:00:37.480 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: loading [true]
12-21 10:00:37.486 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: audioDecoderInitialized [5.74, OMX.google.aac.decoder]
12-21 10:00:37.486 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: audioFormatChanged [5.74, id=1/15, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000]
12-21 10:00:37.653 19983-20014/com.google.android.exoplayer2.demo D/AudioTrack: Client defaulted notificationFrames to 6000 for frameCount 12000
12-21 10:00:37.658 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: audioSessionId [3425]
12-21 10:00:37.800 19983-20025/com.google.android.exoplayer2.demo E/LoadTask: Unexpected exception loading stream
                                                                              java.lang.NullPointerException: Attempt to read from field 'byte[] com.google.android.exoplayer2.util.ParsableByteArray.data' on a null object reference
                                                                                  at com.google.android.exoplayer2.source.hls.HlsMediaChunk.peekId3PrivTimestamp(HlsMediaChunk.java:278)
                                                                                  at com.google.android.exoplayer2.source.hls.HlsMediaChunk.loadMedia(HlsMediaChunk.java:244)
                                                                                  at com.google.android.exoplayer2.source.hls.HlsMediaChunk.load(HlsMediaChunk.java:191)
                                                                                  at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
                                                                                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
                                                                                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
                                                                                  at java.lang.Thread.run(Thread.java:764)
12-21 10:00:37.827 19983-20014/com.google.android.exoplayer2.demo E/ExoPlayerImplInternal: Internal runtime error.
                                                                                           java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
                                                                                               at com.google.android.exoplayer2.source.hls.HlsSampleStreamWrapper.discardBuffer(HlsSampleStreamWrapper.java:294)
                                                                                               at com.google.android.exoplayer2.source.hls.HlsMediaPeriod.discardBuffer(HlsMediaPeriod.java:188)
                                                                                               at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:552)
                                                                                               at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:306)
                                                                                               at android.os.Handler.dispatchMessage(Handler.java:101)
                                                                                               at android.os.Looper.loop(Looper.java:164)
                                                                                               at android.os.HandlerThread.run(HandlerThread.java:65)
12-21 10:00:37.853 19983-20028/com.google.android.exoplayer2.demo D/SurfaceUtils: disconnecting from surface 0x7877691010, reason disconnectFromSurface
12-21 10:00:37.856 19983-19983/com.google.android.exoplayer2.demo E/EventLogger: playerFailed [6.11]
                                                                                 com.google.android.exoplayer2.ExoPlaybackException
                                                                                     at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:360)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:101)
                                                                                     at android.os.Looper.loop(Looper.java:164)
                                                                                     at android.os.HandlerThread.run(HandlerThread.java:65)
                                                                                  Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
                                                                                     at com.google.android.exoplayer2.source.hls.HlsSampleStreamWrapper.discardBuffer(HlsSampleStreamWrapper.java:294)
                                                                                     at com.google.android.exoplayer2.source.hls.HlsMediaPeriod.discardBuffer(HlsMediaPeriod.java:188)
                                                                                     at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:552)
                                                                                     at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:306)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:101) 
                                                                                     at android.os.Looper.loop(Looper.java:164) 
                                                                                     at android.os.HandlerThread.run(HandlerThread.java:65) 
12-21 10:00:37.879 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: videoDisabled [6.13]
12-21 10:00:37.880 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: audioDisabled [6.13]
12-21 10:00:37.885 19983-19983/com.google.android.exoplayer2.demo D/EventLogger: loading [false]

@andrewlewis
Copy link
Collaborator

Yes, I was seeing the server-side ad. Tentatively marking as a bug.

@ojw28 ojw28 changed the title ArrayIndexOutOfBoundsException on track update HLS: ArrayIndexOutOfBoundsException on track update Dec 22, 2017
@tprochazka
Copy link

tprochazka commented Dec 31, 2017

I have the same crash on 2.6.0 and I'm not changing audio track.

@AquilesCanta
Copy link
Contributor

Sorry for the delay, and thanks for the reminder (was on holidays when this was reported).

As @andrewlewis pointed out, the issue was the change in the container formats across segments. A fix for this will be pushed soon, but I didn't manage to reproduce the IndexOutOfBoundsException. There have been a lot of changes in the track mapping lately, so please update to a version that has the new fix and try it out. And let us know if the issue persists. Thanks!

ojw28 pushed a commit that referenced this issue Jan 23, 2018
Issue:#3622

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=182363243
@ojw28
Copy link
Contributor

ojw28 commented Jan 23, 2018

Fixed in dev-v2.

@ojw28 ojw28 closed this as completed Jan 23, 2018
@juechemparathy
Copy link
Author

@AquilesCanta - Looks good! Thanks.

@google google locked and limited conversation to collaborators Jun 29, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

5 participants