From a019de887c5a6bdcf617dc7a2bb9966b0c1e9438 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Mon, 3 Mar 2025 11:12:21 +0100 Subject: [PATCH] Allow `CmcdConfiguration.Factory` to return `null` to disable CMCD --- .../exoplayer/upstream/CmcdConfiguration.java | 3 ++- .../exoplayer/upstream/CmcdConfigurationTest.java | 14 ++++++++++++++ .../media3/exoplayer/dash/DashMediaSource.java | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) 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 b302f0b60a..48b16ec42a 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 final class CmcdConfiguration { * 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 2f3623dcf3..73fbb545da 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 @@ package androidx.media3.exoplayer.upstream; 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 class CmcdConfigurationTest { /* 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 81cc424411..82433efd35 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 final class DashMediaSource extends BaseMediaSource { 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;