mirror of
https://github.com/androidx/media.git
synced 2025-05-08 08:00:49 +08:00
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:
parent
3069251bd0
commit
b2a42ea157
@ -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;
|
@ -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);
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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),
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user