diff --git a/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java index 00b6545654..a45473de16 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java @@ -15,6 +15,8 @@ */ package com.google.android.exoplayer2.source; +import java.io.IOException; + /** * Concatenates multiple {@link MediaSource}s. */ @@ -50,7 +52,7 @@ public final class ConcatenatingMediaSource implements MediaSource { } @Override - public MediaPeriod createPeriod(int index) { + public MediaPeriod createPeriod(int index) throws IOException { int sourceCount = 0; for (MediaSource mediaSource : mediaSources) { int count = mediaSource.getPeriodCount(); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java index e099c23a0d..67edb80896 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java @@ -15,6 +15,8 @@ */ package com.google.android.exoplayer2.source; +import java.io.IOException; + /** * A source of media consisting of one or more {@link MediaPeriod}s. */ @@ -30,8 +32,6 @@ public interface MediaSource { */ void prepareSource(); - // TODO add void maybeThrowError() throws IOException; - /** * Returns the number of periods in the source, or {@link #UNKNOWN_PERIOD_COUNT} if the number * of periods is not yet known. @@ -46,8 +46,10 @@ public interface MediaSource { * period count is {@link #UNKNOWN_PERIOD_COUNT}. * @return A {@link MediaPeriod}, or {@code null} if the source at the specified index is not yet * available. + * @throws IOException If there is an error that's preventing the source from becoming prepared or + * creating periods. */ - MediaPeriod createPeriod(int index); + MediaPeriod createPeriod(int index) throws IOException; /** * Releases the source. diff --git a/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java index 691431eacf..97a92e27f5 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java @@ -17,6 +17,8 @@ package com.google.android.exoplayer2.source; import com.google.android.exoplayer2.util.Assertions; +import java.io.IOException; + /** * Merges multiple {@link MediaPeriod} instances. *
@@ -55,7 +57,7 @@ public final class MergingMediaSource implements MediaSource { } @Override - public MediaPeriod createPeriod(int index) { + public MediaPeriod createPeriod(int index) throws IOException { MediaPeriod[] periods = new MediaPeriod[mediaSources.length]; for (int i = 0; i < periods.length; i++) { periods[i] = mediaSources[i].createPeriod(index); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index 102d8daeb0..3b9654ae51 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -113,8 +113,9 @@ public final class DashMediaSource implements MediaSource { } @Override - public MediaPeriod createPeriod(int index) { + public MediaPeriod createPeriod(int index) throws IOException { if (periods == null) { + loader.maybeThrowError(); return null; } return periods[index];