Make DownloadHelper pass DrmSessionManager to MediaSources

PiperOrigin-RevId: 283795201
This commit is contained in:
aquilescanta 2019-12-04 19:18:56 +00:00 committed by Oliver Woodman
parent 9c23888f1c
commit 9974670cc7
8 changed files with 131 additions and 65 deletions

View File

@ -615,10 +615,21 @@ public class PlayerActivity extends AppCompatActivity
} }
MediaSourceFactory adMediaSourceFactory = MediaSourceFactory adMediaSourceFactory =
new MediaSourceFactory() { new MediaSourceFactory() {
private DrmSessionManager<ExoMediaCrypto> drmSessionManager =
DrmSessionManager.getDummyDrmSessionManager();
@Override
@SuppressWarnings("unchecked") // Safe upcasting.
public MediaSourceFactory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
this.drmSessionManager = (DrmSessionManager<ExoMediaCrypto>) drmSessionManager;
return this;
}
@Override @Override
public MediaSource createMediaSource(Uri uri) { public MediaSource createMediaSource(Uri uri) {
return PlayerActivity.this.createLeafMediaSource( return PlayerActivity.this.createLeafMediaSource(
uri, /* extension=*/ null, DrmSessionManager.getDummyDrmSessionManager()); uri, /* extension=*/ null, drmSessionManager);
} }
@Override @Override

View File

@ -263,9 +263,13 @@ public final class DownloadHelper {
uri, uri,
/* cacheKey= */ null, /* cacheKey= */ null,
createMediaSourceInternal( createMediaSourceInternal(
DASH_FACTORY_CONSTRUCTOR, uri, dataSourceFactory, /* streamKeys= */ null), DASH_FACTORY_CONSTRUCTOR,
uri,
dataSourceFactory,
drmSessionManager,
/* streamKeys= */ null),
trackSelectorParameters, trackSelectorParameters,
Util.getRendererCapabilities(renderersFactory, drmSessionManager)); Util.getRendererCapabilities(renderersFactory, /* drmSessionManager= */ null));
} }
/** @deprecated Use {@link #forHls(Context, Uri, Factory, RenderersFactory)} */ /** @deprecated Use {@link #forHls(Context, Uri, Factory, RenderersFactory)} */
@ -329,9 +333,13 @@ public final class DownloadHelper {
uri, uri,
/* cacheKey= */ null, /* cacheKey= */ null,
createMediaSourceInternal( createMediaSourceInternal(
HLS_FACTORY_CONSTRUCTOR, uri, dataSourceFactory, /* streamKeys= */ null), HLS_FACTORY_CONSTRUCTOR,
uri,
dataSourceFactory,
drmSessionManager,
/* streamKeys= */ null),
trackSelectorParameters, trackSelectorParameters,
Util.getRendererCapabilities(renderersFactory, drmSessionManager)); Util.getRendererCapabilities(renderersFactory, /* drmSessionManager= */ null));
} }
/** @deprecated Use {@link #forSmoothStreaming(Context, Uri, Factory, RenderersFactory)} */ /** @deprecated Use {@link #forSmoothStreaming(Context, Uri, Factory, RenderersFactory)} */
@ -395,9 +403,24 @@ public final class DownloadHelper {
uri, uri,
/* cacheKey= */ null, /* cacheKey= */ null,
createMediaSourceInternal( createMediaSourceInternal(
SS_FACTORY_CONSTRUCTOR, uri, dataSourceFactory, /* streamKeys= */ null), SS_FACTORY_CONSTRUCTOR,
uri,
dataSourceFactory,
drmSessionManager,
/* streamKeys= */ null),
trackSelectorParameters, trackSelectorParameters,
Util.getRendererCapabilities(renderersFactory, drmSessionManager)); Util.getRendererCapabilities(renderersFactory, /* drmSessionManager= */ null));
}
/**
* Equivalent to {@link #createMediaSource(DownloadRequest, Factory, DrmSessionManager)
* createMediaSource(downloadRequest, dataSourceFactory,
* DrmSessionManager.getDummyDrmSessionManager())}.
*/
public static MediaSource createMediaSource(
DownloadRequest downloadRequest, DataSource.Factory dataSourceFactory) {
return createMediaSource(
downloadRequest, dataSourceFactory, DrmSessionManager.getDummyDrmSessionManager());
} }
/** /**
@ -409,7 +432,9 @@ public final class DownloadHelper {
* @return A MediaSource which only contains the tracks defined in {@code downloadRequest}. * @return A MediaSource which only contains the tracks defined in {@code downloadRequest}.
*/ */
public static MediaSource createMediaSource( public static MediaSource createMediaSource(
DownloadRequest downloadRequest, DataSource.Factory dataSourceFactory) { DownloadRequest downloadRequest,
DataSource.Factory dataSourceFactory,
DrmSessionManager<?> drmSessionManager) {
@Nullable Constructor<? extends MediaSourceFactory> constructor; @Nullable Constructor<? extends MediaSourceFactory> constructor;
switch (downloadRequest.type) { switch (downloadRequest.type) {
case DownloadRequest.TYPE_DASH: case DownloadRequest.TYPE_DASH:
@ -428,7 +453,11 @@ public final class DownloadHelper {
throw new IllegalStateException("Unsupported type: " + downloadRequest.type); throw new IllegalStateException("Unsupported type: " + downloadRequest.type);
} }
return createMediaSourceInternal( return createMediaSourceInternal(
constructor, downloadRequest.uri, dataSourceFactory, downloadRequest.streamKeys); constructor,
downloadRequest.uri,
dataSourceFactory,
drmSessionManager,
downloadRequest.streamKeys);
} }
private final String downloadType; private final String downloadType;
@ -888,12 +917,16 @@ public final class DownloadHelper {
@Nullable Constructor<? extends MediaSourceFactory> constructor, @Nullable Constructor<? extends MediaSourceFactory> constructor,
Uri uri, Uri uri,
Factory dataSourceFactory, Factory dataSourceFactory,
@Nullable DrmSessionManager<?> drmSessionManager,
@Nullable List<StreamKey> streamKeys) { @Nullable List<StreamKey> streamKeys) {
if (constructor == null) { if (constructor == null) {
throw new IllegalStateException("Module missing to create media source."); throw new IllegalStateException("Module missing to create media source.");
} }
try { try {
MediaSourceFactory factory = constructor.newInstance(dataSourceFactory); MediaSourceFactory factory = constructor.newInstance(dataSourceFactory);
if (drmSessionManager != null) {
factory.setDrmSessionManager(drmSessionManager);
}
if (streamKeys != null) { if (streamKeys != null) {
factory.setStreamKeys(streamKeys); factory.setStreamKeys(streamKeys);
} }

View File

@ -179,6 +179,13 @@ public final class ExtractorMediaSource extends CompositeMediaSource<Void> {
return this; return this;
} }
/** @deprecated Use {@link ProgressiveMediaSource.Factory#setDrmSessionManager} instead. */
@Override
@Deprecated
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
throw new UnsupportedOperationException();
}
/** /**
* Returns a new {@link ExtractorMediaSource} using the current parameters. * Returns a new {@link ExtractorMediaSource} using the current parameters.
* *

View File

@ -17,6 +17,8 @@ package com.google.android.exoplayer2.source;
import android.net.Uri; import android.net.Uri;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.drm.DrmSession;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.offline.StreamKey; import com.google.android.exoplayer2.offline.StreamKey;
import java.util.List; import java.util.List;
@ -34,6 +36,15 @@ public interface MediaSourceFactory {
return this; return this;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
MediaSourceFactory setDrmSessionManager(DrmSessionManager<?> drmSessionManager);
/** /**
* Creates a new {@link MediaSource} with the specified {@code uri}. * Creates a new {@link MediaSource} with the specified {@code uri}.
* *

View File

@ -132,20 +132,6 @@ public final class ProgressiveMediaSource extends BaseMediaSource
return this; return this;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link * Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link
* DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}. * DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}.
@ -177,6 +163,21 @@ public final class ProgressiveMediaSource extends BaseMediaSource
return this; return this;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
@Override
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Returns a new {@link ProgressiveMediaSource} using the current parameters. * Returns a new {@link ProgressiveMediaSource} using the current parameters.
* *

View File

@ -136,20 +136,6 @@ public final class DashMediaSource extends BaseMediaSource {
return this; return this;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Sets the minimum number of times to retry if a loading error occurs. See {@link * Sets the minimum number of times to retry if a loading error occurs. See {@link
* #setLoadErrorHandlingPolicy} for the default value. * #setLoadErrorHandlingPolicy} for the default value.
@ -310,6 +296,21 @@ public final class DashMediaSource extends BaseMediaSource {
return mediaSource; return mediaSource;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
@Override
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Returns a new {@link DashMediaSource} using the current parameters. * Returns a new {@link DashMediaSource} using the current parameters.
* *

View File

@ -160,20 +160,6 @@ public final class HlsMediaSource extends BaseMediaSource
return this; return this;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link * Sets the {@link LoadErrorHandlingPolicy}. The default value is created by calling {@link
* DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}. * DefaultLoadErrorHandlingPolicy#DefaultLoadErrorHandlingPolicy()}.
@ -326,6 +312,21 @@ public final class HlsMediaSource extends BaseMediaSource
return mediaSource; return mediaSource;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
@Override
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Returns a new {@link HlsMediaSource} using the current parameters. * Returns a new {@link HlsMediaSource} using the current parameters.
* *

View File

@ -121,20 +121,6 @@ public final class SsMediaSource extends BaseMediaSource
return this; return this;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Sets the minimum number of times to retry if a loading error occurs. See {@link * Sets the minimum number of times to retry if a loading error occurs. See {@link
* #setLoadErrorHandlingPolicy} for the default value. * #setLoadErrorHandlingPolicy} for the default value.
@ -276,6 +262,21 @@ public final class SsMediaSource extends BaseMediaSource
return mediaSource; return mediaSource;
} }
/**
* Sets the {@link DrmSessionManager} to use for acquiring {@link DrmSession DrmSessions}. The
* default value is {@link DrmSessionManager#DUMMY}.
*
* @param drmSessionManager The {@link DrmSessionManager}.
* @return This factory, for convenience.
* @throws IllegalStateException If one of the {@code create} methods has already been called.
*/
@Override
public Factory setDrmSessionManager(DrmSessionManager<?> drmSessionManager) {
Assertions.checkState(!isCreateCalled);
this.drmSessionManager = drmSessionManager;
return this;
}
/** /**
* Returns a new {@link SsMediaSource} using the current parameters. * Returns a new {@link SsMediaSource} using the current parameters.
* *