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 stream NumberFormatException issue #3747

Closed
needz opened this issue Jan 24, 2018 · 2 comments
Closed

HLS stream NumberFormatException issue #3747

needz opened this issue Jan 24, 2018 · 2 comments
Assignees
Labels

Comments

@needz
Copy link

needz commented Jan 24, 2018

Issue description

A particular HLS stream cannot be played in ExoPlayer, but can be played back using VLC on the same device.

Is there anything that can be tweaked manually in the current (or 2.5.*) versions of the ExoPlayer?

Reproduction steps

Run the provided link in the ExoPlayer demo app.

Link to test content

http://tv.skyline.uz/hls/101ch.m3u8

m3u8 content:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:20180124171985
#EXTINF:2.240000,
101ch20180124171985.ts
#EXTINF:3.680000,
101ch20180124171986.ts
#EXTINF:2.880000,
101ch20180124171987.ts
#EXTINF:2.880000,
101ch20180124171988.ts
#EXTINF:2.880000,
101ch20180124171989.ts

Version of ExoPlayer being used

ExoPlayer 2.6.1

Device(s) and version(s) of Android being used

Nexus Player and nVidia Shield TV

A full bug report captured from the device

01-24 15:39:19.877 2829-2829/com.google.android.exoplayer2.demo I/ExoPlayerImpl: Init a735023 [ExoPlayerLib/2.6.1] [fugu, Nexus Player, Asus, 26]
01-24 15:39:19.905 2829-2829/com.google.android.exoplayer2.demo D/EventLogger: state [0.13, true, I]
01-24 15:39:19.947 2829-2829/com.google.android.exoplayer2.demo I/Choreographer: Skipped 33 frames!  The application may be doing too much work on its main thread.
01-24 15:39:19.971 2829-2895/com.google.android.exoplayer2.demo D/NetworkSecurityConfig: No Network Security Config specified, using platform default
01-24 15:39:20.024 2829-2829/com.google.android.exoplayer2.demo D/EventLogger: state [0.25, true, B]
01-24 15:39:20.135 323-348/? I/ActivityManager: Displayed com.google.android.exoplayer2.demo/.PlayerActivity: +765ms
01-24 15:39:20.306 2829-2895/com.google.android.exoplayer2.demo E/LoadTask: Unexpected exception loading stream
                                                                            java.lang.NumberFormatException: For input string: "20180124171998"
                                                                                at java.lang.Integer.parseInt(Integer.java:611)
                                                                                at java.lang.Integer.parseInt(Integer.java:643)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                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)
01-24 15:39:20.311 2829-2829/com.google.android.exoplayer2.demo E/EventLogger: internalError [0.54, loadError]
                                                                               com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected NumberFormatException: For input string: "20180124171998"
                                                                                   at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:337)
                                                                                   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)
                                                                                Caused by: java.lang.NumberFormatException: For input string: "20180124171998"
                                                                                   at java.lang.Integer.parseInt(Integer.java:611)
                                                                                   at java.lang.Integer.parseInt(Integer.java:643)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                   at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                   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) 
01-24 15:39:20.452 2829-2895/com.google.android.exoplayer2.demo E/LoadTask: Unexpected exception loading stream
                                                                            java.lang.NumberFormatException: For input string: "20180124171998"
                                                                                at java.lang.Integer.parseInt(Integer.java:611)
                                                                                at java.lang.Integer.parseInt(Integer.java:643)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                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)
01-24 15:39:20.455 2829-2829/com.google.android.exoplayer2.demo E/EventLogger: internalError [0.68, loadError]
                                                                               com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected NumberFormatException: For input string: "20180124171998"
                                                                                   at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:337)
                                                                                   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)
                                                                                Caused by: java.lang.NumberFormatException: For input string: "20180124171998"
                                                                                   at java.lang.Integer.parseInt(Integer.java:611)
                                                                                   at java.lang.Integer.parseInt(Integer.java:643)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                   at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                   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) 
01-24 15:39:21.608 2829-2895/com.google.android.exoplayer2.demo E/LoadTask: Unexpected exception loading stream
                                                                            java.lang.NumberFormatException: For input string: "20180124171998"
                                                                                at java.lang.Integer.parseInt(Integer.java:611)
                                                                                at java.lang.Integer.parseInt(Integer.java:643)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                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)
01-24 15:39:21.612 2829-2829/com.google.android.exoplayer2.demo E/EventLogger: internalError [1.84, loadError]
                                                                               com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected NumberFormatException: For input string: "20180124171998"
                                                                                   at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:337)
                                                                                   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)
                                                                                Caused by: java.lang.NumberFormatException: For input string: "20180124171998"
                                                                                   at java.lang.Integer.parseInt(Integer.java:611)
                                                                                   at java.lang.Integer.parseInt(Integer.java:643)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                   at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                   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) 
01-24 15:39:23.760 2829-2895/com.google.android.exoplayer2.demo E/LoadTask: Unexpected exception loading stream
                                                                            java.lang.NumberFormatException: For input string: "20180124171999"
                                                                                at java.lang.Integer.parseInt(Integer.java:611)
                                                                                at java.lang.Integer.parseInt(Integer.java:643)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                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)
01-24 15:39:23.762 2829-2894/com.google.android.exoplayer2.demo E/ExoPlayerImplInternal: Source error.
                                                                                         com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected NumberFormatException: For input string: "20180124171999"
                                                                                             at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:337)
                                                                                             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)
                                                                                          Caused by: java.lang.NumberFormatException: For input string: "20180124171999"
                                                                                             at java.lang.Integer.parseInt(Integer.java:611)
                                                                                             at java.lang.Integer.parseInt(Integer.java:643)
                                                                                             at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                             at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                             at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                             at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                             at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                             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) 
01-24 15:39:23.762 2829-2829/com.google.android.exoplayer2.demo E/EventLogger: internalError [3.99, loadError]
                                                                               com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected NumberFormatException: For input string: "20180124171999"
                                                                                   at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:337)
                                                                                   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)
                                                                                Caused by: java.lang.NumberFormatException: For input string: "20180124171999"
                                                                                   at java.lang.Integer.parseInt(Integer.java:611)
                                                                                   at java.lang.Integer.parseInt(Integer.java:643)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                   at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                   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) 
01-24 15:39:23.767 2829-2829/com.google.android.exoplayer2.demo E/EventLogger: playerFailed [3.99]
                                                                               com.google.android.exoplayer2.ExoPlaybackException
                                                                                   at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:355)
                                                                                   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: com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected NumberFormatException: For input string: "20180124171999"
                                                                                   at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:337)
                                                                                   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)
                                                                                Caused by: java.lang.NumberFormatException: For input string: "20180124171999"
                                                                                   at java.lang.Integer.parseInt(Integer.java:611)
                                                                                   at java.lang.Integer.parseInt(Integer.java:643)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseIntAttr(HlsPlaylistParser.java:465)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parseMediaPlaylist(HlsPlaylistParser.java:365)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:150)
                                                                                   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:47)
                                                                                   at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:126)
                                                                                   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) 
@AquilesCanta
Copy link
Contributor

AquilesCanta commented Jan 24, 2018

A fix for this will be pushed soon. You might already know this, but #1967 is also relevant here. You will need to pass FLAG_ALLOW_NON_IDR_KEYFRAMES to the TsExtractor for media to play correctly.

@needz
Copy link
Author

needz commented Jan 24, 2018

@AquilesCanta, the problem is that this FLAG is already set manually in ExoPlayer code to true, but it doesn't help. This flag is definitively working for other streams that required it.

public H264Reader(SeiReader seiReader, boolean allowNonIdrKeyframes, boolean detectAccessUnits) {
    this.seiReader = seiReader;
    this.allowNonIdrKeyframes = true;
    this.detectAccessUnits = detectAccessUnits;
    prefixFlags = new boolean[3];
    sps = new NalUnitTargetBuffer(NAL_UNIT_TYPE_SPS, 128);
    pps = new NalUnitTargetBuffer(NAL_UNIT_TYPE_PPS, 128);
    sei = new NalUnitTargetBuffer(NAL_UNIT_TYPE_SEI, 128);
    seiWrapper = new ParsableByteArray();
  }

@ojw28 ojw28 added the bug label Jan 26, 2018
ojw28 pushed a commit that referenced this issue Feb 1, 2018
Issue:#3747

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=183366339
@ojw28 ojw28 closed this as completed Feb 16, 2018
@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

4 participants