diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/CmcdConfiguration.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/CmcdConfiguration.java index b302f0b60a0..48b16ec42ab 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/CmcdConfiguration.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/CmcdConfiguration.java @@ -127,8 +127,9 @@ public interface Factory { * Creates a {@link CmcdConfiguration} based on the provided {@link MediaItem}. * * @param mediaItem The {@link MediaItem} from which to create the CMCD configuration. - * @return A {@link CmcdConfiguration} instance. + * @return A {@link CmcdConfiguration} instance, or {@code null} to disable CMCD. */ + @Nullable CmcdConfiguration createCmcdConfiguration(MediaItem mediaItem); /** diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/upstream/CmcdConfigurationTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/upstream/CmcdConfigurationTest.java index 2f3623dcf31..73fbb545da8 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/upstream/CmcdConfigurationTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/upstream/CmcdConfigurationTest.java @@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; +import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.MediaItem; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -134,4 +135,17 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) { /* throughputKbps= */ 100)) .isEqualTo(200); } + + @Test + public void customFactory_returnsNull() { + CmcdConfiguration.Factory cmcdConfigurationFactory = + mediaItem -> null; + MediaItem mediaItem = new MediaItem.Builder().setMediaId(TEST_MEDIA_ID).build(); + + @Nullable + CmcdConfiguration cmcdConfiguration = + cmcdConfigurationFactory.createCmcdConfiguration(mediaItem); + + assertThat(cmcdConfiguration).isNull(); + } } diff --git a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java index 81cc4244110..82433efd353 100644 --- a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java +++ b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java @@ -113,7 +113,7 @@ public static final class Factory implements MediaSourceFactory { private final DashChunkSource.Factory chunkSourceFactory; @Nullable private final DataSource.Factory manifestDataSourceFactory; - private CmcdConfiguration.Factory cmcdConfigurationFactory; + @Nullable private CmcdConfiguration.Factory cmcdConfigurationFactory; private DrmSessionManagerProvider drmSessionManagerProvider; private CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory; private LoadErrorHandlingPolicy loadErrorHandlingPolicy;