Rename MediaSourceDrmHelper to DefaultDrmSessionManagerProvider

Also move it to the `drm` package, and extract a
`DrmSessionManagerProvider` interface.

I'll add `MediaSourceFactory.setDrmSessionProvider()` in a follow-up
change.

Issue: #8466
PiperOrigin-RevId: 352582559
This commit is contained in:
ibaker 2021-01-19 17:12:35 +00:00 committed by Oliver Woodman
parent 3069251bd0
commit b2a42ea157
8 changed files with 70 additions and 43 deletions

View File

@ -13,16 +13,12 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * 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 static com.google.android.exoplayer2.drm.DefaultDrmSessionManager.MODE_PLAYBACK;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.MediaItem; 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.DefaultHttpDataSource;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.upstream.HttpDataSource; 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 com.google.common.primitives.Ints;
import java.util.Map; import java.util.Map;
/** A helper to create a {@link DrmSessionManager} from a {@link MediaItem}. */ /** Default implementation of {@link DrmSessionManagerProvider}. */
public final class MediaSourceDrmHelper { public final class DefaultDrmSessionManagerProvider implements DrmSessionManagerProvider {
@Nullable private HttpDataSource.Factory drmHttpDataSourceFactory; @Nullable private HttpDataSource.Factory drmHttpDataSourceFactory;
@Nullable private String userAgent; @Nullable private String userAgent;
@ -62,8 +58,8 @@ public final class MediaSourceDrmHelper {
this.userAgent = userAgent; this.userAgent = userAgent;
} }
/** Creates a {@link DrmSessionManager} for the given media item. */ @Override
public DrmSessionManager create(MediaItem mediaItem) { public DrmSessionManager get(MediaItem mediaItem) {
Assertions.checkNotNull(mediaItem.playbackProperties); Assertions.checkNotNull(mediaItem.playbackProperties);
@Nullable @Nullable
MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration; MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration;

View File

@ -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);
}

View File

@ -23,6 +23,7 @@ import android.util.SparseArray;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem; 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.drm.DrmSessionManager;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory; import com.google.android.exoplayer2.extractor.ExtractorsFactory;
@ -100,7 +101,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
private static final String TAG = "DefaultMediaSourceFactory"; private static final String TAG = "DefaultMediaSourceFactory";
private final MediaSourceDrmHelper mediaSourceDrmHelper; private final DefaultDrmSessionManagerProvider drmSessionManagerProvider;
private final DataSource.Factory dataSourceFactory; private final DataSource.Factory dataSourceFactory;
private final SparseArray<MediaSourceFactory> mediaSourceFactories; private final SparseArray<MediaSourceFactory> mediaSourceFactories;
@C.ContentType private final int[] supportedTypes; @C.ContentType private final int[] supportedTypes;
@ -157,7 +158,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
public DefaultMediaSourceFactory( public DefaultMediaSourceFactory(
DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) { DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) {
this.dataSourceFactory = dataSourceFactory; this.dataSourceFactory = dataSourceFactory;
mediaSourceDrmHelper = new MediaSourceDrmHelper(); drmSessionManagerProvider = new DefaultDrmSessionManagerProvider();
mediaSourceFactories = loadDelegates(dataSourceFactory, extractorsFactory); mediaSourceFactories = loadDelegates(dataSourceFactory, extractorsFactory);
supportedTypes = new int[mediaSourceFactories.size()]; supportedTypes = new int[mediaSourceFactories.size()];
for (int i = 0; i < mediaSourceFactories.size(); i++) { for (int i = 0; i < mediaSourceFactories.size(); i++) {
@ -257,13 +258,13 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
@Override @Override
public DefaultMediaSourceFactory setDrmHttpDataSourceFactory( public DefaultMediaSourceFactory setDrmHttpDataSourceFactory(
@Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) {
mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory);
return this; return this;
} }
@Override @Override
public DefaultMediaSourceFactory setDrmUserAgent(@Nullable String userAgent) { public DefaultMediaSourceFactory setDrmUserAgent(@Nullable String userAgent) {
mediaSourceDrmHelper.setDrmUserAgent(userAgent); drmSessionManagerProvider.setDrmUserAgent(userAgent);
return this; return this;
} }
@ -310,7 +311,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
Assertions.checkNotNull( Assertions.checkNotNull(
mediaSourceFactory, "No suitable media source factory found for content type: " + type); mediaSourceFactory, "No suitable media source factory found for content type: " + type);
mediaSourceFactory.setDrmSessionManager( mediaSourceFactory.setDrmSessionManager(
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem)); drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem));
mediaSourceFactory.setStreamKeys( mediaSourceFactory.setStreamKeys(
!mediaItem.playbackProperties.streamKeys.isEmpty() !mediaItem.playbackProperties.streamKeys.isEmpty()
? mediaItem.playbackProperties.streamKeys ? mediaItem.playbackProperties.streamKeys

View File

@ -22,6 +22,7 @@ import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Timeline; 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.drm.DrmSessionManager;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.Extractor; import com.google.android.exoplayer2.extractor.Extractor;
@ -51,7 +52,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
public static final class Factory implements MediaSourceFactory { public static final class Factory implements MediaSourceFactory {
private final DataSource.Factory dataSourceFactory; private final DataSource.Factory dataSourceFactory;
private final MediaSourceDrmHelper mediaSourceDrmHelper; private final DefaultDrmSessionManagerProvider drmSessionManagerProvider;
private ExtractorsFactory extractorsFactory; private ExtractorsFactory extractorsFactory;
@Nullable private DrmSessionManager drmSessionManager; @Nullable private DrmSessionManager drmSessionManager;
@ -79,7 +80,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) { public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) {
this.dataSourceFactory = dataSourceFactory; this.dataSourceFactory = dataSourceFactory;
this.extractorsFactory = extractorsFactory; this.extractorsFactory = extractorsFactory;
mediaSourceDrmHelper = new MediaSourceDrmHelper(); drmSessionManagerProvider = new DefaultDrmSessionManagerProvider();
loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy(); loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy();
continueLoadingCheckIntervalBytes = DEFAULT_LOADING_CHECK_INTERVAL_BYTES; continueLoadingCheckIntervalBytes = DEFAULT_LOADING_CHECK_INTERVAL_BYTES;
} }
@ -156,13 +157,13 @@ public final class ProgressiveMediaSource extends BaseMediaSource
@Override @Override
public Factory setDrmHttpDataSourceFactory( public Factory setDrmHttpDataSourceFactory(
@Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) {
mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory);
return this; return this;
} }
@Override @Override
public Factory setDrmUserAgent(@Nullable String userAgent) { public Factory setDrmUserAgent(@Nullable String userAgent) {
mediaSourceDrmHelper.setDrmUserAgent(userAgent); drmSessionManagerProvider.setDrmUserAgent(userAgent);
return this; return this;
} }
@ -198,7 +199,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
mediaItem, mediaItem,
dataSourceFactory, dataSourceFactory,
extractorsFactory, extractorsFactory,
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem),
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
continueLoadingCheckIntervalBytes); continueLoadingCheckIntervalBytes);
} }

View File

@ -21,18 +21,19 @@ import android.net.Uri;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem; 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.drm.DrmSessionManager;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
/** Unit tests for {@link MediaSourceDrmHelper}. */ /** Unit tests for {@link DefaultDrmSessionManagerProvider}. */
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class MediaSourceDrmHelperTest { public class DefaultDrmSessionManagerProviderTest {
@Test @Test
public void create_noDrmProperties_createsNoopManager() { public void create_noDrmProperties_createsNoopManager() {
DrmSessionManager drmSessionManager = DrmSessionManager drmSessionManager =
new MediaSourceDrmHelper().create(MediaItem.fromUri(Uri.EMPTY)); new DefaultDrmSessionManagerProvider().get(MediaItem.fromUri(Uri.EMPTY));
assertThat(drmSessionManager).isEqualTo(DrmSessionManager.DUMMY); assertThat(drmSessionManager).isEqualTo(DrmSessionManager.DUMMY);
} }
@ -46,7 +47,7 @@ public class MediaSourceDrmHelperTest {
.setDrmUuid(C.WIDEVINE_UUID) .setDrmUuid(C.WIDEVINE_UUID)
.build(); .build();
DrmSessionManager drmSessionManager = new MediaSourceDrmHelper().create(mediaItem); DrmSessionManager drmSessionManager = new DefaultDrmSessionManagerProvider().get(mediaItem);
assertThat(drmSessionManager).isNotEqualTo(DrmSessionManager.DUMMY); assertThat(drmSessionManager).isNotEqualTo(DrmSessionManager.DUMMY);
} }

View File

@ -33,6 +33,7 @@ import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.ParserException;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline; 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.DrmSessionEventListener;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.offline.FilteringManifestParser; 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.MediaLoadData;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource; 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;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.MediaSourceFactory; import com.google.android.exoplayer2.source.MediaSourceFactory;
@ -99,7 +99,7 @@ public final class DashMediaSource extends BaseMediaSource {
public static final class Factory implements MediaSourceFactory { public static final class Factory implements MediaSourceFactory {
private final DashChunkSource.Factory chunkSourceFactory; private final DashChunkSource.Factory chunkSourceFactory;
private final MediaSourceDrmHelper mediaSourceDrmHelper; private final DefaultDrmSessionManagerProvider drmSessionManagerProvider;
@Nullable private final DataSource.Factory manifestDataSourceFactory; @Nullable private final DataSource.Factory manifestDataSourceFactory;
@Nullable private DrmSessionManager drmSessionManager; @Nullable private DrmSessionManager drmSessionManager;
@ -135,7 +135,7 @@ public final class DashMediaSource extends BaseMediaSource {
@Nullable DataSource.Factory manifestDataSourceFactory) { @Nullable DataSource.Factory manifestDataSourceFactory) {
this.chunkSourceFactory = checkNotNull(chunkSourceFactory); this.chunkSourceFactory = checkNotNull(chunkSourceFactory);
this.manifestDataSourceFactory = manifestDataSourceFactory; this.manifestDataSourceFactory = manifestDataSourceFactory;
mediaSourceDrmHelper = new MediaSourceDrmHelper(); drmSessionManagerProvider = new DefaultDrmSessionManagerProvider();
loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy(); loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy();
targetLiveOffsetOverrideMs = C.TIME_UNSET; targetLiveOffsetOverrideMs = C.TIME_UNSET;
fallbackTargetLiveOffsetMs = DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS; fallbackTargetLiveOffsetMs = DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS;
@ -174,13 +174,13 @@ public final class DashMediaSource extends BaseMediaSource {
@Override @Override
public Factory setDrmHttpDataSourceFactory( public Factory setDrmHttpDataSourceFactory(
@Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) {
mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory);
return this; return this;
} }
@Override @Override
public Factory setDrmUserAgent(@Nullable String userAgent) { public Factory setDrmUserAgent(@Nullable String userAgent) {
mediaSourceDrmHelper.setDrmUserAgent(userAgent); drmSessionManagerProvider.setDrmUserAgent(userAgent);
return this; return this;
} }
@ -319,7 +319,7 @@ public final class DashMediaSource extends BaseMediaSource {
/* manifestParser= */ null, /* manifestParser= */ null,
chunkSourceFactory, chunkSourceFactory,
compositeSequenceableLoaderFactory, compositeSequenceableLoaderFactory,
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem),
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
fallbackTargetLiveOffsetMs); fallbackTargetLiveOffsetMs);
} }
@ -385,7 +385,7 @@ public final class DashMediaSource extends BaseMediaSource {
manifestParser, manifestParser,
chunkSourceFactory, chunkSourceFactory,
compositeSequenceableLoaderFactory, compositeSequenceableLoaderFactory,
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem),
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
fallbackTargetLiveOffsetMs); fallbackTargetLiveOffsetMs);
} }

View File

@ -26,6 +26,7 @@ import androidx.annotation.VisibleForTesting;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.MediaItem; 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.DrmSessionEventListener;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.extractor.Extractor; 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.DefaultCompositeSequenceableLoaderFactory;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource; 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;
import com.google.android.exoplayer2.source.MediaSourceFactory; import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.source.SequenceableLoader; import com.google.android.exoplayer2.source.SequenceableLoader;
@ -94,7 +94,7 @@ public final class HlsMediaSource extends BaseMediaSource
public static final class Factory implements MediaSourceFactory { public static final class Factory implements MediaSourceFactory {
private final HlsDataSourceFactory hlsDataSourceFactory; private final HlsDataSourceFactory hlsDataSourceFactory;
private final MediaSourceDrmHelper mediaSourceDrmHelper; private final DefaultDrmSessionManagerProvider drmSessionManagerProvider;
private HlsExtractorFactory extractorFactory; private HlsExtractorFactory extractorFactory;
private HlsPlaylistParserFactory playlistParserFactory; private HlsPlaylistParserFactory playlistParserFactory;
@ -128,7 +128,7 @@ public final class HlsMediaSource extends BaseMediaSource
*/ */
public Factory(HlsDataSourceFactory hlsDataSourceFactory) { public Factory(HlsDataSourceFactory hlsDataSourceFactory) {
this.hlsDataSourceFactory = checkNotNull(hlsDataSourceFactory); this.hlsDataSourceFactory = checkNotNull(hlsDataSourceFactory);
mediaSourceDrmHelper = new MediaSourceDrmHelper(); drmSessionManagerProvider = new DefaultDrmSessionManagerProvider();
playlistParserFactory = new DefaultHlsPlaylistParserFactory(); playlistParserFactory = new DefaultHlsPlaylistParserFactory();
playlistTrackerFactory = DefaultHlsPlaylistTracker.FACTORY; playlistTrackerFactory = DefaultHlsPlaylistTracker.FACTORY;
extractorFactory = HlsExtractorFactory.DEFAULT; extractorFactory = HlsExtractorFactory.DEFAULT;
@ -289,13 +289,13 @@ public final class HlsMediaSource extends BaseMediaSource
@Override @Override
public Factory setDrmHttpDataSourceFactory( public Factory setDrmHttpDataSourceFactory(
@Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) {
mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory);
return this; return this;
} }
@Override @Override
public MediaSourceFactory setDrmUserAgent(@Nullable String userAgent) { public MediaSourceFactory setDrmUserAgent(@Nullable String userAgent) {
mediaSourceDrmHelper.setDrmUserAgent(userAgent); drmSessionManagerProvider.setDrmUserAgent(userAgent);
return this; return this;
} }
@ -369,7 +369,7 @@ public final class HlsMediaSource extends BaseMediaSource
hlsDataSourceFactory, hlsDataSourceFactory,
extractorFactory, extractorFactory,
compositeSequenceableLoaderFactory, compositeSequenceableLoaderFactory,
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem),
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
playlistTrackerFactory.createTracker( playlistTrackerFactory.createTracker(
hlsDataSourceFactory, loadErrorHandlingPolicy, playlistParserFactory), hlsDataSourceFactory, loadErrorHandlingPolicy, playlistParserFactory),

View File

@ -27,6 +27,7 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayerLibraryInfo; import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Timeline; 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.DrmSessionEventListener;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.offline.FilteringManifestParser; 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.MediaLoadData;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource; 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;
import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher;
import com.google.android.exoplayer2.source.MediaSourceFactory; import com.google.android.exoplayer2.source.MediaSourceFactory;
@ -78,7 +78,7 @@ public final class SsMediaSource extends BaseMediaSource
public static final class Factory implements MediaSourceFactory { public static final class Factory implements MediaSourceFactory {
private final SsChunkSource.Factory chunkSourceFactory; private final SsChunkSource.Factory chunkSourceFactory;
private final MediaSourceDrmHelper mediaSourceDrmHelper; private final DefaultDrmSessionManagerProvider drmSessionManagerProvider;
@Nullable private final DataSource.Factory manifestDataSourceFactory; @Nullable private final DataSource.Factory manifestDataSourceFactory;
private CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory; private CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory;
@ -113,7 +113,7 @@ public final class SsMediaSource extends BaseMediaSource
@Nullable DataSource.Factory manifestDataSourceFactory) { @Nullable DataSource.Factory manifestDataSourceFactory) {
this.chunkSourceFactory = checkNotNull(chunkSourceFactory); this.chunkSourceFactory = checkNotNull(chunkSourceFactory);
this.manifestDataSourceFactory = manifestDataSourceFactory; this.manifestDataSourceFactory = manifestDataSourceFactory;
mediaSourceDrmHelper = new MediaSourceDrmHelper(); drmSessionManagerProvider = new DefaultDrmSessionManagerProvider();
loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy(); loadErrorHandlingPolicy = new DefaultLoadErrorHandlingPolicy();
livePresentationDelayMs = DEFAULT_LIVE_PRESENTATION_DELAY_MS; livePresentationDelayMs = DEFAULT_LIVE_PRESENTATION_DELAY_MS;
compositeSequenceableLoaderFactory = new DefaultCompositeSequenceableLoaderFactory(); compositeSequenceableLoaderFactory = new DefaultCompositeSequenceableLoaderFactory();
@ -200,13 +200,13 @@ public final class SsMediaSource extends BaseMediaSource
@Override @Override
public Factory setDrmHttpDataSourceFactory( public Factory setDrmHttpDataSourceFactory(
@Nullable HttpDataSource.Factory drmHttpDataSourceFactory) { @Nullable HttpDataSource.Factory drmHttpDataSourceFactory) {
mediaSourceDrmHelper.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory); drmSessionManagerProvider.setDrmHttpDataSourceFactory(drmHttpDataSourceFactory);
return this; return this;
} }
@Override @Override
public Factory setDrmUserAgent(@Nullable String userAgent) { public Factory setDrmUserAgent(@Nullable String userAgent) {
mediaSourceDrmHelper.setDrmUserAgent(userAgent); drmSessionManagerProvider.setDrmUserAgent(userAgent);
return this; return this;
} }
@ -277,7 +277,7 @@ public final class SsMediaSource extends BaseMediaSource
/* manifestParser= */ null, /* manifestParser= */ null,
chunkSourceFactory, chunkSourceFactory,
compositeSequenceableLoaderFactory, compositeSequenceableLoaderFactory,
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem),
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
livePresentationDelayMs); livePresentationDelayMs);
} }
@ -321,7 +321,7 @@ public final class SsMediaSource extends BaseMediaSource
manifestParser, manifestParser,
chunkSourceFactory, chunkSourceFactory,
compositeSequenceableLoaderFactory, compositeSequenceableLoaderFactory,
drmSessionManager != null ? drmSessionManager : mediaSourceDrmHelper.create(mediaItem), drmSessionManager != null ? drmSessionManager : drmSessionManagerProvider.get(mediaItem),
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
livePresentationDelayMs); livePresentationDelayMs);
} }