Skip to content

Seeking local mp3 file causes Source Error #3216

@kevinwang5658

Description

@kevinwang5658

Using seekTo() on a ExtractorMediaSource with a local mp3 file will cause a Source Error at the end of the file if a seek was ever preformed that went outside of the buffered region. If all seeks are done within a region that has already been buffered then this exception won't occur. If the ExtractorMediaSource is used within a ConcatenatingMediaSource, this error will cause the ConcatenatingMediaSource to not play the next media source. I first encountered this in my app but I managed to reproduce it in the demo app by altering some of the code. I changed media source in PlayerActivity to only play my local audio files:

MediaSource mediaSource = ExtractorMediaSource(Uri.parse(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.toString() + "/" + 1854), mediaDataSourceFactory, new DefaultExtractorsFactory(),
              null, eventLogger);

The exception produced is:

08-29 13:10:32.049 8691-8859/com.google.android.exoplayer2.demo E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.upstream.ContentDataSource$ContentDataSourceException: java.io.EOFException
    at com.google.android.exoplayer2.upstream.ContentDataSource.read(ContentDataSource.java:133)
    at com.google.android.exoplayer2.upstream.DefaultDataSource.read(DefaultDataSource.java:142)
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:257)
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.advancePeekPosition(DefaultExtractorInput.java:132)
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.peekFully(DefaultExtractorInput.java:113)
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.readSample(Mp3Extractor.java:201)
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.read(Mp3Extractor.java:195)
    at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:706)
    at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)
 Caused by: java.io.EOFException
    at com.google.android.exoplayer2.upstream.ContentDataSource.read(ContentDataSource.java:133) 
    at com.google.android.exoplayer2.upstream.DefaultDataSource.read(DefaultDataSource.java:142) 
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:257) 
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.advancePeekPosition(DefaultExtractorInput.java:132) 
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.peekFully(DefaultExtractorInput.java:113) 
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.readSample(Mp3Extractor.java:201) 
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.read(Mp3Extractor.java:195) 
    at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:706) 
    at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
    at java.lang.Thread.run(Thread.java:761) 
08-29 13:10:32.069 8691-8691/com.google.android.exoplayer2.demo E/EventLogger: playerFailed [55.35]
com.google.android.exoplayer2.ExoPlaybackException
    at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:389)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:154)
    at android.os.HandlerThread.run(HandlerThread.java:61)
 Caused by: com.google.android.exoplayer2.upstream.ContentDataSource$ContentDataSourceException: java.io.EOFException
    at com.google.android.exoplayer2.upstream.ContentDataSource.read(ContentDataSource.java:133)
    at com.google.android.exoplayer2.upstream.DefaultDataSource.read(DefaultDataSource.java:142)
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:257)
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.advancePeekPosition(DefaultExtractorInput.java:132)
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.peekFully(DefaultExtractorInput.java:113)
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.readSample(Mp3Extractor.java:201)
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.read(Mp3Extractor.java:195)
    at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:706)
    at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)
 Caused by: java.io.EOFException
    at com.google.android.exoplayer2.upstream.ContentDataSource.read(ContentDataSource.java:133) 
    at com.google.android.exoplayer2.upstream.DefaultDataSource.read(DefaultDataSource.java:142) 
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.readFromDataSource(DefaultExtractorInput.java:257) 
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.advancePeekPosition(DefaultExtractorInput.java:132) 
    at com.google.android.exoplayer2.extractor.DefaultExtractorInput.peekFully(DefaultExtractorInput.java:113) 
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.readSample(Mp3Extractor.java:201) 
    at com.google.android.exoplayer2.extractor.mp3.Mp3Extractor.read(Mp3Extractor.java:195) 
    at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:706) 
    at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
    at java.lang.Thread.run(Thread.java:761) 

The Audio File used

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions