diff --git a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaServerSideAdInsertionMediaSource.java b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaServerSideAdInsertionMediaSource.java
index bfcad342f6..c06b39da59 100644
--- a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaServerSideAdInsertionMediaSource.java
+++ b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaServerSideAdInsertionMediaSource.java
@@ -134,14 +134,14 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou
@Override
public MediaSource.Factory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
contentMediaSourceFactory.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
return this;
}
@Override
public MediaSource.Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ DrmSessionManagerProvider drmSessionManagerProvider) {
contentMediaSourceFactory.setDrmSessionManagerProvider(drmSessionManagerProvider);
return this;
}
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
index f9fa73895c..1f877dd602 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
@@ -949,10 +949,12 @@ public final class DownloadHelper {
MediaItem mediaItem,
DataSource.Factory dataSourceFactory,
@Nullable DrmSessionManager drmSessionManager) {
- return new DefaultMediaSourceFactory(dataSourceFactory, ExtractorsFactory.EMPTY)
- .setDrmSessionManagerProvider(
- drmSessionManager != null ? unusedMediaItem -> drmSessionManager : null)
- .createMediaSource(mediaItem);
+ DefaultMediaSourceFactory mediaSourceFactory =
+ new DefaultMediaSourceFactory(dataSourceFactory, ExtractorsFactory.EMPTY);
+ if (drmSessionManager != null) {
+ mediaSourceFactory.setDrmSessionManagerProvider(unusedMediaItem -> drmSessionManager);
+ }
+ return mediaSourceFactory.createMediaSource(mediaItem);
}
private static boolean isProgressive(MediaItem.LocalConfiguration localConfiguration) {
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
index 4aca4aa02c..1b9b371b06 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
@@ -331,15 +331,25 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
@Override
public DefaultMediaSourceFactory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
- delegateFactoryLoader.setDrmSessionManagerProvider(drmSessionManagerProvider);
+ DrmSessionManagerProvider drmSessionManagerProvider) {
+ delegateFactoryLoader.setDrmSessionManagerProvider(
+ checkNotNull(
+ drmSessionManagerProvider,
+ "MediaSource.Factory#setDrmSessionManagerProvider no longer handles null by"
+ + " instantiating a new DefaultDrmSessionManagerProvider. Explicitly construct and"
+ + " pass an instance in order to retain the old behavior."));
return this;
}
@Override
public DefaultMediaSourceFactory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
- this.loadErrorHandlingPolicy = loadErrorHandlingPolicy;
+ LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ this.loadErrorHandlingPolicy =
+ checkNotNull(
+ loadErrorHandlingPolicy,
+ "MediaSource.Factory#setLoadErrorHandlingPolicy no longer handles null by"
+ + " instantiating a new DefaultLoadErrorHandlingPolicy. Explicitly construct and"
+ + " pass an instance in order to retain the old behavior.");
delegateFactoryLoader.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
return this;
}
@@ -414,16 +424,23 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
SubtitleDecoderFactory.DEFAULT.createDecoder(format), format)
: new UnknownSubtitlesExtractor(format)
};
+ ProgressiveMediaSource.Factory progressiveMediaSourceFactory =
+ new ProgressiveMediaSource.Factory(dataSourceFactory, extractorsFactory);
+ if (loadErrorHandlingPolicy != null) {
+ progressiveMediaSourceFactory.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
+ }
mediaSources[i + 1] =
- new ProgressiveMediaSource.Factory(dataSourceFactory, extractorsFactory)
- .setLoadErrorHandlingPolicy(loadErrorHandlingPolicy)
- .createMediaSource(
- MediaItem.fromUri(subtitleConfigurations.get(i).uri.toString()));
+ progressiveMediaSourceFactory.createMediaSource(
+ MediaItem.fromUri(subtitleConfigurations.get(i).uri.toString()));
} else {
+ SingleSampleMediaSource.Factory singleSampleMediaSourceFactory =
+ new SingleSampleMediaSource.Factory(dataSourceFactory);
+ if (loadErrorHandlingPolicy != null) {
+ singleSampleMediaSourceFactory.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
+ }
mediaSources[i + 1] =
- new SingleSampleMediaSource.Factory(dataSourceFactory)
- .setLoadErrorHandlingPolicy(loadErrorHandlingPolicy)
- .createMediaSource(subtitleConfigurations.get(i), /* durationUs= */ C.TIME_UNSET);
+ singleSampleMediaSourceFactory.createMediaSource(
+ subtitleConfigurations.get(i), /* durationUs= */ C.TIME_UNSET);
}
}
@@ -532,16 +549,14 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
return mediaSourceFactory;
}
- public void setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ public void setDrmSessionManagerProvider(DrmSessionManagerProvider drmSessionManagerProvider) {
this.drmSessionManagerProvider = drmSessionManagerProvider;
for (MediaSource.Factory mediaSourceFactory : mediaSourceFactories.values()) {
mediaSourceFactory.setDrmSessionManagerProvider(drmSessionManagerProvider);
}
}
- public void setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ public void setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
this.loadErrorHandlingPolicy = loadErrorHandlingPolicy;
for (MediaSource.Factory mediaSourceFactory : mediaSourceFactories.values()) {
mediaSourceFactory.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java
index 1b37454953..2cc97c3836 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSource.java
@@ -22,12 +22,10 @@ import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.analytics.PlayerId;
-import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider;
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.DrmSessionManagerProvider;
import com.google.android.exoplayer2.upstream.Allocator;
-import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.TransferListener;
import java.io.IOException;
@@ -67,21 +65,16 @@ public interface MediaSource {
* Sets the {@link DrmSessionManagerProvider} used to obtain a {@link DrmSessionManager} for a
* {@link MediaItem}.
*
- *
If not set, {@link DefaultDrmSessionManagerProvider} is used.
- *
* @return This factory, for convenience.
*/
- Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider);
+ Factory setDrmSessionManagerProvider(DrmSessionManagerProvider drmSessionManagerProvider);
/**
* Sets an optional {@link LoadErrorHandlingPolicy}.
*
- * @param loadErrorHandlingPolicy A {@link LoadErrorHandlingPolicy}, or {@code null} to use the
- * {@link DefaultLoadErrorHandlingPolicy}.
* @return This factory, for convenience.
*/
- Factory setLoadErrorHandlingPolicy(@Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy);
+ Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy);
/**
* Returns the {@link C.ContentType content types} supported by media sources created by this
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
index e569c69e9d..6eca2cba48 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
@@ -63,10 +63,18 @@ public final class ProgressiveMediaSource extends BaseMediaSource
@Nullable private Object tag;
/**
- * Creates a new factory for {@link ProgressiveMediaSource}s, using the extractors provided by
- * {@link DefaultExtractorsFactory}.
+ * Creates a new factory for {@link ProgressiveMediaSource}s.
*
- * @param dataSourceFactory A factory for {@link DataSource}s to read the media.
+ *
The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultExtractorsFactory}
+ *
- {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
+ *
+ * @param dataSourceFactory A factory for {@linkplain DataSource data sources} to read the
+ * media.
*/
public Factory(DataSource.Factory dataSourceFactory) {
this(dataSourceFactory, new DefaultExtractorsFactory());
@@ -75,6 +83,18 @@ public final class ProgressiveMediaSource extends BaseMediaSource
/**
* Equivalent to {@link #Factory(DataSource.Factory, ProgressiveMediaExtractor.Factory) new
* Factory(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory)}.
+ *
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
+ *
+ * @param dataSourceFactory A factory for {@linkplain DataSource data sources} to read the
+ * media.
+ * @param extractorsFactory A factory for the {@linkplain Extractor extractors} used to extract
+ * the media from its container.
*/
public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) {
this(dataSourceFactory, playerId -> new BundledExtractorsAdapter(extractorsFactory));
@@ -83,9 +103,17 @@ public final class ProgressiveMediaSource extends BaseMediaSource
/**
* Creates a new factory for {@link ProgressiveMediaSource}s.
*
- * @param dataSourceFactory A factory for {@link DataSource}s to read the media.
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
+ *
+ * @param dataSourceFactory A factory for {@linkplain DataSource data sources} to read the
+ * media.
* @param progressiveMediaExtractorFactory A factory for the {@link ProgressiveMediaExtractor}
- * to extract media from its container.
+ * to extract the media from its container.
*/
public Factory(
DataSource.Factory dataSourceFactory,
@@ -101,7 +129,8 @@ public final class ProgressiveMediaSource extends BaseMediaSource
/**
* Creates a new factory for {@link ProgressiveMediaSource}s.
*
- * @param dataSourceFactory A factory for {@link DataSource}s to read the media.
+ * @param dataSourceFactory A factory for {@linkplain DataSource data sources} to read the
+ * media.
* @param progressiveMediaExtractorFactory A factory for the {@link ProgressiveMediaExtractor}
* to extract media from its container.
* @param drmSessionManagerProvider A provider to obtain a {@link DrmSessionManager} for a
@@ -124,19 +153,14 @@ public final class ProgressiveMediaSource extends BaseMediaSource
this.continueLoadingCheckIntervalBytes = continueLoadingCheckIntervalBytes;
}
- /**
- * Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link
- * DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}.
- *
- * @param loadErrorHandlingPolicy A {@link LoadErrorHandlingPolicy}.
- * @return This factory, for convenience.
- */
- public Factory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ @Override
+ public Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
this.loadErrorHandlingPolicy =
- loadErrorHandlingPolicy != null
- ? loadErrorHandlingPolicy
- : new DefaultLoadErrorHandlingPolicy();
+ checkNotNull(
+ loadErrorHandlingPolicy,
+ "MediaSource.Factory#setLoadErrorHandlingPolicy no longer handles null by"
+ + " instantiating a new DefaultLoadErrorHandlingPolicy. Explicitly construct and"
+ + " pass an instance in order to retain the old behavior.");
return this;
}
@@ -157,11 +181,13 @@ public final class ProgressiveMediaSource extends BaseMediaSource
@Override
public Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ DrmSessionManagerProvider drmSessionManagerProvider) {
this.drmSessionManagerProvider =
- drmSessionManagerProvider != null
- ? drmSessionManagerProvider
- : new DefaultDrmSessionManagerProvider();
+ checkNotNull(
+ drmSessionManagerProvider,
+ "MediaSource.Factory#setDrmSessionManagerProvider no longer handles null by"
+ + " instantiating a new DefaultDrmSessionManagerProvider. Explicitly construct"
+ + " and pass an instance in order to retain the old behavior.");
return this;
}
diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.java
index 73ad8b2a10..4e48978d5e 100644
--- a/library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.java
+++ b/library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.java
@@ -73,21 +73,6 @@ public final class DefaultMediaSourceFactoryTest {
assertThat(mediaSource).isInstanceOf(ProgressiveMediaSource.class);
}
- @Test
- public void createMediaSource_withNull_usesNonNullDefaults() {
- DefaultMediaSourceFactory defaultMediaSourceFactory =
- new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
- MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA).build();
-
- MediaSource mediaSource =
- defaultMediaSourceFactory
- .setDrmSessionManagerProvider(null)
- .setLoadErrorHandlingPolicy(null)
- .createMediaSource(mediaItem);
-
- assertThat(mediaSource).isNotNull();
- }
-
@Test
public void createMediaSource_withSubtitle_isMergingMediaSource() {
DefaultMediaSourceFactory defaultMediaSourceFactory =
diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
index 90da94bae1..9ff284512b 100644
--- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
+++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
@@ -112,6 +112,15 @@ public final class DashMediaSource extends BaseMediaSource {
/**
* Creates a new factory for {@link DashMediaSource}s.
*
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultDashChunkSource.Factory}
+ *
- {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
- {@link DefaultCompositeSequenceableLoaderFactory}
+ *
+ *
* @param dataSourceFactory A factory for {@link DataSource} instances that will be used to load
* manifest and media data.
*/
@@ -122,6 +131,14 @@ public final class DashMediaSource extends BaseMediaSource {
/**
* Creates a new factory for {@link DashMediaSource}s.
*
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
- {@link DefaultCompositeSequenceableLoaderFactory}
+ *
+ *
* @param chunkSourceFactory A factory for {@link DashChunkSource} instances.
* @param manifestDataSourceFactory A factory for {@link DataSource} instances that will be used
* to load (and refresh) the manifest. May be {@code null} if the factory will only ever be
@@ -141,27 +158,24 @@ public final class DashMediaSource extends BaseMediaSource {
@Override
public Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ DrmSessionManagerProvider drmSessionManagerProvider) {
this.drmSessionManagerProvider =
- drmSessionManagerProvider != null
- ? drmSessionManagerProvider
- : new DefaultDrmSessionManagerProvider();
+ checkNotNull(
+ drmSessionManagerProvider,
+ "MediaSource.Factory#setDrmSessionManagerProvider no longer handles null by"
+ + " instantiating a new DefaultDrmSessionManagerProvider. Explicitly construct"
+ + " and pass an instance in order to retain the old behavior.");
return this;
}
- /**
- * Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link
- * DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}.
- *
- * @param loadErrorHandlingPolicy A {@link LoadErrorHandlingPolicy}.
- * @return This factory, for convenience.
- */
- public Factory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ @Override
+ public Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
this.loadErrorHandlingPolicy =
- loadErrorHandlingPolicy != null
- ? loadErrorHandlingPolicy
- : new DefaultLoadErrorHandlingPolicy();
+ checkNotNull(
+ loadErrorHandlingPolicy,
+ "MediaSource.Factory#setLoadErrorHandlingPolicy no longer handles null by"
+ + " instantiating a new DefaultLoadErrorHandlingPolicy. Explicitly construct and"
+ + " pass an instance in order to retain the old behavior.");
return this;
}
diff --git a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DefaultMediaSourceFactoryTest.java b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DefaultMediaSourceFactoryTest.java
index 9f86d628b3..7dfccefe77 100644
--- a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DefaultMediaSourceFactoryTest.java
+++ b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DefaultMediaSourceFactoryTest.java
@@ -74,21 +74,6 @@ public class DefaultMediaSourceFactoryTest {
assertThat(mediaSource).isInstanceOf(DashMediaSource.class);
}
- @Test
- public void createMediaSource_withNull_usesNonNullDefaults() {
- DefaultMediaSourceFactory defaultMediaSourceFactory =
- new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
- MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mpd").build();
-
- MediaSource mediaSource =
- defaultMediaSourceFactory
- .setDrmSessionManagerProvider(null)
- .setLoadErrorHandlingPolicy(null)
- .createMediaSource(mediaItem);
-
- assertThat(mediaSource).isNotNull();
- }
-
@Test
public void getSupportedTypes_dashModule_containsTypeDash() {
int[] supportedTypes =
diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
index 03f6a9f23d..b5d5058b73 100644
--- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
+++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
@@ -112,6 +112,17 @@ public final class HlsMediaSource extends BaseMediaSource
/**
* Creates a new factory for {@link HlsMediaSource}s.
*
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultHlsPlaylistParserFactory}
+ *
- {@link DefaultHlsPlaylistTracker#FACTORY}
+ *
- {@link HlsExtractorFactory#DEFAULT}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
- {@link DefaultCompositeSequenceableLoaderFactory}
+ *
+ *
* @param dataSourceFactory A data source factory that will be wrapped by a {@link
* DefaultHlsDataSourceFactory} to create {@link DataSource}s for manifests, segments and
* keys.
@@ -123,6 +134,17 @@ public final class HlsMediaSource extends BaseMediaSource
/**
* Creates a new factory for {@link HlsMediaSource}s.
*
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultHlsPlaylistParserFactory}
+ *
- {@link DefaultHlsPlaylistTracker#FACTORY}
+ *
- {@link HlsExtractorFactory#DEFAULT}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
- {@link DefaultCompositeSequenceableLoaderFactory}
+ *
+ *
* @param hlsDataSourceFactory An {@link HlsDataSourceFactory} for {@link DataSource}s for
* manifests, segments and keys.
*/
@@ -153,19 +175,14 @@ public final class HlsMediaSource extends BaseMediaSource
return this;
}
- /**
- * Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link
- * DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}.
- *
- * @param loadErrorHandlingPolicy A {@link LoadErrorHandlingPolicy}.
- * @return This factory, for convenience.
- */
- public Factory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ @Override
+ public Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
this.loadErrorHandlingPolicy =
- loadErrorHandlingPolicy != null
- ? loadErrorHandlingPolicy
- : new DefaultLoadErrorHandlingPolicy();
+ checkNotNull(
+ loadErrorHandlingPolicy,
+ "MediaSource.Factory#setLoadErrorHandlingPolicy no longer handles null by"
+ + " instantiating a new DefaultLoadErrorHandlingPolicy. Explicitly construct and"
+ + " pass an instance in order to retain the old behavior.");
return this;
}
@@ -273,11 +290,13 @@ public final class HlsMediaSource extends BaseMediaSource
@Override
public Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ DrmSessionManagerProvider drmSessionManagerProvider) {
this.drmSessionManagerProvider =
- drmSessionManagerProvider != null
- ? drmSessionManagerProvider
- : new DefaultDrmSessionManagerProvider();
+ checkNotNull(
+ drmSessionManagerProvider,
+ "MediaSource.Factory#setDrmSessionManagerProvider no longer handles null by"
+ + " instantiating a new DefaultDrmSessionManagerProvider. Explicitly construct"
+ + " and pass an instance in order to retain the old behavior.");
return this;
}
diff --git a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/DefaultMediaSourceFactoryTest.java b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/DefaultMediaSourceFactoryTest.java
index 63f477cb1e..84e99e8bb3 100644
--- a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/DefaultMediaSourceFactoryTest.java
+++ b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/DefaultMediaSourceFactoryTest.java
@@ -74,21 +74,6 @@ public class DefaultMediaSourceFactoryTest {
assertThat(mediaSource).isInstanceOf(HlsMediaSource.class);
}
- @Test
- public void createMediaSource_withNull_usesNonNullDefaults() {
- DefaultMediaSourceFactory defaultMediaSourceFactory =
- new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
- MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.m3u8").build();
-
- MediaSource mediaSource =
- defaultMediaSourceFactory
- .setDrmSessionManagerProvider(null)
- .setLoadErrorHandlingPolicy(null)
- .createMediaSource(mediaItem);
-
- assertThat(mediaSource).isNotNull();
- }
-
@Test
public void getSupportedTypes_hlsModule_containsTypeHls() {
int[] supportedTypes =
diff --git a/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspMediaSource.java b/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspMediaSource.java
index bfcd6aefa5..ee38fc609c 100644
--- a/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspMediaSource.java
+++ b/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspMediaSource.java
@@ -146,15 +146,13 @@ public final class RtspMediaSource extends BaseMediaSource {
/** Does nothing. {@link RtspMediaSource} does not support DRM. */
@Override
- public Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManager) {
+ public Factory setDrmSessionManagerProvider(DrmSessionManagerProvider drmSessionManager) {
return this;
}
/** Does nothing. {@link RtspMediaSource} does not support error handling policies. */
@Override
- public Factory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ public Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
// TODO(internal b/172331505): Implement support.
return this;
}
diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
index 8d72d5dd95..f6830ea37b 100644
--- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
+++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
@@ -91,6 +91,15 @@ public final class SsMediaSource extends BaseMediaSource
/**
* Creates a new factory for {@link SsMediaSource}s.
*
+ * The factory will use the following default components:
+ *
+ *
+ * - {@link DefaultSsChunkSource.Factory}
+ *
- {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
- {@link DefaultCompositeSequenceableLoaderFactory}
+ *
+ *
* @param dataSourceFactory A factory for {@link DataSource} instances that will be used to load
* manifest and media data.
*/
@@ -99,7 +108,14 @@ public final class SsMediaSource extends BaseMediaSource
}
/**
- * Creates a new factory for {@link SsMediaSource}s.
+ * Creates a new factory for {@link SsMediaSource}s. The factory will use the following default
+ * components:
+ *
+ *
+ * - {@link DefaultDrmSessionManagerProvider}
+ *
- {@link DefaultLoadErrorHandlingPolicy}
+ *
- {@link DefaultCompositeSequenceableLoaderFactory}
+ *
*
* @param chunkSourceFactory A factory for {@link SsChunkSource} instances.
* @param manifestDataSourceFactory A factory for {@link DataSource} instances that will be used
@@ -118,19 +134,14 @@ public final class SsMediaSource extends BaseMediaSource
compositeSequenceableLoaderFactory = new DefaultCompositeSequenceableLoaderFactory();
}
- /**
- * Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link
- * DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}.
- *
- * @param loadErrorHandlingPolicy A {@link LoadErrorHandlingPolicy}.
- * @return This factory, for convenience.
- */
- public Factory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ @Override
+ public Factory setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
this.loadErrorHandlingPolicy =
- loadErrorHandlingPolicy != null
- ? loadErrorHandlingPolicy
- : new DefaultLoadErrorHandlingPolicy();
+ checkNotNull(
+ loadErrorHandlingPolicy,
+ "MediaSource.Factory#setLoadErrorHandlingPolicy no longer handles null by"
+ + " instantiating a new DefaultLoadErrorHandlingPolicy. Explicitly construct and"
+ + " pass an instance in order to retain the old behavior.");
return this;
}
@@ -181,11 +192,13 @@ public final class SsMediaSource extends BaseMediaSource
@Override
public Factory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ DrmSessionManagerProvider drmSessionManagerProvider) {
this.drmSessionManagerProvider =
- drmSessionManagerProvider != null
- ? drmSessionManagerProvider
- : new DefaultDrmSessionManagerProvider();
+ checkNotNull(
+ drmSessionManagerProvider,
+ "MediaSource.Factory#setDrmSessionManagerProvider no longer handles null by"
+ + " instantiating a new DefaultDrmSessionManagerProvider. Explicitly construct"
+ + " and pass an instance in order to retain the old behavior.");
return this;
}
diff --git a/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/DefaultMediaSourceFactoryTest.java b/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/DefaultMediaSourceFactoryTest.java
index 28f220147e..3b91e91d19 100644
--- a/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/DefaultMediaSourceFactoryTest.java
+++ b/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/DefaultMediaSourceFactoryTest.java
@@ -85,21 +85,6 @@ public class DefaultMediaSourceFactoryTest {
assertThat(mediaSource).isInstanceOf(SsMediaSource.class);
}
- @Test
- public void createMediaSource_withNull_usesNonNullDefaults() {
- DefaultMediaSourceFactory defaultMediaSourceFactory =
- new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext());
- MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.ism").build();
-
- MediaSource mediaSource =
- defaultMediaSourceFactory
- .setDrmSessionManagerProvider(null)
- .setLoadErrorHandlingPolicy(null)
- .createMediaSource(mediaItem);
-
- assertThat(mediaSource).isNotNull();
- }
-
@Test
public void getSupportedTypes_smoothstreamingModule_containsTypeSS() {
int[] supportedTypes =
diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.java
index 05e0a2fd7b..047a4d7cab 100644
--- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.java
+++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSourceFactory.java
@@ -15,7 +15,6 @@
*/
package com.google.android.exoplayer2.testutil;
-import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.drm.DrmSessionManagerProvider;
@@ -37,13 +36,13 @@ public final class FakeMediaSourceFactory implements MediaSourceFactory {
@Override
public MediaSourceFactory setDrmSessionManagerProvider(
- @Nullable DrmSessionManagerProvider drmSessionManagerProvider) {
+ DrmSessionManagerProvider drmSessionManagerProvider) {
throw new UnsupportedOperationException();
}
@Override
public MediaSourceFactory setLoadErrorHandlingPolicy(
- @Nullable LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
+ LoadErrorHandlingPolicy loadErrorHandlingPolicy) {
throw new UnsupportedOperationException();
}