diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b1253d4393..57774c8b01 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -14,6 +14,9 @@ * Fix memory leak in `MergingMediaSource`, for example used when sideloading subtitles ([#2338](https://github.com/androidx/media/issues/2338)). + * Allow `CmcdConfiguration.Factory` to return `null` to disable CMCD + logging for specific media items + ([#2386](https://github.com/androidx/media/pull/2386)). * Transformer: * Filling an initial gap (added via `addGap()`) with silent audio now requires explicitly setting `experimentalSetForceAudioTrack(true)` in 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..6eeac84905 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 logging. */ + @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..2dd4ec35f9 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,16 @@ 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 39f07b0d5f..0500d529bd 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;