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

Exceptions when meta data is in m3u8 file #1391

Closed
avinz opened this issue Mar 23, 2016 · 2 comments
Closed

Exceptions when meta data is in m3u8 file #1391

avinz opened this issue Mar 23, 2016 · 2 comments

Comments

@avinz
Copy link

avinz commented Mar 23, 2016

Good day,
My task is to stream video natively in application.

I receive following m3u8 file from API :

#EXTM3U 
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:15
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=600000
video-2.mp4-600k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000
video-2.mp4-1M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2000000
video-2.mp4-2M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4000000
video-2.mp4-4M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6000000
video-2.mp4-6M.m3u8
#EXT-X-ENDLIST

I tried to add URI in demo application and i receive following errors :

03-23 16:15:07.554 29461-29461/com.com.app I/ExoPlayerImpl: Init 1.5.6
03-23 16:15:07.560 29461-29461/com.com.app D/EventLogger: start [0]
03-23 16:15:07.561 29461-29461/com.com.app D/EventLogger: state [0.00, false, P]
03-23 16:15:07.566 29461-29461/com.com.app D/EventLogger: state [0.01, true, P]
03-23 16:15:07.662 29461-29494/com.com.app D/OpenGLRenderer: endAllStagingAnimators on 0xb4ce2780 (ExpandableListView) with handle 0xab1b2a10
03-23 16:15:08.782 29461-24282/com.com.app W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
03-23 16:15:08.807 29461-24282/com.com.app I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
03-23 16:15:09.350 29461-29461/com.com.app E/EventLogger: internalError [1.79, loadError]
                                                            java.io.EOFException
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:245)
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFully(DefaultExtractorInput.java:67)
                                                                at com.google.android.exoplayer.extractor.ts.TsExtractor.read(TsExtractor.java:127)
                                                                at com.google.android.exoplayer.hls.HlsExtractorWrapper.read(HlsExtractorWrapper.java:240)
                                                                at com.google.android.exoplayer.hls.TsChunk.load(TsChunk.java:115)
                                                                at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
                                                                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                at java.lang.Thread.run(Thread.java:818)
03-23 16:15:09.657 29461-29461/com.com.app E/EventLogger: internalError [2.10, loadError]
                                                            java.io.EOFException
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:245)
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFully(DefaultExtractorInput.java:67)
                                                                at com.google.android.exoplayer.extractor.ts.TsExtractor.read(TsExtractor.java:127)
                                                                at com.google.android.exoplayer.hls.HlsExtractorWrapper.read(HlsExtractorWrapper.java:240)
                                                                at com.google.android.exoplayer.hls.TsChunk.load(TsChunk.java:115)
                                                                at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
                                                                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                at java.lang.Thread.run(Thread.java:818)
03-23 16:15:11.091 29461-29461/com.com.app E/EventLogger: internalError [3.53, loadError]
                                                            java.io.EOFException
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:245)
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFully(DefaultExtractorInput.java:67)
                                                                at com.google.android.exoplayer.extractor.ts.TsExtractor.read(TsExtractor.java:127)
                                                                at com.google.android.exoplayer.hls.HlsExtractorWrapper.read(HlsExtractorWrapper.java:240)
                                                                at com.google.android.exoplayer.hls.TsChunk.load(TsChunk.java:115)
                                                                at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
                                                                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                at java.lang.Thread.run(Thread.java:818)
03-23 16:15:13.340 29461-29461/com.com.app E/EventLogger: internalError [5.78, loadError]
                                                            java.io.EOFException
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:245)
                                                                at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFully(DefaultExtractorInput.java:67)
                                                                at com.google.android.exoplayer.extractor.ts.TsExtractor.read(TsExtractor.java:127)
                                                                at com.google.android.exoplayer.hls.HlsExtractorWrapper.read(HlsExtractorWrapper.java:240)
                                                                at com.google.android.exoplayer.hls.TsChunk.load(TsChunk.java:115)
                                                                at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
                                                                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                at java.lang.Thread.run(Thread.java:818)
03-23 16:15:13.344 29461-24282/com.com.app E/ExoPlayerImplInternal: Internal track renderer error.
                                                                      com.google.android.exoplayer.ExoPlaybackException: java.io.EOFException
                                                                          at com.google.android.exoplayer.SampleSourceTrackRenderer.maybeThrowError(SampleSourceTrackRenderer.java:263)
                                                                          at com.google.android.exoplayer.SampleSourceTrackRenderer.maybeThrowError(SampleSourceTrackRenderer.java:149)
                                                                          at com.google.android.exoplayer.ExoPlayerImplInternal.incrementalPrepareInternal(ExoPlayerImplInternal.java:283)
                                                                          at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                          at android.os.Looper.loop(Looper.java:148)
                                                                          at android.os.HandlerThread.run(HandlerThread.java:61)
                                                                          at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
                                                                       Caused by: java.io.EOFException
                                                                          at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:245)
                                                                          at com.google.android.exoplayer.extractor.DefaultExtractorInput.readFully(DefaultExtractorInput.java:67)
                                                                          at com.google.android.exoplayer.extractor.ts.TsExtractor.read(TsExtractor.java:127)
                                                                          at com.google.android.exoplayer.hls.HlsExtractorWrapper.read(HlsExtractorWrapper.java:240)
                                                                          at com.google.android.exoplayer.hls.TsChunk.load(TsChunk.java:115)
                                                                          at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
                                                                          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                                          at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                          at java.lang.Thread.run(Thread.java:818)

But if I remove following lines from m3u8 file, video streams :

#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:15
#EXT-X-MEDIA-SEQUENCE:0

This is working version on file :

#EXTM3U 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=600000
video-2.mp4-600k.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000
video-2.mp4-1M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2000000
video-2.mp4-2M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4000000
video-2.mp4-4M.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6000000
video-2.mp4-6M.m3u8
#EXT-X-ENDLIST

The question is, can I ignore somehow this meta? And why does it produce such errors?

@ojw28
Copy link
Contributor

ojw28 commented Mar 23, 2016

As per the HLS specification, EXT-X-TARGETDURATION and EXT-X-MEDIA-SEQUENCE are tags that should exist only in media playlists, not in the master playlist.

ExoPlayer automatically detects the type of the playlist being parsed based on the tags that it sees. Since the playlist contains tags that should only exist in a media playlist, we assume that's what it is. Playback then fails because it is in fact a master playlist that contains spurious tags.

The solution is to fix the source media to adhere to the specification.

@avinz
Copy link
Author

avinz commented Mar 30, 2016

Thanks, that really helped :)

@google google locked and limited conversation to collaborators Jun 28, 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

2 participants