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

Support Extractor injection for HLS chunks #2833

Closed
needz opened this issue May 16, 2017 · 4 comments
Closed

Support Extractor injection for HLS chunks #2833

needz opened this issue May 16, 2017 · 4 comments

Comments

@needz
Copy link

needz commented May 16, 2017

Issue description

When using Demo player in ExoPlayer version 2.4.0 to playback the HLS stream, the player is stuck in loading mode after getting track information and not switching any further. The same stream opens fine with Demo player in ExoPlayer version 2.2.0 with all default settings.

Seems like the issue arises when there is a subtitle track inside HLS's TS chunk (in this case CEA-608), whereas the similar stream without subtitle track opens fine.

Are there any possible modifications in the code that could lead to this problem in the latest version?

Reproduction steps

Try to open the stream in Demo player in ExoPlayer version 2.4.0

Link to test content

Link sent to dev e-mail.

Version of ExoPlayer being used

ExoPlayer 2.4.0

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

Nexus Player
Nexus 5X

A full bug report captured from the device

05-16 13:52:39.565 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: state [0.07, true, B]
05-16 13:52:39.639 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:52:39.639 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:52:39.639 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.04, true, true]
05-16 13:52:39.639 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:52:39.640 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: loading [true]
05-16 13:52:39.647 29590-29595/com.google.android.exoplayer2.demo I/art: Do full code cache collection, code=123KB, data=81KB
05-16 13:52:39.648 29590-29595/com.google.android.exoplayer2.demo I/art: Starting a blocking GC JitCodeCache
05-16 13:52:39.648 29590-29595/com.google.android.exoplayer2.demo I/art: After code cache collection, code=120KB, data=72KB
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: Tracks [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:1 [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=0, mimeType=video/avc, supported=YES
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     ]
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   ]
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:4 [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=430/4, mimeType=audio/mpeg-L2, channels=2, sample_rate=48000, language=lit, supported=YES
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     ]
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   ]
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:6 [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=430/8219, mimeType=application/cea-608, supported=YES
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     ]
05-16 13:52:39.696 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   ]
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:7 [
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=430/21, mimeType=application/id3, supported=YES
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:     ]
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   ]
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:52:39.697 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: videoEnabled [0.21]
05-16 13:52:39.698 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: audioEnabled [0.21]
05-16 13:52:39.712 29590-10714/com.google.android.exoplayer2.demo I/OMXClient: MuxOMX ctor
05-16 13:52:39.790 29590-10713/com.google.android.exoplayer2.demo I/MediaCodec: [OMX.Intel.VideoDecoder.AVC] setting surface generation to 30300162
05-16 13:52:39.817 29590-10714/com.google.android.exoplayer2.demo D/SurfaceUtils: set up nativeWindow 0xd5f20008 for 720x576, color 0x7fa00e00, rotation 0, usage 0x2922
05-16 13:52:39.828 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: videoDecoderInitialized [0.34, OMX.Intel.VideoDecoder.AVC]
05-16 13:52:39.829 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: videoFormatChanged [0.34, id=430/27, mimeType=video/avc, res=720x576]
05-16 13:52:39.840 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: audioDecoderInitialized [0.35, ffmpegLavc57.93.100-mp3]
05-16 13:52:39.840 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: audioFormatChanged [0.35, id=430/4, mimeType=audio/mpeg-L2, channels=2, sample_rate=48000, language=lit]
05-16 13:52:39.879 29590-10707/com.google.android.exoplayer2.demo D/AudioTrack: Client defaulted notificationFrames to 6156 for frameCount 12312
05-16 13:52:39.886 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: audioSessionId [15305]
05-16 13:52:40.265 29590-29601/com.google.android.exoplayer2.demo W/art: Suspending all threads took: 5.684ms
05-16 13:52:45.620 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:52:45.620 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:52:45.621 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.80, true, true]
05-16 13:52:45.621 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:52:51.675 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:52:51.675 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:52:51.675 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [23.28, true, true]
05-16 13:52:51.675 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:52:51.849 29590-29595/com.google.android.exoplayer2.demo I/art: Do partial code cache collection, code=123KB, data=76KB
05-16 13:52:51.851 29590-29595/com.google.android.exoplayer2.demo I/art: After code cache collection, code=123KB, data=76KB
05-16 13:52:51.851 29590-29595/com.google.android.exoplayer2.demo I/art: Increasing code cache capacity to 512KB
05-16 13:52:57.735 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:52:57.735 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:52:57.735 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.64, true, true]
05-16 13:52:57.735 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:52:59.361 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: loading [false]
05-16 13:53:03.809 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:03.809 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:03.809 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.76, true, true]
05-16 13:53:03.809 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:09.874 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:09.875 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:09.875 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.92, true, true]
05-16 13:53:09.875 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:15.929 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:15.929 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:15.929 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.80, true, true]
05-16 13:53:15.929 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:21.980 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:21.980 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:21.980 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [23.40, true, true]
05-16 13:53:21.980 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:28.041 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:28.041 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:28.041 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [23.40, true, true]
05-16 13:53:28.041 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:34.139 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:34.139 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:34.139 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [23.24, true, true]
05-16 13:53:34.139 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:40.191 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:40.191 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:40.191 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.64, true, true]
05-16 13:53:40.191 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:46.247 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:46.247 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:46.247 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.48, true, true]
05-16 13:53:46.247 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:52.303 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:52.303 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:52.303 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.64, true, true]
05-16 13:53:52.303 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:53:59.353 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:53:59.353 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:53:59.353 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.56, true, true]
05-16 13:53:59.353 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
05-16 13:54:06.459 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: sourceInfo [periodCount=1, windowCount=1
05-16 13:54:06.459 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
05-16 13:54:06.460 29590-29590/com.google.android.exoplayer2.demo D/EventLogger:   window [22.64, true, true]
05-16 13:54:06.460 29590-29590/com.google.android.exoplayer2.demo D/EventLogger: ]
@AquilesCanta AquilesCanta self-assigned this May 16, 2017
@needz
Copy link
Author

needz commented May 16, 2017

When the stream is saved as TS, it is plays normally. I also tried to disable the subtitle track, but it didn't help.

Below is the extracted m3u8 content:

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:11917
#EXTINF:5.760,
2017/05/16/18/06/05-05760.ts?token=2138083040
#EXTINF:5.760,
2017/05/16/18/06/11-05760.ts?token=2138083040
#EXTINF:5.680,
2017/05/16/18/06/16-05680.ts?token=2138083040
#EXTINF:5.680,
2017/05/16/18/06/22-05680.ts?token=2138083040

@needz
Copy link
Author

needz commented May 16, 2017

@AquilesCanta, found that it can be fixed by setting:

esReaderFactoryFlags = DefaultTsPayloadReaderFactory.FLAG_ALLOW_NON_IDR_KEYFRAMES;

inside HlsMediaChunk.java in createExtractor.

Is it possible to set this flag for HlsMediaSource or any media source (or global non_idr_keyframe value for H264 reader) the same way as for ExtractorMediaSource, so the modification of library can be avoided in the future?

@AquilesCanta
Copy link
Contributor

Not right now, I'll use this issue to track Extractor factory injection.

@AquilesCanta AquilesCanta changed the title HLS stream stuck in loading state in ExoPlayer 2.4.0 Support Extractor injection for HLS chunks May 17, 2017
@ojw28
Copy link
Contributor

ojw28 commented Aug 4, 2017

Already tracked by #2748

@ojw28 ojw28 closed this as completed Aug 4, 2017
@ojw28 ojw28 added the duplicate label Aug 4, 2017
@google google locked and limited conversation to collaborators Dec 3, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants