diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 74ceadc863..e61c73e34a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -46,7 +46,11 @@ [background](https://www.w3.org/TR/webvtt1/#default-text-background) colors ([PR #4178](https://github.com/google/ExoPlayer/pull/4178), [issue #6581](https://github.com/google/ExoPlayer/issues/6581)). -* DRM: Add support for attaching DRM sessions to clear content in the demo app. +* DRM: + * Add support for attaching DRM sessions to clear content in the demo app. + * Remove `DrmSessionManager` references from all renderers. + `DrmSessionManager` must be injected into the MediaSources using the + MediaSources factories. * Downloads: Merge downloads in `SegmentDownloader` to improve overall download speed ([#5978](https://github.com/google/ExoPlayer/issues/5978)). * MP3: Add `IndexSeeker` for accurate seeks in VBR streams diff --git a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java index fc4d527c29..b75c4fdf3d 100644 --- a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java +++ b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java @@ -27,7 +27,6 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.PlayerMessage.Target; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.SimpleDecoder; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; @@ -121,13 +120,7 @@ public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer { int threads, int numInputBuffers, int numOutputBuffers) { - super( - allowedJoiningTimeMs, - eventHandler, - eventListener, - maxDroppedFramesToNotify, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false); + super(allowedJoiningTimeMs, eventHandler, eventListener, maxDroppedFramesToNotify); this.threads = threads; this.numInputBuffers = numInputBuffers; this.numOutputBuffers = numOutputBuffers; @@ -135,13 +128,12 @@ public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer { @Override @Capabilities - protected int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format) { + public final int supportsFormat(Format format) { if (!MimeTypes.VIDEO_AV1.equalsIgnoreCase(format.sampleMimeType) || !Gav1Library.isAvailable()) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_TYPE); } - if (!supportsFormatDrm(drmSessionManager, format.drmInitData)) { + if (format.drmInitData != null && format.exoMediaCryptoType == null) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_DRM); } return RendererCapabilities.create(FORMAT_HANDLED, ADAPTIVE_SEAMLESS, TUNNELING_NOT_SUPPORTED); diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java index 0673f7893a..f5c1f566fb 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java @@ -18,14 +18,12 @@ package com.google.android.exoplayer2.ext.ffmpeg; import android.os.Handler; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.AudioSink; import com.google.android.exoplayer2.audio.DefaultAudioSink; import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MimeTypes; @@ -85,22 +83,19 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer { super( eventHandler, eventListener, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, audioSink); this.enableFloatOutput = enableFloatOutput; } @Override @FormatSupport - protected int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format) { + protected int supportsFormatInternal(Format format) { Assertions.checkNotNull(format.sampleMimeType); if (!FfmpegLibrary.isAvailable()) { return FORMAT_UNSUPPORTED_TYPE; } else if (!FfmpegLibrary.supportsFormat(format.sampleMimeType) || !isOutputSupported(format)) { return FORMAT_UNSUPPORTED_SUBTYPE; - } else if (!supportsFormatDrm(drmSessionManager, format.drmInitData)) { + } else if (format.drmInitData != null && format.exoMediaCryptoType == null) { return FORMAT_UNSUPPORTED_DRM; } else { return FORMAT_HANDLED; @@ -109,7 +104,7 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer { @Override @AdaptiveSupport - public final int supportsMixedMimeTypeAdaptation() throws ExoPlaybackException { + public final int supportsMixedMimeTypeAdaptation() { return ADAPTIVE_NOT_SEAMLESS; } diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java index 6b01fd45a1..4b8808ee94 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java @@ -23,7 +23,6 @@ import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.AudioSink; import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.extractor.FlacStreamMetadata; import com.google.android.exoplayer2.util.Assertions; @@ -69,15 +68,12 @@ public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer { super( eventHandler, eventListener, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, audioSink); } @Override @FormatSupport - protected int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format) { + protected int supportsFormatInternal(Format format) { if (!FlacLibrary.isAvailable() || !MimeTypes.AUDIO_FLAC.equalsIgnoreCase(format.sampleMimeType)) { return FORMAT_UNSUPPORTED_TYPE; @@ -99,7 +95,7 @@ public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer { } if (!supportsOutput(format.channelCount, pcmEncoding)) { return FORMAT_UNSUPPORTED_SUBTYPE; - } else if (!supportsFormatDrm(drmSessionManager, format.drmInitData)) { + } else if (format.drmInitData != null && format.exoMediaCryptoType == null) { return FORMAT_UNSUPPORTED_DRM; } else { return FORMAT_HANDLED; diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java index 3592331eff..8631b30796 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java @@ -22,9 +22,7 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; -import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.util.MimeTypes; /** Decodes and renders audio using the native Opus decoder. */ @@ -55,42 +53,12 @@ public class LibopusAudioRenderer extends SimpleDecoderAudioRenderer { super(eventHandler, eventListener, audioProcessors); } - /** - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @param audioProcessors Optional {@link AudioProcessor}s that will process audio before output. - * @deprecated Use {@link #LibopusAudioRenderer(Handler, AudioRendererEventListener, - * AudioProcessor...)} instead, and pass DRM-related parameters to the {@link MediaSource} - * factories. - */ - @Deprecated - public LibopusAudioRenderer( - @Nullable Handler eventHandler, - @Nullable AudioRendererEventListener eventListener, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, - AudioProcessor... audioProcessors) { - super(eventHandler, eventListener, null, drmSessionManager, playClearSamplesWithoutKeys, - audioProcessors); - } - @Override @FormatSupport - protected int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format) { + protected int supportsFormatInternal(Format format) { boolean drmIsSupported = format.drmInitData == null - || OpusLibrary.matchesExpectedExoMediaCryptoType(format.exoMediaCryptoType) - || (format.exoMediaCryptoType == null - && supportsFormatDrm(drmSessionManager, format.drmInitData)); + || OpusLibrary.matchesExpectedExoMediaCryptoType(format.exoMediaCryptoType); if (!OpusLibrary.isAvailable() || !MimeTypes.AUDIO_OPUS.equalsIgnoreCase(format.sampleMimeType)) { return FORMAT_UNSUPPORTED_TYPE; diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java index 07d532f7cb..a39f76ea8e 100644 --- a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java +++ b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java @@ -27,9 +27,7 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.PlayerMessage.Target; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.SimpleDecoder; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; -import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; import com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer; @@ -101,45 +99,6 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer { eventHandler, eventListener, maxDroppedFramesToNotify, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false); - } - - /** - * @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer - * can attempt to seamlessly join an ongoing playback. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between - * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @deprecated Use {@link #LibvpxVideoRenderer(long, Handler, VideoRendererEventListener, int, - * int, int, int)}} instead, and pass DRM-related parameters to the {@link MediaSource} - * factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public LibvpxVideoRenderer( - long allowedJoiningTimeMs, - @Nullable Handler eventHandler, - @Nullable VideoRendererEventListener eventListener, - int maxDroppedFramesToNotify, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys) { - this( - allowedJoiningTimeMs, - eventHandler, - eventListener, - maxDroppedFramesToNotify, - drmSessionManager, - playClearSamplesWithoutKeys, getRuntime().availableProcessors(), /* numInputBuffers= */ 4, /* numOutputBuffers= */ 4); @@ -166,58 +125,7 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer { int threads, int numInputBuffers, int numOutputBuffers) { - this( - allowedJoiningTimeMs, - eventHandler, - eventListener, - maxDroppedFramesToNotify, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, - threads, - numInputBuffers, - numOutputBuffers); - } - - /** - * @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer - * can attempt to seamlessly join an ongoing playback. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between - * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @param threads Number of threads libvpx will use to decode. - * @param numInputBuffers Number of input buffers. - * @param numOutputBuffers Number of output buffers. - * @deprecated Use {@link #LibvpxVideoRenderer(long, Handler, VideoRendererEventListener, int, - * int, int, int)}} instead, and pass DRM-related parameters to the {@link MediaSource} - * factories. - */ - @Deprecated - public LibvpxVideoRenderer( - long allowedJoiningTimeMs, - @Nullable Handler eventHandler, - @Nullable VideoRendererEventListener eventListener, - int maxDroppedFramesToNotify, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, - int threads, - int numInputBuffers, - int numOutputBuffers) { - super( - allowedJoiningTimeMs, - eventHandler, - eventListener, - maxDroppedFramesToNotify, - drmSessionManager, - playClearSamplesWithoutKeys); + super(allowedJoiningTimeMs, eventHandler, eventListener, maxDroppedFramesToNotify); this.threads = threads; this.numInputBuffers = numInputBuffers; this.numOutputBuffers = numOutputBuffers; @@ -225,16 +133,13 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer { @Override @Capabilities - protected int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format) { + public final int supportsFormat(Format format) { if (!VpxLibrary.isAvailable() || !MimeTypes.VIDEO_VP9.equalsIgnoreCase(format.sampleMimeType)) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_TYPE); } boolean drmIsSupported = format.drmInitData == null - || VpxLibrary.matchesExpectedExoMediaCryptoType(format.exoMediaCryptoType) - || (format.exoMediaCryptoType == null - && supportsFormatDrm(drmSessionManager, format.drmInitData)); + || VpxLibrary.matchesExpectedExoMediaCryptoType(format.exoMediaCryptoType); if (!drmIsSupported) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_DRM); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java index 10573af419..93f4687e31 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java @@ -18,7 +18,6 @@ package com.google.android.exoplayer2; import android.os.Looper; import androidx.annotation.Nullable; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; -import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; @@ -411,26 +410,4 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities { protected final boolean isSourceReady() { return hasReadStreamToEnd() ? streamIsFinal : stream.isReady(); } - - /** - * Returns whether {@code drmSessionManager} supports the specified {@code drmInitData}, or true - * if {@code drmInitData} is null. - * - * @param drmSessionManager The drm session manager. - * @param drmInitData {@link DrmInitData} of the format to check for support. - * @return Whether {@code drmSessionManager} supports the specified {@code drmInitData}, or - * true if {@code drmInitData} is null. - */ - protected static boolean supportsFormatDrm(@Nullable DrmSessionManager drmSessionManager, - @Nullable DrmInitData drmInitData) { - if (drmInitData == null) { - // Content is unencrypted. - return true; - } else if (drmSessionManager == null) { - // Content is encrypted, but no drm session manager is available. - return false; - } - return drmSessionManager.canAcquireSession(drmInitData); - } - } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java index f54794216b..410f174904 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java @@ -20,14 +20,11 @@ import android.media.MediaCodec; import android.os.Handler; import android.os.Looper; import androidx.annotation.IntDef; -import androidx.annotation.Nullable; import com.google.android.exoplayer2.audio.AudioCapabilities; import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.DefaultAudioSink; import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer; -import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.metadata.MetadataOutput; @@ -88,10 +85,8 @@ public class DefaultRenderersFactory implements RenderersFactory { protected static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50; private final Context context; - @Nullable private DrmSessionManager drmSessionManager; @ExtensionRendererMode private int extensionRendererMode; private long allowedVideoJoiningTimeMs; - private boolean playClearSamplesWithoutKeys; private boolean enableDecoderFallback; private MediaCodecSelector mediaCodecSelector; @MediaCodecRenderer.MediaCodecOperationMode private int mediaCodecOperationMode; @@ -105,17 +100,6 @@ public class DefaultRenderersFactory implements RenderersFactory { mediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS; } - /** - * @deprecated Use {@link #DefaultRenderersFactory(Context)} and pass {@link DrmSessionManager} - * directly to {@link SimpleExoPlayer.Builder}. - */ - @Deprecated - @SuppressWarnings("deprecation") - public DefaultRenderersFactory( - Context context, @Nullable DrmSessionManager drmSessionManager) { - this(context, drmSessionManager, EXTENSION_RENDERER_MODE_OFF); - } - /** * @deprecated Use {@link #DefaultRenderersFactory(Context)} and {@link * #setExtensionRendererMode(int)}. @@ -127,48 +111,18 @@ public class DefaultRenderersFactory implements RenderersFactory { this(context, extensionRendererMode, DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS); } - /** - * @deprecated Use {@link #DefaultRenderersFactory(Context)} and {@link - * #setExtensionRendererMode(int)}, and pass {@link DrmSessionManager} directly to {@link - * SimpleExoPlayer.Builder}. - */ - @Deprecated - @SuppressWarnings("deprecation") - public DefaultRenderersFactory( - Context context, - @Nullable DrmSessionManager drmSessionManager, - @ExtensionRendererMode int extensionRendererMode) { - this(context, drmSessionManager, extensionRendererMode, DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS); - } - /** * @deprecated Use {@link #DefaultRenderersFactory(Context)}, {@link * #setExtensionRendererMode(int)} and {@link #setAllowedVideoJoiningTimeMs(long)}. */ @Deprecated - @SuppressWarnings("deprecation") public DefaultRenderersFactory( Context context, @ExtensionRendererMode int extensionRendererMode, long allowedVideoJoiningTimeMs) { - this(context, null, extensionRendererMode, allowedVideoJoiningTimeMs); - } - - /** - * @deprecated Use {@link #DefaultRenderersFactory(Context)}, {@link - * #setExtensionRendererMode(int)} and {@link #setAllowedVideoJoiningTimeMs(long)}, and pass - * {@link DrmSessionManager} directly to {@link SimpleExoPlayer.Builder}. - */ - @Deprecated - public DefaultRenderersFactory( - Context context, - @Nullable DrmSessionManager drmSessionManager, - @ExtensionRendererMode int extensionRendererMode, - long allowedVideoJoiningTimeMs) { this.context = context; this.extensionRendererMode = extensionRendererMode; this.allowedVideoJoiningTimeMs = allowedVideoJoiningTimeMs; - this.drmSessionManager = drmSessionManager; mediaCodecSelector = MediaCodecSelector.DEFAULT; } @@ -203,25 +157,6 @@ public class DefaultRenderersFactory implements RenderersFactory { return this; } - /** - * Sets whether renderers are permitted to play clear regions of encrypted media prior to having - * obtained the keys necessary to decrypt encrypted regions of the media. For encrypted media that - * starts with a short clear region, this allows playback to begin in parallel with key - * acquisition, which can reduce startup latency. - * - *

The default value is {@code false}. - * - * @param playClearSamplesWithoutKeys Whether renderers are permitted to play clear regions of - * encrypted media prior to having obtained the keys necessary to decrypt encrypted regions of - * the media. - * @return This factory, for convenience. - */ - public DefaultRenderersFactory setPlayClearSamplesWithoutKeys( - boolean playClearSamplesWithoutKeys) { - this.playClearSamplesWithoutKeys = playClearSamplesWithoutKeys; - return this; - } - /** * Sets whether to enable fallback to lower-priority decoders if decoder initialization fails. * This may result in using a decoder that is less efficient or slower than the primary decoder. @@ -269,18 +204,12 @@ public class DefaultRenderersFactory implements RenderersFactory { VideoRendererEventListener videoRendererEventListener, AudioRendererEventListener audioRendererEventListener, TextOutput textRendererOutput, - MetadataOutput metadataRendererOutput, - @Nullable DrmSessionManager drmSessionManager) { - if (drmSessionManager == null) { - drmSessionManager = this.drmSessionManager; - } + MetadataOutput metadataRendererOutput) { ArrayList renderersList = new ArrayList<>(); buildVideoRenderers( context, extensionRendererMode, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, enableDecoderFallback, eventHandler, videoRendererEventListener, @@ -290,8 +219,6 @@ public class DefaultRenderersFactory implements RenderersFactory { context, extensionRendererMode, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, enableDecoderFallback, buildAudioProcessors(), eventHandler, @@ -312,11 +239,6 @@ public class DefaultRenderersFactory implements RenderersFactory { * @param context The {@link Context} associated with the player. * @param extensionRendererMode The extension renderer mode. * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the player will - * not be used for DRM protected playbacks. - * @param playClearSamplesWithoutKeys Whether renderers are permitted to play clear regions of - * encrypted media prior to having obtained the keys necessary to decrypt encrypted regions of - * the media. * @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder * initialization fails. This may result in using a decoder that is slower/less efficient than * the primary decoder. @@ -330,8 +252,6 @@ public class DefaultRenderersFactory implements RenderersFactory { Context context, @ExtensionRendererMode int extensionRendererMode, MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, boolean enableDecoderFallback, Handler eventHandler, VideoRendererEventListener eventListener, @@ -342,8 +262,6 @@ public class DefaultRenderersFactory implements RenderersFactory { context, mediaCodecSelector, allowedVideoJoiningTimeMs, - drmSessionManager, - playClearSamplesWithoutKeys, enableDecoderFallback, eventHandler, eventListener, @@ -420,11 +338,6 @@ public class DefaultRenderersFactory implements RenderersFactory { * @param context The {@link Context} associated with the player. * @param extensionRendererMode The extension renderer mode. * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the player will - * not be used for DRM protected playbacks. - * @param playClearSamplesWithoutKeys Whether renderers are permitted to play clear regions of - * encrypted media prior to having obtained the keys necessary to decrypt encrypted regions of - * the media. * @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder * initialization fails. This may result in using a decoder that is slower/less efficient than * the primary decoder. @@ -438,8 +351,6 @@ public class DefaultRenderersFactory implements RenderersFactory { Context context, @ExtensionRendererMode int extensionRendererMode, MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, boolean enableDecoderFallback, AudioProcessor[] audioProcessors, Handler eventHandler, @@ -449,8 +360,6 @@ public class DefaultRenderersFactory implements RenderersFactory { new MediaCodecAudioRenderer( context, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, enableDecoderFallback, eventHandler, eventListener, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java index add82f2f7e..07d191cb64 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java @@ -17,11 +17,7 @@ package com.google.android.exoplayer2; import android.content.Context; import android.os.Looper; -import androidx.annotation.Nullable; import com.google.android.exoplayer2.analytics.AnalyticsCollector; -import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; -import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelector; import com.google.android.exoplayer2.upstream.BandwidthMeter; @@ -35,45 +31,33 @@ public final class ExoPlayerFactory { private ExoPlayerFactory() {} - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") public static SimpleExoPlayer newSimpleInstance( Context context, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode) { RenderersFactory renderersFactory = new DefaultRenderersFactory(context).setExtensionRendererMode(extensionRendererMode); - return newSimpleInstance( - context, renderersFactory, trackSelector, loadControl, drmSessionManager); + return newSimpleInstance(context, renderersFactory, trackSelector, loadControl); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") public static SimpleExoPlayer newSimpleInstance( Context context, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, long allowedVideoJoiningTimeMs) { RenderersFactory renderersFactory = new DefaultRenderersFactory(context) .setExtensionRendererMode(extensionRendererMode) .setAllowedVideoJoiningTimeMs(allowedVideoJoiningTimeMs); - return newSimpleInstance( - context, renderersFactory, trackSelector, loadControl, drmSessionManager); + return newSimpleInstance(context, renderersFactory, trackSelector, loadControl); } /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @@ -107,39 +91,6 @@ public final class ExoPlayerFactory { return newSimpleInstance(context, renderersFactory, trackSelector, loadControl); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public static SimpleExoPlayer newSimpleInstance( - Context context, - TrackSelector trackSelector, - LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager) { - RenderersFactory renderersFactory = new DefaultRenderersFactory(context); - return newSimpleInstance( - context, renderersFactory, trackSelector, loadControl, drmSessionManager); - } - - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public static SimpleExoPlayer newSimpleInstance( - Context context, - RenderersFactory renderersFactory, - TrackSelector trackSelector, - @Nullable DrmSessionManager drmSessionManager) { - return newSimpleInstance( - context, renderersFactory, trackSelector, new DefaultLoadControl(), drmSessionManager); - } - /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") @@ -153,15 +104,10 @@ public final class ExoPlayerFactory { renderersFactory, trackSelector, loadControl, - /* drmSessionManager= */ null, Util.getLooper()); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") public static SimpleExoPlayer newSimpleInstance( @@ -169,41 +115,18 @@ public final class ExoPlayerFactory { RenderersFactory renderersFactory, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager) { - return newSimpleInstance( - context, renderersFactory, trackSelector, loadControl, drmSessionManager, Util.getLooper()); - } - - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public static SimpleExoPlayer newSimpleInstance( - Context context, - RenderersFactory renderersFactory, - TrackSelector trackSelector, - LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, BandwidthMeter bandwidthMeter) { return newSimpleInstance( context, renderersFactory, trackSelector, loadControl, - drmSessionManager, bandwidthMeter, new AnalyticsCollector(Clock.DEFAULT), Util.getLooper()); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") public static SimpleExoPlayer newSimpleInstance( @@ -211,23 +134,17 @@ public final class ExoPlayerFactory { RenderersFactory renderersFactory, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, AnalyticsCollector analyticsCollector) { return newSimpleInstance( context, renderersFactory, trackSelector, loadControl, - drmSessionManager, analyticsCollector, Util.getLooper()); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") public static SimpleExoPlayer newSimpleInstance( @@ -235,23 +152,17 @@ public final class ExoPlayerFactory { RenderersFactory renderersFactory, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, Looper looper) { return newSimpleInstance( context, renderersFactory, trackSelector, loadControl, - drmSessionManager, new AnalyticsCollector(Clock.DEFAULT), looper); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @Deprecated @SuppressWarnings("deprecation") public static SimpleExoPlayer newSimpleInstance( @@ -259,7 +170,6 @@ public final class ExoPlayerFactory { RenderersFactory renderersFactory, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, AnalyticsCollector analyticsCollector, Looper looper) { return newSimpleInstance( @@ -267,17 +177,12 @@ public final class ExoPlayerFactory { renderersFactory, trackSelector, loadControl, - drmSessionManager, DefaultBandwidthMeter.getSingletonInstance(context), analyticsCollector, looper); } - /** - * @deprecated Use {@link SimpleExoPlayer.Builder} instead. The {@link DrmSessionManager} cannot - * be passed to {@link SimpleExoPlayer.Builder} and should instead be injected into the {@link - * MediaSource} factories. - */ + /** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */ @SuppressWarnings("deprecation") @Deprecated public static SimpleExoPlayer newSimpleInstance( @@ -285,7 +190,6 @@ public final class ExoPlayerFactory { RenderersFactory renderersFactory, TrackSelector trackSelector, LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, BandwidthMeter bandwidthMeter, AnalyticsCollector analyticsCollector, Looper looper) { @@ -294,7 +198,6 @@ public final class ExoPlayerFactory { renderersFactory, trackSelector, loadControl, - drmSessionManager, bandwidthMeter, analyticsCollector, /* useLazyPreparation= */ true, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java index 6f0d125bcf..74ee923961 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java @@ -16,10 +16,7 @@ package com.google.android.exoplayer2; import android.os.Handler; -import androidx.annotation.Nullable; import com.google.android.exoplayer2.audio.AudioRendererEventListener; -import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.metadata.MetadataOutput; import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.video.VideoRendererEventListener; @@ -37,7 +34,6 @@ public interface RenderersFactory { * @param audioRendererEventListener An event listener for audio renderers. * @param textRendererOutput An output for text renderers. * @param metadataRendererOutput An output for metadata renderers. - * @param drmSessionManager A drm session manager used by renderers. * @return The {@link Renderer instances}. */ Renderer[] createRenderers( @@ -45,6 +41,5 @@ public interface RenderersFactory { VideoRendererEventListener videoRendererEventListener, AudioRendererEventListener audioRendererEventListener, TextOutput textRendererOutput, - MetadataOutput metadataRendererOutput, - @Nullable DrmSessionManager drmSessionManager); + MetadataOutput metadataRendererOutput); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index 02ea2d0376..a41ae86a2d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -36,9 +36,6 @@ import com.google.android.exoplayer2.audio.AudioListener; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.AuxEffectInfo; import com.google.android.exoplayer2.decoder.DecoderCounters; -import com.google.android.exoplayer2.drm.DefaultDrmSessionManager; -import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.MetadataOutput; import com.google.android.exoplayer2.source.MediaSource; @@ -370,7 +367,6 @@ public class SimpleExoPlayer extends BasePlayer * @param looper The {@link Looper} which must be used for all calls to the player and which is * used to call listeners on. */ - @SuppressWarnings("deprecation") protected SimpleExoPlayer( Context context, RenderersFactory renderersFactory, @@ -381,36 +377,6 @@ public class SimpleExoPlayer extends BasePlayer boolean useLazyPreparation, Clock clock, Looper looper) { - this( - context, - renderersFactory, - trackSelector, - loadControl, - DrmSessionManager.getDummyDrmSessionManager(), - bandwidthMeter, - analyticsCollector, - useLazyPreparation, - clock, - looper); - } - - /** - * @deprecated Use {@link #SimpleExoPlayer(Context, RenderersFactory, TrackSelector, LoadControl, - * BandwidthMeter, AnalyticsCollector, boolean, Clock, Looper)} instead, and pass the {@link - * DrmSessionManager} to the {@link MediaSource} factories. - */ - @Deprecated - protected SimpleExoPlayer( - Context context, - RenderersFactory renderersFactory, - TrackSelector trackSelector, - LoadControl loadControl, - @Nullable DrmSessionManager drmSessionManager, - BandwidthMeter bandwidthMeter, - AnalyticsCollector analyticsCollector, - boolean useLazyPreparation, - Clock clock, - Looper looper) { this.bandwidthMeter = bandwidthMeter; this.analyticsCollector = analyticsCollector; componentListener = new ComponentListener(); @@ -427,8 +393,7 @@ public class SimpleExoPlayer extends BasePlayer componentListener, componentListener, componentListener, - componentListener, - drmSessionManager); + componentListener); // Set initial values. audioVolume = 1; @@ -457,9 +422,6 @@ public class SimpleExoPlayer extends BasePlayer audioListeners.add(analyticsCollector); addMetadataOutput(analyticsCollector); bandwidthMeter.addEventListener(eventHandler, analyticsCollector); - if (drmSessionManager instanceof DefaultDrmSessionManager) { - ((DefaultDrmSessionManager) drmSessionManager).addListener(eventHandler, analyticsCollector); - } audioBecomingNoisyManager = new AudioBecomingNoisyManager(context, eventHandler, componentListener); audioFocusManager = new AudioFocusManager(context, eventHandler, componentListener); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java index a4ac6728dc..1b64c18a17 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java @@ -33,7 +33,6 @@ import com.google.android.exoplayer2.PlayerMessage.Target; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.audio.AudioRendererEventListener.EventDispatcher; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.mediacodec.MediaCodecInfo; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; @@ -41,7 +40,6 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; import com.google.android.exoplayer2.mediacodec.MediaFormatUtil; -import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.util.MediaClock; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.Util; @@ -96,41 +94,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media * @param context A context. * @param mediaCodecSelector A decoder selector. */ - @SuppressWarnings("deprecation") public MediaCodecAudioRenderer(Context context, MediaCodecSelector mediaCodecSelector) { this( context, mediaCodecSelector, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false); - } - - /** - * @param context A context. - * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @deprecated Use {@link #MediaCodecAudioRenderer(Context, MediaCodecSelector, boolean, Handler, - * AudioRendererEventListener, AudioSink)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public MediaCodecAudioRenderer( - Context context, - MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys) { - this( - context, - mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, /* eventHandler= */ null, /* eventListener= */ null); } @@ -142,7 +109,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. */ - @SuppressWarnings("deprecation") public MediaCodecAudioRenderer( Context context, MediaCodecSelector mediaCodecSelector, @@ -151,43 +117,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media this( context, mediaCodecSelector, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, - eventHandler, - eventListener); - } - - /** - * @param context A context. - * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @deprecated Use {@link #MediaCodecAudioRenderer(Context, MediaCodecSelector, boolean, Handler, - * AudioRendererEventListener, AudioSink)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public MediaCodecAudioRenderer( - Context context, - MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, - @Nullable Handler eventHandler, - @Nullable AudioRendererEventListener eventListener) { - this( - context, - mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, eventHandler, eventListener, (AudioCapabilities) null); @@ -196,13 +125,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media /** * @param context A context. * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. @@ -210,17 +132,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media * default capabilities (no encoded audio passthrough support) should be assumed. * @param audioProcessors Optional {@link AudioProcessor}s that will process PCM audio before * output. - * @deprecated Use {@link #MediaCodecAudioRenderer(Context, MediaCodecSelector, boolean, Handler, - * AudioRendererEventListener, AudioSink)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. */ - @Deprecated - @SuppressWarnings("deprecation") public MediaCodecAudioRenderer( Context context, MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, @Nullable AudioCapabilities audioCapabilities, @@ -228,8 +143,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media this( context, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, eventHandler, eventListener, new DefaultAudioSink(audioCapabilities, audioProcessors)); @@ -238,36 +151,20 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media /** * @param context A context. * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. * @param audioSink The sink to which audio will be output. - * @deprecated Use {@link #MediaCodecAudioRenderer(Context, MediaCodecSelector, boolean, Handler, - * AudioRendererEventListener, AudioSink)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. */ - @Deprecated - @SuppressWarnings("deprecation") public MediaCodecAudioRenderer( Context context, MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, AudioSink audioSink) { this( context, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, /* enableDecoderFallback= */ false, eventHandler, eventListener, @@ -285,7 +182,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media * @param eventListener A listener of events. May be null if delivery of events is not required. * @param audioSink The sink to which audio will be output. */ - @SuppressWarnings("deprecation") public MediaCodecAudioRenderer( Context context, MediaCodecSelector mediaCodecSelector, @@ -293,53 +189,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, AudioSink audioSink) { - this( - context, - mediaCodecSelector, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, - enableDecoderFallback, - eventHandler, - eventListener, - audioSink); - } - - /** - * @param context A context. - * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder - * initialization fails. This may result in using a decoder that is slower/less efficient than - * the primary decoder. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param audioSink The sink to which audio will be output. - * @deprecated Use {@link #MediaCodecAudioRenderer(Context, MediaCodecSelector, boolean, Handler, - * AudioRendererEventListener, AudioSink)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. - */ - @Deprecated - public MediaCodecAudioRenderer( - Context context, - MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, - boolean enableDecoderFallback, - @Nullable Handler eventHandler, - @Nullable AudioRendererEventListener eventListener, - AudioSink audioSink) { super( C.TRACK_TYPE_AUDIO, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, enableDecoderFallback, /* assumedMinimumCodecOperatingRate= */ 44100); this.context = context.getApplicationContext(); @@ -352,7 +204,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media @Capabilities protected int supportsFormat( MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, Format format) throws DecoderQueryException { String mimeType = format.sampleMimeType; @@ -362,10 +213,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media @TunnelingSupport int tunnelingSupport = Util.SDK_INT >= 21 ? TUNNELING_SUPPORTED : TUNNELING_NOT_SUPPORTED; boolean supportsFormatDrm = - format.drmInitData == null - || FrameworkMediaCrypto.class.equals(format.exoMediaCryptoType) - || (format.exoMediaCryptoType == null - && supportsFormatDrm(drmSessionManager, format.drmInitData)); + format.drmInitData == null || FrameworkMediaCrypto.class.equals(format.exoMediaCryptoType); if (supportsFormatDrm && allowPassthrough(format.channelCount, mimeType) && mediaCodecSelector.getPassthroughDecoderInfo() != null) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java index 1bca34479b..0137d6a5b6 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java @@ -36,7 +36,6 @@ import com.google.android.exoplayer2.decoder.SimpleDecoder; import com.google.android.exoplayer2.decoder.SimpleOutputBuffer; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MediaClock; @@ -91,13 +90,10 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements */ private static final int REINITIALIZATION_STATE_WAIT_END_OF_STREAM = 2; - private final DrmSessionManager drmSessionManager; - private final boolean playClearSamplesWithoutKeys; private final EventDispatcher eventDispatcher; private final AudioSink audioSink; private final DecoderInputBuffer flagsOnlyBuffer; - private boolean drmResourcesAcquired; private DecoderCounters decoderCounters; private Format inputFormat; private int encoderDelay; @@ -142,8 +138,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements eventHandler, eventListener, /* audioCapabilities= */ null, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, audioProcessors); } @@ -153,67 +147,27 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements * @param eventListener A listener of events. May be null if delivery of events is not required. * @param audioCapabilities The audio capabilities for playback on this device. May be null if the * default capabilities (no encoded audio passthrough support) should be assumed. - */ - public SimpleDecoderAudioRenderer( - @Nullable Handler eventHandler, - @Nullable AudioRendererEventListener eventListener, - @Nullable AudioCapabilities audioCapabilities) { - this( - eventHandler, - eventListener, - audioCapabilities, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false); - } - - /** - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param audioCapabilities The audio capabilities for playback on this device. May be null if the - * default capabilities (no encoded audio passthrough support) should be assumed. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. * @param audioProcessors Optional {@link AudioProcessor}s that will process audio before output. */ public SimpleDecoderAudioRenderer( @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, @Nullable AudioCapabilities audioCapabilities, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, AudioProcessor... audioProcessors) { - this(eventHandler, eventListener, drmSessionManager, - playClearSamplesWithoutKeys, new DefaultAudioSink(audioCapabilities, audioProcessors)); + this(eventHandler, eventListener, new DefaultAudioSink(audioCapabilities, audioProcessors)); } /** * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. * @param audioSink The sink to which audio will be output. */ public SimpleDecoderAudioRenderer( @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, AudioSink audioSink) { super(C.TRACK_TYPE_AUDIO); - this.drmSessionManager = drmSessionManager; - this.playClearSamplesWithoutKeys = playClearSamplesWithoutKeys; eventDispatcher = new EventDispatcher(eventHandler, eventListener); this.audioSink = audioSink; audioSink.setListener(new AudioSinkListener()); @@ -234,7 +188,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements if (!MimeTypes.isAudio(format.sampleMimeType)) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_TYPE); } - @FormatSupport int formatSupport = supportsFormatInternal(drmSessionManager, format); + @FormatSupport int formatSupport = supportsFormatInternal(format); if (formatSupport <= FORMAT_UNSUPPORTED_DRM) { return RendererCapabilities.create(formatSupport); } @@ -246,13 +200,11 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements /** * Returns the {@link FormatSupport} for the given {@link Format}. * - * @param drmSessionManager The renderer's {@link DrmSessionManager}. * @param format The format, which has an audio {@link Format#sampleMimeType}. * @return The {@link FormatSupport} for this {@link Format}. */ @FormatSupport - protected abstract int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format); + protected abstract int supportsFormatInternal(Format format); /** * Returns whether the sink supports the audio format. @@ -476,8 +428,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements private boolean shouldWaitForKeys(boolean bufferEncrypted) throws ExoPlaybackException { if (decoderDrmSession == null - || (!bufferEncrypted - && (playClearSamplesWithoutKeys || decoderDrmSession.playClearSamplesWithoutKeys()))) { + || (!bufferEncrypted && decoderDrmSession.playClearSamplesWithoutKeys())) { return false; } @DrmSession.State int drmSessionState = decoderDrmSession.getState(); @@ -544,10 +495,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { - if (drmSessionManager != null && !drmResourcesAcquired) { - drmResourcesAcquired = true; - drmSessionManager.prepare(); - } decoderCounters = new DecoderCounters(); eventDispatcher.enabled(decoderCounters); int tunnelingAudioSessionId = getConfiguration().tunnelingAudioSessionId; @@ -596,14 +543,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements } } - @Override - protected void onReset() { - if (drmSessionManager != null && drmResourcesAcquired) { - drmResourcesAcquired = false; - drmSessionManager.release(); - } - } - @Override public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { switch (messageType) { @@ -686,12 +625,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements @SuppressWarnings("unchecked") private void onInputFormatChanged(FormatHolder formatHolder) throws ExoPlaybackException { Format newFormat = Assertions.checkNotNull(formatHolder.format); - if (formatHolder.includesDrmSession) { - setSourceDrmSession((DrmSession) formatHolder.drmSession); - } else { - sourceDrmSession = - getUpdatedSourceDrmSession(inputFormat, newFormat, drmSessionManager, sourceDrmSession); - } + setSourceDrmSession((DrmSession) formatHolder.drmSession); Format oldFormat = inputFormat; inputFormat = newFormat; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index 9389e4cdc8..54891722f4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -38,7 +38,6 @@ import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; import com.google.android.exoplayer2.source.MediaPeriod; @@ -379,8 +378,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { private static final int ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT = 32; private final MediaCodecSelector mediaCodecSelector; - @Nullable private final DrmSessionManager drmSessionManager; - private final boolean playClearSamplesWithoutKeys; private final boolean enableDecoderFallback; private final float assumedMinimumCodecOperatingRate; private final DecoderInputBuffer buffer; @@ -391,7 +388,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { private final long[] pendingOutputStreamOffsetsUs; private final long[] pendingOutputStreamSwitchTimesUs; - private boolean drmResourcesAcquired; @Nullable private Format inputFormat; private Format outputFormat; @Nullable private DrmSession codecDrmSession; @@ -448,13 +444,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { * @param trackType The track type that the renderer handles. One of the {@code C.TRACK_TYPE_*} * constants defined in {@link C}. * @param mediaCodecSelector A decoder selector. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. * @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder * initialization fails. This may result in using a decoder that is less efficient or slower * than the primary decoder. @@ -465,14 +454,10 @@ public abstract class MediaCodecRenderer extends BaseRenderer { public MediaCodecRenderer( int trackType, MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, boolean enableDecoderFallback, float assumedMinimumCodecOperatingRate) { super(trackType); this.mediaCodecSelector = Assertions.checkNotNull(mediaCodecSelector); - this.drmSessionManager = drmSessionManager; - this.playClearSamplesWithoutKeys = playClearSamplesWithoutKeys; this.enableDecoderFallback = enableDecoderFallback; this.assumedMinimumCodecOperatingRate = assumedMinimumCodecOperatingRate; buffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DISABLED); @@ -550,7 +535,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { @Capabilities public final int supportsFormat(Format format) throws ExoPlaybackException { try { - return supportsFormat(mediaCodecSelector, drmSessionManager, format); + return supportsFormat(mediaCodecSelector, format); } catch (DecoderQueryException e) { throw createRendererException(e, format); } @@ -560,7 +545,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { * Returns the {@link Capabilities} for the given {@link Format}. * * @param mediaCodecSelector The decoder selector. - * @param drmSessionManager The renderer's {@link DrmSessionManager}. * @param format The {@link Format}. * @return The {@link Capabilities} for this {@link Format}. * @throws DecoderQueryException If there was an error querying decoders. @@ -568,7 +552,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { @Capabilities protected abstract int supportsFormat( MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, Format format) throws DecoderQueryException; @@ -696,10 +679,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { - if (drmSessionManager != null && !drmResourcesAcquired) { - drmResourcesAcquired = true; - drmSessionManager.prepare(); - } decoderCounters = new DecoderCounters(); } @@ -771,10 +750,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { } finally { setSourceDrmSession(null); } - if (drmSessionManager != null && drmResourcesAcquired) { - drmResourcesAcquired = false; - drmSessionManager.release(); - } } protected void releaseCodec() { @@ -1366,8 +1341,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { private boolean shouldWaitForKeys(boolean bufferEncrypted) throws ExoPlaybackException { if (codecDrmSession == null - || (!bufferEncrypted - && (playClearSamplesWithoutKeys || codecDrmSession.playClearSamplesWithoutKeys()))) { + || (!bufferEncrypted && codecDrmSession.playClearSamplesWithoutKeys())) { return false; } @DrmSession.State int drmSessionState = codecDrmSession.getState(); @@ -1402,12 +1376,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { protected void onInputFormatChanged(FormatHolder formatHolder) throws ExoPlaybackException { waitingForFirstSampleInFormat = true; Format newFormat = Assertions.checkNotNull(formatHolder.format); - if (formatHolder.includesDrmSession) { - setSourceDrmSession((DrmSession) formatHolder.drmSession); - } else { - sourceDrmSession = - getUpdatedSourceDrmSession(inputFormat, newFormat, drmSessionManager, sourceDrmSession); - } + setSourceDrmSession((DrmSession) formatHolder.drmSession); inputFormat = newFormat; if (codec == null) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java index 7a5235a466..1ffea4ad33 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java @@ -96,7 +96,7 @@ public final class MetadataRenderer extends BaseRenderer implements Callback { public int supportsFormat(Format format) { if (decoderFactory.supportsFormat(format)) { return RendererCapabilities.create( - supportsFormatDrm(null, format.drmInitData) ? FORMAT_HANDLED : FORMAT_UNSUPPORTED_DRM); + format.drmInitData == null ? FORMAT_HANDLED : FORMAT_UNSUPPORTED_DRM); } else { return RendererCapabilities.create(FORMAT_UNSUPPORTED_TYPE); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java index d7a6b4a896..e77eb7d88e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java @@ -171,8 +171,7 @@ public final class DownloadHelper { new VideoRendererEventListener() {}, new AudioRendererEventListener() {}, (cues) -> {}, - (metadata) -> {}, - /* drmSessionManager= */ null); + (metadata) -> {}); RendererCapabilities[] capabilities = new RendererCapabilities[renderers.length]; for (int i = 0; i < renderers.length; i++) { capabilities[i] = renderers[i].getCapabilities(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java index 058b1c4526..c9b04d9758 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java @@ -123,7 +123,7 @@ public final class TextRenderer extends BaseRenderer implements Callback { public int supportsFormat(Format format) { if (decoderFactory.supportsFormat(format)) { return RendererCapabilities.create( - supportsFormatDrm(null, format.drmInitData) ? FORMAT_HANDLED : FORMAT_UNSUPPORTED_DRM); + format.drmInitData == null ? FORMAT_HANDLED : FORMAT_UNSUPPORTED_DRM); } else if (MimeTypes.isText(format.sampleMimeType)) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_SUBTYPE); } else { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java index 74dac4f460..e9edc810b8 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java @@ -41,7 +41,6 @@ import com.google.android.exoplayer2.PlayerMessage.Target; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.drm.DrmInitData; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.mediacodec.MediaCodecInfo; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; @@ -49,7 +48,6 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; import com.google.android.exoplayer2.mediacodec.MediaFormatUtil; -import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.MimeTypes; @@ -194,7 +192,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. */ - @SuppressWarnings("deprecation") public MediaCodecVideoRenderer( Context context, MediaCodecSelector mediaCodecSelector, @@ -206,51 +203,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { context, mediaCodecSelector, allowedJoiningTimeMs, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, - eventHandler, - eventListener, - maxDroppedFramesToNotify); - } - - /** - * @param context A context. - * @param mediaCodecSelector A decoder selector. - * @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer - * can attempt to seamlessly join an ongoing playback. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between - * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. - * @deprecated Use {@link #MediaCodecVideoRenderer(Context, MediaCodecSelector, long, boolean, - * Handler, VideoRendererEventListener, int)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. - */ - @Deprecated - @SuppressWarnings("deprecation") - public MediaCodecVideoRenderer( - Context context, - MediaCodecSelector mediaCodecSelector, - long allowedJoiningTimeMs, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, - @Nullable Handler eventHandler, - @Nullable VideoRendererEventListener eventListener, - int maxDroppedFramesToNotify) { - this( - context, - mediaCodecSelector, - allowedJoiningTimeMs, - drmSessionManager, - playClearSamplesWithoutKeys, /* enableDecoderFallback= */ false, eventHandler, eventListener, @@ -271,7 +223,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. */ - @SuppressWarnings("deprecation") public MediaCodecVideoRenderer( Context context, MediaCodecSelector mediaCodecSelector, @@ -280,58 +231,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { @Nullable Handler eventHandler, @Nullable VideoRendererEventListener eventListener, int maxDroppedFramesToNotify) { - this( - context, - mediaCodecSelector, - allowedJoiningTimeMs, - /* drmSessionManager= */ null, - /* playClearSamplesWithoutKeys= */ false, - enableDecoderFallback, - eventHandler, - eventListener, - maxDroppedFramesToNotify); - } - - /** - * @param context A context. - * @param mediaCodecSelector A decoder selector. - * @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer - * can attempt to seamlessly join an ongoing playback. - * @param drmSessionManager For use with encrypted content. May be null if support for encrypted - * content is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. - * @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder - * initialization fails. This may result in using a decoder that is slower/less efficient than - * the primary decoder. - * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be - * null if delivery of events is not required. - * @param eventListener A listener of events. May be null if delivery of events is not required. - * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between - * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. - * @deprecated Use {@link #MediaCodecVideoRenderer(Context, MediaCodecSelector, long, boolean, - * Handler, VideoRendererEventListener, int)} instead, and pass DRM-related parameters to the - * {@link MediaSource} factories. - */ - @Deprecated - public MediaCodecVideoRenderer( - Context context, - MediaCodecSelector mediaCodecSelector, - long allowedJoiningTimeMs, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, - boolean enableDecoderFallback, - @Nullable Handler eventHandler, - @Nullable VideoRendererEventListener eventListener, - int maxDroppedFramesToNotify) { super( C.TRACK_TYPE_VIDEO, mediaCodecSelector, - drmSessionManager, - playClearSamplesWithoutKeys, enableDecoderFallback, /* assumedMinimumCodecOperatingRate= */ 30); this.allowedJoiningTimeMs = allowedJoiningTimeMs; @@ -353,7 +255,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { @Capabilities protected int supportsFormat( MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, Format format) throws DecoderQueryException { String mimeType = format.sampleMimeType; @@ -382,10 +283,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { return RendererCapabilities.create(FORMAT_UNSUPPORTED_SUBTYPE); } boolean supportsFormatDrm = - drmInitData == null - || FrameworkMediaCrypto.class.equals(format.exoMediaCryptoType) - || (format.exoMediaCryptoType == null - && supportsFormatDrm(drmSessionManager, drmInitData)); + drmInitData == null || FrameworkMediaCrypto.class.equals(format.exoMediaCryptoType); if (!supportsFormatDrm) { return RendererCapabilities.create(FORMAT_UNSUPPORTED_DRM); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java index 6d8147b012..bb77367d37 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java @@ -26,13 +26,11 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.FormatHolder; -import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.SimpleDecoder; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.TimedValueQueue; @@ -71,13 +69,10 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { private final long allowedJoiningTimeMs; private final int maxDroppedFramesToNotify; - private final boolean playClearSamplesWithoutKeys; private final EventDispatcher eventDispatcher; private final TimedValueQueue formatQueue; private final DecoderInputBuffer flagsOnlyBuffer; - private final DrmSessionManager drmSessionManager; - private boolean drmResourcesAcquired; private Format inputFormat; private Format outputFormat; private SimpleDecoder< @@ -126,26 +121,15 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { * @param eventListener A listener of events. May be null if delivery of events is not required. * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. - * @param drmSessionManager For use with encrypted media. May be null if support for encrypted - * media is not required. - * @param playClearSamplesWithoutKeys Encrypted media may contain clear (un-encrypted) regions. - * For example a media file may start with a short clear region so as to allow playback to - * begin in parallel with key acquisition. This parameter specifies whether the renderer is - * permitted to play clear regions of encrypted media files before {@code drmSessionManager} - * has obtained the keys necessary to decrypt encrypted regions of the media. */ protected SimpleDecoderVideoRenderer( long allowedJoiningTimeMs, @Nullable Handler eventHandler, @Nullable VideoRendererEventListener eventListener, - int maxDroppedFramesToNotify, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys) { + int maxDroppedFramesToNotify) { super(C.TRACK_TYPE_VIDEO); this.allowedJoiningTimeMs = allowedJoiningTimeMs; this.maxDroppedFramesToNotify = maxDroppedFramesToNotify; - this.drmSessionManager = drmSessionManager; - this.playClearSamplesWithoutKeys = playClearSamplesWithoutKeys; joiningDeadlineMs = C.TIME_UNSET; clearReportedVideoSize(); formatQueue = new TimedValueQueue<>(); @@ -157,12 +141,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { // BaseRenderer implementation. - @Override - @Capabilities - public final int supportsFormat(Format format) { - return supportsFormatInternal(drmSessionManager, format); - } - @Override public void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (outputStreamEnded) { @@ -238,10 +216,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { - if (drmSessionManager != null && !drmResourcesAcquired) { - drmResourcesAcquired = true; - drmSessionManager.prepare(); - } decoderCounters = new DecoderCounters(); eventDispatcher.enabled(decoderCounters); } @@ -291,14 +265,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { } } - @Override - protected void onReset() { - if (drmSessionManager != null && drmResourcesAcquired) { - drmResourcesAcquired = false; - drmSessionManager.release(); - } - } - @Override protected void onStreamChanged(Format[] formats, long offsetUs) throws ExoPlaybackException { outputStreamOffsetUs = offsetUs; @@ -371,12 +337,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { protected void onInputFormatChanged(FormatHolder formatHolder) throws ExoPlaybackException { waitingForFirstSampleInFormat = true; Format newFormat = Assertions.checkNotNull(formatHolder.format); - if (formatHolder.includesDrmSession) { - setSourceDrmSession((DrmSession) formatHolder.drmSession); - } else { - sourceDrmSession = - getUpdatedSourceDrmSession(inputFormat, newFormat, drmSessionManager, sourceDrmSession); - } + setSourceDrmSession((DrmSession) formatHolder.drmSession); inputFormat = newFormat; if (sourceDrmSession != decoderDrmSession) { @@ -511,18 +472,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { } } - /** - * Returns the {@link Capabilities} for the given {@link Format}. - * - * @param drmSessionManager The renderer's {@link DrmSessionManager}. - * @param format The format, which has a video {@link Format#sampleMimeType}. - * @return The {@link Capabilities} for this {@link Format}. - * @see RendererCapabilities#supportsFormat(Format) - */ - @Capabilities - protected abstract int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format); - /** * Creates a decoder for the given format. * @@ -893,9 +842,9 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { } private boolean shouldWaitForKeys(boolean bufferEncrypted) throws ExoPlaybackException { + DrmSession decoderDrmSession = this.decoderDrmSession; if (decoderDrmSession == null - || (!bufferEncrypted - && (playClearSamplesWithoutKeys || decoderDrmSession.playClearSamplesWithoutKeys()))) { + || (!bufferEncrypted && decoderDrmSession.playClearSamplesWithoutKeys())) { return false; } @DrmSession.State int drmSessionState = decoderDrmSession.getState(); diff --git a/library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java b/library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java index dc13341722..33fea63e44 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java @@ -1167,8 +1167,7 @@ public final class AnalyticsCollectorTest { videoRendererEventListener, audioRendererEventListener, textRendererOutput, - metadataRendererOutput, - drmSessionManager) -> + metadataRendererOutput) -> new Renderer[] { new FakeVideoRenderer(eventHandler, videoRendererEventListener), new FakeAudioRenderer(eventHandler, audioRendererEventListener) diff --git a/library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java index fdce8e9978..dc8787aac7 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java @@ -32,7 +32,6 @@ import com.google.android.exoplayer2.RendererConfiguration; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.SimpleDecoder; import com.google.android.exoplayer2.decoder.SimpleOutputBuffer; -import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.testutil.FakeSampleStream; import com.google.android.exoplayer2.util.MimeTypes; @@ -56,11 +55,10 @@ public class SimpleDecoderAudioRendererTest { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); audioRenderer = - new SimpleDecoderAudioRenderer(null, null, null, false, mockAudioSink) { + new SimpleDecoderAudioRenderer(null, null, mockAudioSink) { @Override @FormatSupport - protected int supportsFormatInternal( - @Nullable DrmSessionManager drmSessionManager, Format format) { + protected int supportsFormatInternal(Format format) { return FORMAT_HANDLED; } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java b/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java index d18bc86dae..b71c285cdd 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java @@ -123,7 +123,7 @@ public class DownloadHelperTest { FakeRenderer audioRenderer = new FakeRenderer(audioFormatUs, audioFormatZh); FakeRenderer textRenderer = new FakeRenderer(textFormatUs, textFormatZh); RenderersFactory renderersFactory = - (handler, videoListener, audioListener, metadata, text, drm) -> + (handler, videoListener, audioListener, metadata, text) -> new Renderer[] {textRenderer, audioRenderer, videoRenderer}; downloadHelper = diff --git a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java index 107bf7c790..5ecdba11eb 100644 --- a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java +++ b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java @@ -35,11 +35,11 @@ public final class DownloadHelperTest { ApplicationProvider.getApplicationContext(), Uri.parse("http://uri"), new FakeDataSource.Factory(), - (handler, videoListener, audioListener, text, metadata, drm) -> new Renderer[0]); + (handler, videoListener, audioListener, text, metadata) -> new Renderer[0]); DownloadHelper.forDash( Uri.parse("http://uri"), new FakeDataSource.Factory(), - (handler, videoListener, audioListener, text, metadata, drm) -> new Renderer[0], + (handler, videoListener, audioListener, text, metadata) -> new Renderer[0], /* drmSessionManager= */ DrmSessionManager.getDummyDrmSessionManager(), DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT); } diff --git a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java index 3c81074c25..f1d0b8ab8a 100644 --- a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java +++ b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java @@ -34,11 +34,11 @@ public final class DownloadHelperTest { ApplicationProvider.getApplicationContext(), Uri.parse("http://uri"), new FakeDataSource.Factory(), - (handler, videoListener, audioListener, text, metadata, drm) -> new Renderer[0]); + (handler, videoListener, audioListener, text, metadata) -> new Renderer[0]); DownloadHelper.forHls( Uri.parse("http://uri"), new FakeDataSource.Factory(), - (handler, videoListener, audioListener, text, metadata, drm) -> new Renderer[0], + (handler, videoListener, audioListener, text, metadata) -> new Renderer[0], /* drmSessionManager= */ null, DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT); } diff --git a/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java b/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java index a103f89cec..b6d29d8b72 100644 --- a/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java +++ b/library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java @@ -34,11 +34,11 @@ public final class DownloadHelperTest { ApplicationProvider.getApplicationContext(), Uri.parse("http://uri"), new FakeDataSource.Factory(), - (handler, videoListener, audioListener, text, metadata, drm) -> new Renderer[0]); + (handler, videoListener, audioListener, text, metadata) -> new Renderer[0]); DownloadHelper.forSmoothStreaming( Uri.parse("http://uri"), new FakeDataSource.Factory(), - (handler, videoListener, audioListener, text, metadata, drm) -> new Renderer[0], + (handler, videoListener, audioListener, text, metadata) -> new Renderer[0], /* drmSessionManager= */ null, DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT); } diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java index 1b88019d22..6bfef1d1b4 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java @@ -270,7 +270,7 @@ import java.util.List; C.WIDEVINE_UUID, frameworkMediaDrm, drmCallback, - /* optionalKeyRequestParameters= */ null, + /* keyRequestParameters= */ null, /* multiSession= */ false, DefaultDrmSessionManager.INITIAL_DRM_REQUEST_RETRY_COUNT); if (!useL1Widevine) { diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java index 872a7baadb..b6cbfbf6d7 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java @@ -27,8 +27,6 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.FormatHolder; import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; -import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; import com.google.android.exoplayer2.mediacodec.MediaCodecInfo; import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.video.MediaCodecVideoRenderer; @@ -53,8 +51,6 @@ import java.util.ArrayList; Context context, @ExtensionRendererMode int extensionRendererMode, MediaCodecSelector mediaCodecSelector, - @Nullable DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, boolean enableDecoderFallback, Handler eventHandler, VideoRendererEventListener eventListener, @@ -65,8 +61,6 @@ import java.util.ArrayList; context, mediaCodecSelector, allowedVideoJoiningTimeMs, - drmSessionManager, - playClearSamplesWithoutKeys, eventHandler, eventListener, MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY)); @@ -92,8 +86,6 @@ import java.util.ArrayList; Context context, MediaCodecSelector mediaCodecSelector, long allowedJoiningTimeMs, - DrmSessionManager drmSessionManager, - boolean playClearSamplesWithoutKeys, Handler eventHandler, VideoRendererEventListener eventListener, int maxDroppedFrameCountToNotify) { @@ -101,8 +93,6 @@ import java.util.ArrayList; context, mediaCodecSelector, allowedJoiningTimeMs, - drmSessionManager, - playClearSamplesWithoutKeys, eventHandler, eventListener, maxDroppedFrameCountToNotify); diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java index 3720b8a0b3..d865ea0090 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java @@ -93,7 +93,6 @@ public final class DefaultRenderersFactoryAsserts { new VideoRendererEventListener() {}, new AudioRendererEventListener() {}, (List cues) -> {}, - (Metadata metadata) -> {}, - /* drmSessionManager= */ null); + (Metadata metadata) -> {}); } } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java index ac5126906c..ca61312f26 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java @@ -371,8 +371,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc videoRendererEventListener, audioRendererEventListener, textRendererOutput, - metadataRendererOutput, - drmSessionManager) -> renderers; + metadataRendererOutput) -> renderers; } if (loadControl == null) { loadControl = new DefaultLoadControl();