Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
5c3c8034
authored
Feb 17, 2020
by
aquilescanta
Committed by
Ian Baker
Feb 17, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Remove DRM management from Renderers
PiperOrigin-RevId: 295569075
parent
d3f806fd
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
60 additions
and
872 deletions
RELEASENOTES.md
extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java
extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java
library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java
library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java
library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java
library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java
playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java
playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java
RELEASENOTES.md
View file @
5c3c8034
...
...
@@ -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
...
...
extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
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
);
...
...
extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
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
;
}
...
...
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
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
;
...
...
extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
AudioProcessor
...
audioProcessors
)
{
super
(
eventHandler
,
eventListener
,
null
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
audioProcessors
);
}
@Override
@FormatSupport
protected
int
supportsFormatInternal
(
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
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
;
...
...
extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
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
<
ExoMediaCrypto
>
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
<
ExoMediaCrypto
>
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
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
View file @
5c3c8034
...
...
@@ -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
);
}
}
library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
drmSessionManager
;
@ExtensionRendererMode
private
int
extensionRendererMode
;
private
long
allowedVideoJoiningTimeMs
;
private
boolean
playClearSamplesWithoutKeys
;
private
boolean
enableDecoderFallback
;
private
MediaCodecSelector
mediaCodecSelector
;
@MediaCodecRenderer
.
MediaCodecOperationMode
private
int
mediaCodecOperationMode
;
...
...
@@ -106,17 +101,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
}
/**
* @deprecated Use {@link #DefaultRenderersFactory(Context)} and pass {@link DrmSessionManager}
* directly to {@link SimpleExoPlayer.Builder}.
*/
@Deprecated
@SuppressWarnings
(
"deprecation"
)
public
DefaultRenderersFactory
(
Context
context
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
)
{
this
(
context
,
drmSessionManager
,
EXTENSION_RENDERER_MODE_OFF
);
}
/**
* @deprecated Use {@link #DefaultRenderersFactory(Context)} and {@link
* #setExtensionRendererMode(int)}.
*/
...
...
@@ -128,47 +112,17 @@ public class DefaultRenderersFactory implements RenderersFactory {
}
/**
* @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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
drmSessionManager
,
@ExtensionRendererMode
int
extensionRendererMode
,
long
allowedVideoJoiningTimeMs
)
{
this
.
context
=
context
;
this
.
extensionRendererMode
=
extensionRendererMode
;
this
.
allowedVideoJoiningTimeMs
=
allowedVideoJoiningTimeMs
;
this
.
drmSessionManager
=
drmSessionManager
;
mediaCodecSelector
=
MediaCodecSelector
.
DEFAULT
;
}
...
...
@@ -204,25 +158,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
}
/**
* 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.
*
* <p>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
<
FrameworkMediaCrypto
>
drmSessionManager
)
{
if
(
drmSessionManager
==
null
)
{
drmSessionManager
=
this
.
drmSessionManager
;
}
MetadataOutput
metadataRendererOutput
)
{
ArrayList
<
Renderer
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
drmSessionManager
)
{
return
newSimpleInstance
(
context
,
renderersFactory
,
trackSelector
,
new
DefaultLoadControl
(),
drmSessionManager
);
}
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
@Deprecated
@SuppressWarnings
(
"deprecation"
)
...
...
@@ -153,32 +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
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
Context
context
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
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 Use {@link SimpleExoPlayer.Builder} instead. */
@Deprecated
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
...
...
@@ -186,24 +115,18 @@ public final class ExoPlayerFactory {
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
drmSessionManager
,
BandwidthMeter
bandwidthMeter
,
AnalyticsCollector
analyticsCollector
,
Looper
looper
)
{
...
...
@@ -294,7 +198,6 @@ public final class ExoPlayerFactory {
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
,
bandwidthMeter
,
analyticsCollector
,
/* useLazyPreparation= */
true
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
drmSessionManager
);
MetadataOutput
metadataRendererOutput
);
}
library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java
View file @
5c3c8034
...
...
@@ -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,42 +367,11 @@ 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
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
BandwidthMeter
bandwidthMeter
,
AnalyticsCollector
analyticsCollector
,
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
<
FrameworkMediaCrypto
>
drmSessionManager
,
BandwidthMeter
bandwidthMeter
,
AnalyticsCollector
analyticsCollector
,
boolean
useLazyPreparation
,
...
...
@@ -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
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
AudioSink
audioSink
)
{
this
(
context
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
/* enableDecoderFallback= */
false
,
eventHandler
,
eventListener
,
...
...
@@ -285,52 +182,9 @@ 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
,
boolean
enableDecoderFallback
,
@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
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
...
...
@@ -338,8 +192,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
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
<
FrameworkMediaCrypto
>
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
)
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
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
<
ExoMediaCrypto
>
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
<
ExoMediaCrypto
>
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
<
ExoMediaCrypto
>
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
;
...
...
@@ -597,14 +544,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
)
{
case
MSG_SET_VOLUME:
...
...
@@ -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
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
}
else
{
sourceDrmSession
=
getUpdatedSourceDrmSession
(
inputFormat
,
newFormat
,
drmSessionManager
,
sourceDrmSession
);
}
setSourceDrmSession
((
DrmSession
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
Format
oldFormat
=
inputFormat
;
inputFormat
=
newFormat
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>)
formatHolder
.
drmSession
);
}
else
{
sourceDrmSession
=
getUpdatedSourceDrmSession
(
inputFormat
,
newFormat
,
drmSessionManager
,
sourceDrmSession
);
}
setSourceDrmSession
((
DrmSession
<
FrameworkMediaCrypto
>)
formatHolder
.
drmSession
);
inputFormat
=
newFormat
;
if
(
codec
==
null
)
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java
View file @
5c3c8034
...
...
@@ -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
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
View file @
5c3c8034
...
...
@@ -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
();
...
...
library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java
View file @
5c3c8034
...
...
@@ -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
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
@Nullable
Handler
eventHandler
,
@Nullable
VideoRendererEventListener
eventListener
,
int
maxDroppedFramesToNotify
)
{
this
(
context
,
mediaCodecSelector
,
allowedJoiningTimeMs
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
/* enableDecoderFallback= */
false
,
eventHandler
,
eventListener
,
...
...
@@ -271,58 +223,10 @@ 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
,
long
allowedJoiningTimeMs
,
boolean
enableDecoderFallback
,
@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
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
@Nullable
Handler
eventHandler
,
@Nullable
VideoRendererEventListener
eventListener
,
...
...
@@ -330,8 +234,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
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
<
FrameworkMediaCrypto
>
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
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java
View file @
5c3c8034
...
...
@@ -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
<
Format
>
formatQueue
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
final
DrmSessionManager
<
ExoMediaCrypto
>
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
<
ExoMediaCrypto
>
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
<>();
...
...
@@ -158,12 +142,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
)
{
return
;
...
...
@@ -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
);
}
...
...
@@ -292,14 +266,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
;
super
.
onStreamChanged
(
formats
,
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
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
}
else
{
sourceDrmSession
=
getUpdatedSourceDrmSession
(
inputFormat
,
newFormat
,
drmSessionManager
,
sourceDrmSession
);
}
setSourceDrmSession
((
DrmSession
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
inputFormat
=
newFormat
;
if
(
sourceDrmSession
!=
decoderDrmSession
)
{
...
...
@@ -512,18 +473,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
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
);
/**
* Creates a decoder for the given format.
*
* @param format The format for which a decoder is required.
...
...
@@ -893,9 +842,9 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
}
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
DrmSession
<
ExoMediaCrypto
>
decoderDrmSession
=
this
.
decoderDrmSession
;
if
(
decoderDrmSession
==
null
||
(!
bufferEncrypted
&&
(
playClearSamplesWithoutKeys
||
decoderDrmSession
.
playClearSamplesWithoutKeys
())))
{
||
(!
bufferEncrypted
&&
decoderDrmSession
.
playClearSamplesWithoutKeys
()))
{
return
false
;
}
@DrmSession
.
State
int
drmSessionState
=
decoderDrmSession
.
getState
();
...
...
library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java
View file @
5c3c8034
...
...
@@ -1167,8 +1167,7 @@ public final class AnalyticsCollectorTest {
videoRendererEventListener
,
audioRendererEventListener
,
textRendererOutput
,
metadataRendererOutput
,
drmSessionManager
)
->
metadataRendererOutput
)
->
new
Renderer
[]
{
new
FakeVideoRenderer
(
eventHandler
,
videoRendererEventListener
),
new
FakeAudioRenderer
(
eventHandler
,
audioRendererEventListener
)
...
...
library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java
View file @
5c3c8034
...
...
@@ -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
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
protected
int
supportsFormatInternal
(
Format
format
)
{
return
FORMAT_HANDLED
;
}
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
View file @
5c3c8034
...
...
@@ -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
=
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java
View file @
5c3c8034
...
...
@@ -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
);
}
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java
View file @
5c3c8034
...
...
@@ -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
);
}
...
...
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java
View file @
5c3c8034
...
...
@@ -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
);
}
...
...
playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java
View file @
5c3c8034
...
...
@@ -270,7 +270,7 @@ import java.util.List;
C
.
WIDEVINE_UUID
,
frameworkMediaDrm
,
drmCallback
,
/*
optionalK
eyRequestParameters= */
null
,
/*
k
eyRequestParameters= */
null
,
/* multiSession= */
false
,
DefaultDrmSessionManager
.
INITIAL_DRM_REQUEST_RETRY_COUNT
);
if
(!
useL1Widevine
)
{
...
...
playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java
View file @
5c3c8034
...
...
@@ -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
<
FrameworkMediaCrypto
>
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
<
FrameworkMediaCrypto
>
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
);
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java
View file @
5c3c8034
...
...
@@ -93,7 +93,6 @@ public final class DefaultRenderersFactoryAsserts {
new
VideoRendererEventListener
()
{},
new
AudioRendererEventListener
()
{},
(
List
<
Cue
>
cues
)
->
{},
(
Metadata
metadata
)
->
{},
/* drmSessionManager= */
null
);
(
Metadata
metadata
)
->
{});
}
}
testutils/src/main/java/com/google/android/exoplayer2/testutil/ExoPlayerTestRunner.java
View file @
5c3c8034
...
...
@@ -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
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment