diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java index c51be31c5c..78bb18f2b6 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java @@ -276,13 +276,14 @@ public class ChunkSampleSource implements SampleSource, Loader.Callback { boolean haveSamples = false; if (isPendingReset() || mediaChunks.isEmpty()) { // No sample available. - } else if (mediaChunks.getFirst().sampleAvailable()) { + } else if (sampleAvailableOrFinishedLastChunk(mediaChunks.getFirst())) { // There's a sample available to be read from the current chunk. haveSamples = true; } else { // It may be the case that the current chunk has been fully read but not yet discarded and // that the next chunk has an available sample. Return true if so, otherwise false. - haveSamples = mediaChunks.size() > 1 && mediaChunks.get(1).sampleAvailable(); + haveSamples = mediaChunks.size() > 1 + && sampleAvailableOrFinishedLastChunk(mediaChunks.get(1)); } if (!haveSamples) { @@ -716,6 +717,10 @@ public class ChunkSampleSource implements SampleSource, Loader.Callback { return true; } + private boolean sampleAvailableOrFinishedLastChunk(MediaChunk chunk) throws IOException { + return chunk.sampleAvailable() || (chunk.isLastChunk() && chunk.isReadFinished()); + } + private boolean isMediaChunk(Chunk chunk) { return chunk instanceof MediaChunk; }