diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSourceDrmHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerProvider.java similarity index 87% rename from library/core/src/main/java/com/google/android/exoplayer2/source/MediaSourceDrmHelper.java rename to library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerProvider.java index 0529ec3127..0e0d2b7b69 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaSourceDrmHelper.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerProvider.java @@ -13,16 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.google.android.exoplayer2.source; +package com.google.android.exoplayer2.drm; import static com.google.android.exoplayer2.drm.DefaultDrmSessionManager.MODE_PLAYBACK; import androidx.annotation.Nullable; import com.google.android.exoplayer2.MediaItem; -import com.google.android.exoplayer2.drm.DefaultDrmSessionManager; -import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaDrm; -import com.google.android.exoplayer2.drm.HttpMediaDrmCallback; import com.google.android.exoplayer2.upstream.DefaultHttpDataSource; import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory; import com.google.android.exoplayer2.upstream.HttpDataSource; @@ -31,8 +27,8 @@ import com.google.android.exoplayer2.util.Util; import com.google.common.primitives.Ints; import java.util.Map; -/** A helper to create a {@link DrmSessionManager} from a {@link MediaItem}. */ -public final class MediaSourceDrmHelper { +/** Default implementation of {@link DrmSessionManagerProvider}. */ +public final class DefaultDrmSessionManagerProvider implements DrmSessionManagerProvider { @Nullable private HttpDataSource.Factory drmHttpDataSourceFactory; @Nullable private String userAgent; @@ -62,8 +58,8 @@ public final class MediaSourceDrmHelper { this.userAgent = userAgent; } - /** Creates a {@link DrmSessionManager} for the given media item. */ - public DrmSessionManager create(MediaItem mediaItem) { + @Override + public DrmSessionManager get(MediaItem mediaItem) { Assertions.checkNotNull(mediaItem.playbackProperties); @Nullable MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManagerProvider.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManagerProvider.java new file mode 100644 index 0000000000..c88daa8f48 --- /dev/null +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManagerProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.exoplayer2.drm; + +import com.google.android.exoplayer2.MediaItem; + +/** + * A provider to obtain a {@link DrmSessionManager} suitable for playing the content described by a + * {@link MediaItem}. + */ +public interface DrmSessionManagerProvider { + + /** Returns a {@link DrmSessionManager} for the given media item. */ + DrmSessionManager get(MediaItem mediaItem); +} 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 bb82a0c245..985c2baf2b 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 @@ -23,6 +23,7 @@ import android.util.SparseArray; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; import com.google.android.exoplayer2.extractor.ExtractorsFactory; @@ -100,7 +101,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { private static final String TAG = "DefaultMediaSourceFactory"; - private final MediaSourceDrmHelper mediaSourceDrmHelper; + private final DefaultDrmSessionManagerProvider drmSessionManagerProvider; private final DataSource.Factory dataSourceFactory; private final SparseArray mediaSourceFactories; @C.ContentType private final int[] supportedTypes; @@ -157,7 +158,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { public DefaultMediaSourceFactory( DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) { this.dataSourceFactory = dataSourceFactory; - mediaSourceDrmHelper = new MediaSourceDrmHelper(); + drmSessionManagerProvider = new DefaultDrmSessionManagerProvider(); mediaSourceFactories = loadDelegates(dataSourceFactory, extractorsFactory); supportedTypes = new int[mediaSourceFactories.size()]; for (int i = 0; i < mediaSourceFactories.size(); i++) { @@ -257,13 +258,13 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { @Override public DefaultMediaSourceFactory setDrmHttpDataSourceFactory( @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { - mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); + drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); return this; } @Override public DefaultMediaSourceFactory setDrmUserAgent(@Nullable String userAgent) { - mediaSourceDrmHelper.setDrmUserAgent(userAgent); + drmSessionManagerProvider.setDrmUserAgent(userAgent); return this; } @@ -310,7 +311,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { Assertions.checkNotNull( mediaSourceFactory, "No suitable media source factory found for content type: " + type); mediaSourceFactory.setDrmSessionManager( - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem)); + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem)); mediaSourceFactory.setStreamKeys( !mediaItem.playbackProperties.streamKeys.isEmpty() ? mediaItem.playbackProperties.streamKeys 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 e18028571f..9e4bef641c 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 @@ -22,6 +22,7 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.Timeline; +import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; import com.google.android.exoplayer2.extractor.Extractor; @@ -51,7 +52,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource public static final class Factory implements MediaSourceFactory { private final DataSource.Factory dataSourceFactory; - private final MediaSourceDrmHelper mediaSourceDrmHelper; + private final DefaultDrmSessionManagerProvider drmSessionManagerProvider; private ExtractorsFactory extractorsFactory; @Nullable private DrmSessionManager drmSessionManager; @@ -79,7 +80,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) { this.dataSourceFactory = dataSourceFactory; this.extractorsFactory = extractorsFactory; - mediaSourceDrmHelper = new MediaSourceDrmHelper(); + drmSessionManagerProvider = new DefaultDrmSessionManagerProvider(); loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy(); continueLoadingCheckIntervalBytes = DEFAULT_LOADING_CHECK_INTERVAL_BYTES; } @@ -156,13 +157,13 @@ public final class ProgressiveMediaSource extends BaseMediaSource @Override public Factory setDrmHttpDataSourceFactory( @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { - mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); + drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); return this; } @Override public Factory setDrmUserAgent(@Nullable String userAgent) { - mediaSourceDrmHelper.setDrmUserAgent(userAgent); + drmSessionManagerProvider.setDrmUserAgent(userAgent); return this; } @@ -198,7 +199,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource mediaItem, dataSourceFactory, extractorsFactory, - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem), loadErrorHandlingPolicy, continueLoadingCheckIntervalBytes); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/MediaSourceDrmHelperTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/DefaultDrmSessionManagerProviderTest.java similarity index 80% rename from library/core/src/test/java/com/google/android/exoplayer2/source/MediaSourceDrmHelperTest.java rename to library/core/src/test/java/com/google/android/exoplayer2/source/DefaultDrmSessionManagerProviderTest.java index 45384f05ec..f7760c5ce8 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/MediaSourceDrmHelperTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/DefaultDrmSessionManagerProviderTest.java @@ -21,18 +21,19 @@ import android.net.Uri; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider; import com.google.android.exoplayer2.drm.DrmSessionManager; import org.junit.Test; import org.junit.runner.RunWith; -/** Unit tests for {@link MediaSourceDrmHelper}. */ +/** Unit tests for {@link DefaultDrmSessionManagerProvider}. */ @RunWith(AndroidJUnit4.class) -public class MediaSourceDrmHelperTest { +public class DefaultDrmSessionManagerProviderTest { @Test public void create_noDrmProperties_createsNoopManager() { DrmSessionManager drmSessionManager = - new MediaSourceDrmHelper().create(MediaItem.fromUri(Uri.EMPTY)); + new DefaultDrmSessionManagerProvider().get(MediaItem.fromUri(Uri.EMPTY)); assertThat(drmSessionManager).isEqualTo(DrmSessionManager.DUMMY); } @@ -46,7 +47,7 @@ public class MediaSourceDrmHelperTest { .setDrmUuid(C.WIDEVINE_UUID) .build(); - DrmSessionManager drmSessionManager = new MediaSourceDrmHelper().create(mediaItem); + DrmSessionManager drmSessionManager = new DefaultDrmSessionManagerProvider().get(mediaItem); assertThat(drmSessionManager).isNotEqualTo(DrmSessionManager.DUMMY); } 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 fb576fcd63..f695c8650e 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 @@ -33,6 +33,7 @@ import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Timeline; +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.offline.FilteringManifestParser; @@ -44,7 +45,6 @@ import com.google.android.exoplayer2.source.LoadEventInfo; import com.google.android.exoplayer2.source.MediaLoadData; import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaSource; -import com.google.android.exoplayer2.source.MediaSourceDrmHelper; import com.google.android.exoplayer2.source.MediaSourceEventListener; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceFactory; @@ -99,7 +99,7 @@ public final class DashMediaSource extends BaseMediaSource { public static final class Factory implements MediaSourceFactory { private final DashChunkSource.Factory chunkSourceFactory; - private final MediaSourceDrmHelper mediaSourceDrmHelper; + private final DefaultDrmSessionManagerProvider drmSessionManagerProvider; @Nullable private final DataSource.Factory manifestDataSourceFactory; @Nullable private DrmSessionManager drmSessionManager; @@ -135,7 +135,7 @@ public final class DashMediaSource extends BaseMediaSource { @Nullable DataSource.Factory manifestDataSourceFactory) { this.chunkSourceFactory = checkNotNull(chunkSourceFactory); this.manifestDataSourceFactory = manifestDataSourceFactory; - mediaSourceDrmHelper = new MediaSourceDrmHelper(); + drmSessionManagerProvider = new DefaultDrmSessionManagerProvider(); loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy(); targetLiveOffsetOverrideMs = C.TIME_UNSET; fallbackTargetLiveOffsetMs = DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS; @@ -174,13 +174,13 @@ public final class DashMediaSource extends BaseMediaSource { @Override public Factory setDrmHttpDataSourceFactory( @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { - mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); + drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); return this; } @Override public Factory setDrmUserAgent(@Nullable String userAgent) { - mediaSourceDrmHelper.setDrmUserAgent(userAgent); + drmSessionManagerProvider.setDrmUserAgent(userAgent); return this; } @@ -319,7 +319,7 @@ public final class DashMediaSource extends BaseMediaSource { /* manifestParser= */ null, chunkSourceFactory, compositeSequenceableLoaderFactory, - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem), loadErrorHandlingPolicy, fallbackTargetLiveOffsetMs); } @@ -385,7 +385,7 @@ public final class DashMediaSource extends BaseMediaSource { manifestParser, chunkSourceFactory, compositeSequenceableLoaderFactory, - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem), loadErrorHandlingPolicy, fallbackTargetLiveOffsetMs); } 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 331e8232cb..6e8f650be9 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 @@ -26,6 +26,7 @@ import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.MediaItem; +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.extractor.Extractor; @@ -35,7 +36,6 @@ import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaSource; -import com.google.android.exoplayer2.source.MediaSourceDrmHelper; import com.google.android.exoplayer2.source.MediaSourceEventListener; import com.google.android.exoplayer2.source.MediaSourceFactory; import com.google.android.exoplayer2.source.SequenceableLoader; @@ -94,7 +94,7 @@ public final class HlsMediaSource extends BaseMediaSource public static final class Factory implements MediaSourceFactory { private final HlsDataSourceFactory hlsDataSourceFactory; - private final MediaSourceDrmHelper mediaSourceDrmHelper; + private final DefaultDrmSessionManagerProvider drmSessionManagerProvider; private HlsExtractorFactory extractorFactory; private HlsPlaylistParserFactory playlistParserFactory; @@ -128,7 +128,7 @@ public final class HlsMediaSource extends BaseMediaSource */ public Factory(HlsDataSourceFactory hlsDataSourceFactory) { this.hlsDataSourceFactory = checkNotNull(hlsDataSourceFactory); - mediaSourceDrmHelper = new MediaSourceDrmHelper(); + drmSessionManagerProvider = new DefaultDrmSessionManagerProvider(); playlistParserFactory = new DefaultHlsPlaylistParserFactory(); playlistTrackerFactory = DefaultHlsPlaylistTracker.FACTORY; extractorFactory = HlsExtractorFactory.DEFAULT; @@ -289,13 +289,13 @@ public final class HlsMediaSource extends BaseMediaSource @Override public Factory setDrmHttpDataSourceFactory( @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { - mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); + drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); return this; } @Override public MediaSourceFactory setDrmUserAgent(@Nullable String userAgent) { - mediaSourceDrmHelper.setDrmUserAgent(userAgent); + drmSessionManagerProvider.setDrmUserAgent(userAgent); return this; } @@ -369,7 +369,7 @@ public final class HlsMediaSource extends BaseMediaSource hlsDataSourceFactory, extractorFactory, compositeSequenceableLoaderFactory, - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem), loadErrorHandlingPolicy, playlistTrackerFactory.createTracker( hlsDataSourceFactory, loadErrorHandlingPolicy, playlistParserFactory), 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 af128d848a..8f69a8b4dd 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 @@ -27,6 +27,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.Timeline; +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.offline.FilteringManifestParser; @@ -38,7 +39,6 @@ import com.google.android.exoplayer2.source.LoadEventInfo; import com.google.android.exoplayer2.source.MediaLoadData; import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaSource; -import com.google.android.exoplayer2.source.MediaSourceDrmHelper; import com.google.android.exoplayer2.source.MediaSourceEventListener; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceFactory; @@ -78,7 +78,7 @@ public final class SsMediaSource extends BaseMediaSource public static final class Factory implements MediaSourceFactory { private final SsChunkSource.Factory chunkSourceFactory; - private final MediaSourceDrmHelper mediaSourceDrmHelper; + private final DefaultDrmSessionManagerProvider drmSessionManagerProvider; @Nullable private final DataSource.Factory manifestDataSourceFactory; private CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory; @@ -113,7 +113,7 @@ public final class SsMediaSource extends BaseMediaSource @Nullable DataSource.Factory manifestDataSourceFactory) { this.chunkSourceFactory = checkNotNull(chunkSourceFactory); this.manifestDataSourceFactory = manifestDataSourceFactory; - mediaSourceDrmHelper = new MediaSourceDrmHelper(); + drmSessionManagerProvider = new DefaultDrmSessionManagerProvider(); loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy(); livePresentationDelayMs = DEFAULT_LIVE_PRESENTATION_DELAY_MS; compositeSequenceableLoaderFactory = new DefaultCompositeSequenceableLoaderFactory(); @@ -200,13 +200,13 @@ public final class SsMediaSource extends BaseMediaSource @Override public Factory setDrmHttpDataSourceFactory( @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { - mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); + drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); return this; } @Override public Factory setDrmUserAgent(@Nullable String userAgent) { - mediaSourceDrmHelper.setDrmUserAgent(userAgent); + drmSessionManagerProvider.setDrmUserAgent(userAgent); return this; } @@ -277,7 +277,7 @@ public final class SsMediaSource extends BaseMediaSource /* manifestParser= */ null, chunkSourceFactory, compositeSequenceableLoaderFactory, - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem), loadErrorHandlingPolicy, livePresentationDelayMs); } @@ -321,7 +321,7 @@ public final class SsMediaSource extends BaseMediaSource manifestParser, chunkSourceFactory, compositeSequenceableLoaderFactory, - drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), + drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem), loadErrorHandlingPolicy, livePresentationDelayMs); }