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 @@
...
@@ -46,7 +46,11 @@
[
background
](
https://www.w3.org/TR/webvtt1/#default-text-background
)
colors
[
background
](
https://www.w3.org/TR/webvtt1/#default-text-background
)
colors
(
[
PR #4178
](
https://github.com/google/ExoPlayer/pull/4178
)
,
(
[
PR #4178
](
https://github.com/google/ExoPlayer/pull/4178
)
,
[
issue #6581
](
https://github.com/google/ExoPlayer/issues/6581
)
).
[
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
*
Downloads: Merge downloads in
`SegmentDownloader`
to improve overall download
speed (
[
#5978
](
https://github.com/google/ExoPlayer/issues/5978
)
).
speed (
[
#5978
](
https://github.com/google/ExoPlayer/issues/5978
)
).
*
MP3: Add
`IndexSeeker`
for accurate seeks in VBR streams
*
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;
...
@@ -27,7 +27,6 @@ import com.google.android.exoplayer2.Format;
import
com.google.android.exoplayer2.PlayerMessage.Target
;
import
com.google.android.exoplayer2.PlayerMessage.Target
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.decoder.SimpleDecoder
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.TraceUtil
;
import
com.google.android.exoplayer2.util.TraceUtil
;
...
@@ -121,13 +120,7 @@ public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer {
...
@@ -121,13 +120,7 @@ public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer {
int
threads
,
int
threads
,
int
numInputBuffers
,
int
numInputBuffers
,
int
numOutputBuffers
)
{
int
numOutputBuffers
)
{
super
(
super
(
allowedJoiningTimeMs
,
eventHandler
,
eventListener
,
maxDroppedFramesToNotify
);
allowedJoiningTimeMs
,
eventHandler
,
eventListener
,
maxDroppedFramesToNotify
,
/* drmSessionManager= */
null
,
/* playClearSamplesWithoutKeys= */
false
);
this
.
threads
=
threads
;
this
.
threads
=
threads
;
this
.
numInputBuffers
=
numInputBuffers
;
this
.
numInputBuffers
=
numInputBuffers
;
this
.
numOutputBuffers
=
numOutputBuffers
;
this
.
numOutputBuffers
=
numOutputBuffers
;
...
@@ -135,13 +128,12 @@ public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer {
...
@@ -135,13 +128,12 @@ public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer {
@Override
@Override
@Capabilities
@Capabilities
protected
int
supportsFormatInternal
(
public
final
int
supportsFormat
(
Format
format
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
if
(!
MimeTypes
.
VIDEO_AV1
.
equalsIgnoreCase
(
format
.
sampleMimeType
)
if
(!
MimeTypes
.
VIDEO_AV1
.
equalsIgnoreCase
(
format
.
sampleMimeType
)
||
!
Gav1Library
.
isAvailable
())
{
||
!
Gav1Library
.
isAvailable
())
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
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_UNSUPPORTED_DRM
);
}
}
return
RendererCapabilities
.
create
(
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
);
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;
...
@@ -18,14 +18,12 @@ package com.google.android.exoplayer2.ext.ffmpeg;
import
android.os.Handler
;
import
android.os.Handler
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioSink
;
import
com.google.android.exoplayer2.audio.AudioSink
;
import
com.google.android.exoplayer2.audio.DefaultAudioSink
;
import
com.google.android.exoplayer2.audio.DefaultAudioSink
;
import
com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -85,22 +83,19 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer {
...
@@ -85,22 +83,19 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer {
super
(
super
(
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
/* drmSessionManager= */
null
,
/* playClearSamplesWithoutKeys= */
false
,
audioSink
);
audioSink
);
this
.
enableFloatOutput
=
enableFloatOutput
;
this
.
enableFloatOutput
=
enableFloatOutput
;
}
}
@Override
@Override
@FormatSupport
@FormatSupport
protected
int
supportsFormatInternal
(
protected
int
supportsFormatInternal
(
Format
format
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
Assertions
.
checkNotNull
(
format
.
sampleMimeType
);
Assertions
.
checkNotNull
(
format
.
sampleMimeType
);
if
(!
FfmpegLibrary
.
isAvailable
())
{
if
(!
FfmpegLibrary
.
isAvailable
())
{
return
FORMAT_UNSUPPORTED_TYPE
;
return
FORMAT_UNSUPPORTED_TYPE
;
}
else
if
(!
FfmpegLibrary
.
supportsFormat
(
format
.
sampleMimeType
)
||
!
isOutputSupported
(
format
))
{
}
else
if
(!
FfmpegLibrary
.
supportsFormat
(
format
.
sampleMimeType
)
||
!
isOutputSupported
(
format
))
{
return
FORMAT_UNSUPPORTED_SUBTYPE
;
return
FORMAT_UNSUPPORTED_SUBTYPE
;
}
else
if
(
!
supportsFormatDrm
(
drmSessionManager
,
format
.
drmInitData
)
)
{
}
else
if
(
format
.
drmInitData
!=
null
&&
format
.
exoMediaCryptoType
==
null
)
{
return
FORMAT_UNSUPPORTED_DRM
;
return
FORMAT_UNSUPPORTED_DRM
;
}
else
{
}
else
{
return
FORMAT_HANDLED
;
return
FORMAT_HANDLED
;
...
@@ -109,7 +104,7 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer {
...
@@ -109,7 +104,7 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer {
@Override
@Override
@AdaptiveSupport
@AdaptiveSupport
public
final
int
supportsMixedMimeTypeAdaptation
()
throws
ExoPlaybackException
{
public
final
int
supportsMixedMimeTypeAdaptation
()
{
return
ADAPTIVE_NOT_SEAMLESS
;
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;
...
@@ -23,7 +23,6 @@ import com.google.android.exoplayer2.audio.AudioProcessor;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioSink
;
import
com.google.android.exoplayer2.audio.AudioSink
;
import
com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.extractor.FlacStreamMetadata
;
import
com.google.android.exoplayer2.extractor.FlacStreamMetadata
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
...
@@ -69,15 +68,12 @@ public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer {
...
@@ -69,15 +68,12 @@ public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer {
super
(
super
(
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
/* drmSessionManager= */
null
,
/* playClearSamplesWithoutKeys= */
false
,
audioSink
);
audioSink
);
}
}
@Override
@Override
@FormatSupport
@FormatSupport
protected
int
supportsFormatInternal
(
protected
int
supportsFormatInternal
(
Format
format
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
if
(!
FlacLibrary
.
isAvailable
()
if
(!
FlacLibrary
.
isAvailable
()
||
!
MimeTypes
.
AUDIO_FLAC
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
||
!
MimeTypes
.
AUDIO_FLAC
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
return
FORMAT_UNSUPPORTED_TYPE
;
return
FORMAT_UNSUPPORTED_TYPE
;
...
@@ -99,7 +95,7 @@ public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer {
...
@@ -99,7 +95,7 @@ public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer {
}
}
if
(!
supportsOutput
(
format
.
channelCount
,
pcmEncoding
))
{
if
(!
supportsOutput
(
format
.
channelCount
,
pcmEncoding
))
{
return
FORMAT_UNSUPPORTED_SUBTYPE
;
return
FORMAT_UNSUPPORTED_SUBTYPE
;
}
else
if
(
!
supportsFormatDrm
(
drmSessionManager
,
format
.
drmInitData
)
)
{
}
else
if
(
format
.
drmInitData
!=
null
&&
format
.
exoMediaCryptoType
==
null
)
{
return
FORMAT_UNSUPPORTED_DRM
;
return
FORMAT_UNSUPPORTED_DRM
;
}
else
{
}
else
{
return
FORMAT_HANDLED
;
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;
...
@@ -22,9 +22,7 @@ import com.google.android.exoplayer2.Format;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
/** Decodes and renders audio using the native Opus decoder. */
/** Decodes and renders audio using the native Opus decoder. */
...
@@ -55,42 +53,12 @@ public class LibopusAudioRenderer extends SimpleDecoderAudioRenderer {
...
@@ -55,42 +53,12 @@ public class LibopusAudioRenderer extends SimpleDecoderAudioRenderer {
super
(
eventHandler
,
eventListener
,
audioProcessors
);
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
@Override
@FormatSupport
@FormatSupport
protected
int
supportsFormatInternal
(
protected
int
supportsFormatInternal
(
Format
format
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
boolean
drmIsSupported
=
boolean
drmIsSupported
=
format
.
drmInitData
==
null
format
.
drmInitData
==
null
||
OpusLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
)
||
OpusLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
);
||
(
format
.
exoMediaCryptoType
==
null
&&
supportsFormatDrm
(
drmSessionManager
,
format
.
drmInitData
));
if
(!
OpusLibrary
.
isAvailable
()
if
(!
OpusLibrary
.
isAvailable
()
||
!
MimeTypes
.
AUDIO_OPUS
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
||
!
MimeTypes
.
AUDIO_OPUS
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
return
FORMAT_UNSUPPORTED_TYPE
;
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;
...
@@ -27,9 +27,7 @@ import com.google.android.exoplayer2.Format;
import
com.google.android.exoplayer2.PlayerMessage.Target
;
import
com.google.android.exoplayer2.PlayerMessage.Target
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.decoder.SimpleDecoder
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.TraceUtil
;
import
com.google.android.exoplayer2.util.TraceUtil
;
import
com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer
;
import
com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer
;
...
@@ -101,45 +99,6 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
...
@@ -101,45 +99,6 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
maxDroppedFramesToNotify
,
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
(),
getRuntime
().
availableProcessors
(),
/* numInputBuffers= */
4
,
/* numInputBuffers= */
4
,
/* numOutputBuffers= */
4
);
/* numOutputBuffers= */
4
);
...
@@ -166,58 +125,7 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
...
@@ -166,58 +125,7 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
int
threads
,
int
threads
,
int
numInputBuffers
,
int
numInputBuffers
,
int
numOutputBuffers
)
{
int
numOutputBuffers
)
{
this
(
super
(
allowedJoiningTimeMs
,
eventHandler
,
eventListener
,
maxDroppedFramesToNotify
);
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
);
this
.
threads
=
threads
;
this
.
threads
=
threads
;
this
.
numInputBuffers
=
numInputBuffers
;
this
.
numInputBuffers
=
numInputBuffers
;
this
.
numOutputBuffers
=
numOutputBuffers
;
this
.
numOutputBuffers
=
numOutputBuffers
;
...
@@ -225,16 +133,13 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
...
@@ -225,16 +133,13 @@ public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
@Override
@Override
@Capabilities
@Capabilities
protected
int
supportsFormatInternal
(
public
final
int
supportsFormat
(
Format
format
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
if
(!
VpxLibrary
.
isAvailable
()
||
!
MimeTypes
.
VIDEO_VP9
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
if
(!
VpxLibrary
.
isAvailable
()
||
!
MimeTypes
.
VIDEO_VP9
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
}
}
boolean
drmIsSupported
=
boolean
drmIsSupported
=
format
.
drmInitData
==
null
format
.
drmInitData
==
null
||
VpxLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
)
||
VpxLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
);
||
(
format
.
exoMediaCryptoType
==
null
&&
supportsFormatDrm
(
drmSessionManager
,
format
.
drmInitData
));
if
(!
drmIsSupported
)
{
if
(!
drmIsSupported
)
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_DRM
);
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;
...
@@ -18,7 +18,6 @@ package com.google.android.exoplayer2;
import
android.os.Looper
;
import
android.os.Looper
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
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.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.drm.ExoMediaCrypto
;
...
@@ -411,26 +410,4 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
...
@@ -411,26 +410,4 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
protected
final
boolean
isSourceReady
()
{
protected
final
boolean
isSourceReady
()
{
return
hasReadStreamToEnd
()
?
streamIsFinal
:
stream
.
isReady
();
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;
...
@@ -20,14 +20,11 @@ import android.media.MediaCodec;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Looper
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.audio.AudioCapabilities
;
import
com.google.android.exoplayer2.audio.AudioCapabilities
;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.DefaultAudioSink
;
import
com.google.android.exoplayer2.audio.DefaultAudioSink
;
import
com.google.android.exoplayer2.audio.MediaCodecAudioRenderer
;
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.MediaCodecRenderer
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecSelector
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecSelector
;
import
com.google.android.exoplayer2.metadata.MetadataOutput
;
import
com.google.android.exoplayer2.metadata.MetadataOutput
;
...
@@ -88,10 +85,8 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -88,10 +85,8 @@ public class DefaultRenderersFactory implements RenderersFactory {
protected
static
final
int
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY
=
50
;
protected
static
final
int
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY
=
50
;
private
final
Context
context
;
private
final
Context
context
;
@Nullable
private
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
;
@ExtensionRendererMode
private
int
extensionRendererMode
;
@ExtensionRendererMode
private
int
extensionRendererMode
;
private
long
allowedVideoJoiningTimeMs
;
private
long
allowedVideoJoiningTimeMs
;
private
boolean
playClearSamplesWithoutKeys
;
private
boolean
enableDecoderFallback
;
private
boolean
enableDecoderFallback
;
private
MediaCodecSelector
mediaCodecSelector
;
private
MediaCodecSelector
mediaCodecSelector
;
@MediaCodecRenderer
.
MediaCodecOperationMode
private
int
mediaCodecOperationMode
;
@MediaCodecRenderer
.
MediaCodecOperationMode
private
int
mediaCodecOperationMode
;
...
@@ -106,17 +101,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -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
* @deprecated Use {@link #DefaultRenderersFactory(Context)} and {@link
* #setExtensionRendererMode(int)}.
* #setExtensionRendererMode(int)}.
*/
*/
...
@@ -128,47 +112,17 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -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
* @deprecated Use {@link #DefaultRenderersFactory(Context)}, {@link
* #setExtensionRendererMode(int)} and {@link #setAllowedVideoJoiningTimeMs(long)}.
* #setExtensionRendererMode(int)} and {@link #setAllowedVideoJoiningTimeMs(long)}.
*/
*/
@Deprecated
@Deprecated
@SuppressWarnings
(
"deprecation"
)
public
DefaultRenderersFactory
(
public
DefaultRenderersFactory
(
Context
context
,
Context
context
,
@ExtensionRendererMode
int
extensionRendererMode
,
@ExtensionRendererMode
int
extensionRendererMode
,
long
allowedVideoJoiningTimeMs
)
{
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
.
context
=
context
;
this
.
extensionRendererMode
=
extensionRendererMode
;
this
.
extensionRendererMode
=
extensionRendererMode
;
this
.
allowedVideoJoiningTimeMs
=
allowedVideoJoiningTimeMs
;
this
.
allowedVideoJoiningTimeMs
=
allowedVideoJoiningTimeMs
;
this
.
drmSessionManager
=
drmSessionManager
;
mediaCodecSelector
=
MediaCodecSelector
.
DEFAULT
;
mediaCodecSelector
=
MediaCodecSelector
.
DEFAULT
;
}
}
...
@@ -204,25 +158,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -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.
* 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.
* 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 {
...
@@ -269,18 +204,12 @@ public class DefaultRenderersFactory implements RenderersFactory {
VideoRendererEventListener
videoRendererEventListener
,
VideoRendererEventListener
videoRendererEventListener
,
AudioRendererEventListener
audioRendererEventListener
,
AudioRendererEventListener
audioRendererEventListener
,
TextOutput
textRendererOutput
,
TextOutput
textRendererOutput
,
MetadataOutput
metadataRendererOutput
,
MetadataOutput
metadataRendererOutput
)
{
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
)
{
if
(
drmSessionManager
==
null
)
{
drmSessionManager
=
this
.
drmSessionManager
;
}
ArrayList
<
Renderer
>
renderersList
=
new
ArrayList
<>();
ArrayList
<
Renderer
>
renderersList
=
new
ArrayList
<>();
buildVideoRenderers
(
buildVideoRenderers
(
context
,
context
,
extensionRendererMode
,
extensionRendererMode
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
enableDecoderFallback
,
enableDecoderFallback
,
eventHandler
,
eventHandler
,
videoRendererEventListener
,
videoRendererEventListener
,
...
@@ -290,8 +219,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -290,8 +219,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
context
,
context
,
extensionRendererMode
,
extensionRendererMode
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
enableDecoderFallback
,
enableDecoderFallback
,
buildAudioProcessors
(),
buildAudioProcessors
(),
eventHandler
,
eventHandler
,
...
@@ -312,11 +239,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -312,11 +239,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
* @param context The {@link Context} associated with the player.
* @param context The {@link Context} associated with the player.
* @param extensionRendererMode The extension renderer mode.
* @param extensionRendererMode The extension renderer mode.
* @param mediaCodecSelector A decoder selector.
* @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
* @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
* initialization fails. This may result in using a decoder that is slower/less efficient than
* the primary decoder.
* the primary decoder.
...
@@ -330,8 +252,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -330,8 +252,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
Context
context
,
Context
context
,
@ExtensionRendererMode
int
extensionRendererMode
,
@ExtensionRendererMode
int
extensionRendererMode
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
boolean
enableDecoderFallback
,
Handler
eventHandler
,
Handler
eventHandler
,
VideoRendererEventListener
eventListener
,
VideoRendererEventListener
eventListener
,
...
@@ -342,8 +262,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -342,8 +262,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
allowedVideoJoiningTimeMs
,
allowedVideoJoiningTimeMs
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
enableDecoderFallback
,
enableDecoderFallback
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
...
@@ -420,11 +338,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -420,11 +338,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
* @param context The {@link Context} associated with the player.
* @param context The {@link Context} associated with the player.
* @param extensionRendererMode The extension renderer mode.
* @param extensionRendererMode The extension renderer mode.
* @param mediaCodecSelector A decoder selector.
* @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
* @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
* initialization fails. This may result in using a decoder that is slower/less efficient than
* the primary decoder.
* the primary decoder.
...
@@ -438,8 +351,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -438,8 +351,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
Context
context
,
Context
context
,
@ExtensionRendererMode
int
extensionRendererMode
,
@ExtensionRendererMode
int
extensionRendererMode
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
boolean
enableDecoderFallback
,
AudioProcessor
[]
audioProcessors
,
AudioProcessor
[]
audioProcessors
,
Handler
eventHandler
,
Handler
eventHandler
,
...
@@ -449,8 +360,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
...
@@ -449,8 +360,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
new
MediaCodecAudioRenderer
(
new
MediaCodecAudioRenderer
(
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
enableDecoderFallback
,
enableDecoderFallback
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerFactory.java
View file @
5c3c8034
...
@@ -17,11 +17,7 @@ package com.google.android.exoplayer2;
...
@@ -17,11 +17,7 @@ package com.google.android.exoplayer2;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Looper
;
import
android.os.Looper
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.analytics.AnalyticsCollector
;
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.DefaultTrackSelector
;
import
com.google.android.exoplayer2.trackselection.TrackSelector
;
import
com.google.android.exoplayer2.trackselection.TrackSelector
;
import
com.google.android.exoplayer2.upstream.BandwidthMeter
;
import
com.google.android.exoplayer2.upstream.BandwidthMeter
;
...
@@ -35,45 +31,33 @@ public final class ExoPlayerFactory {
...
@@ -35,45 +31,33 @@ public final class ExoPlayerFactory {
private
ExoPlayerFactory
()
{}
private
ExoPlayerFactory
()
{}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
Context
context
,
Context
context
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
@DefaultRenderersFactory
.
ExtensionRendererMode
int
extensionRendererMode
)
{
@DefaultRenderersFactory
.
ExtensionRendererMode
int
extensionRendererMode
)
{
RenderersFactory
renderersFactory
=
RenderersFactory
renderersFactory
=
new
DefaultRenderersFactory
(
context
).
setExtensionRendererMode
(
extensionRendererMode
);
new
DefaultRenderersFactory
(
context
).
setExtensionRendererMode
(
extensionRendererMode
);
return
newSimpleInstance
(
return
newSimpleInstance
(
context
,
renderersFactory
,
trackSelector
,
loadControl
);
context
,
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
);
}
}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
Context
context
,
Context
context
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
@DefaultRenderersFactory
.
ExtensionRendererMode
int
extensionRendererMode
,
@DefaultRenderersFactory
.
ExtensionRendererMode
int
extensionRendererMode
,
long
allowedVideoJoiningTimeMs
)
{
long
allowedVideoJoiningTimeMs
)
{
RenderersFactory
renderersFactory
=
RenderersFactory
renderersFactory
=
new
DefaultRenderersFactory
(
context
)
new
DefaultRenderersFactory
(
context
)
.
setExtensionRendererMode
(
extensionRendererMode
)
.
setExtensionRendererMode
(
extensionRendererMode
)
.
setAllowedVideoJoiningTimeMs
(
allowedVideoJoiningTimeMs
);
.
setAllowedVideoJoiningTimeMs
(
allowedVideoJoiningTimeMs
);
return
newSimpleInstance
(
return
newSimpleInstance
(
context
,
renderersFactory
,
trackSelector
,
loadControl
);
context
,
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
);
}
}
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
...
@@ -107,39 +91,6 @@ public final class ExoPlayerFactory {
...
@@ -107,39 +91,6 @@ public final class ExoPlayerFactory {
return
newSimpleInstance
(
context
,
renderersFactory
,
trackSelector
,
loadControl
);
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 Use {@link SimpleExoPlayer.Builder} instead. */
@Deprecated
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
...
@@ -153,32 +104,10 @@ public final class ExoPlayerFactory {
...
@@ -153,32 +104,10 @@ public final class ExoPlayerFactory {
renderersFactory
,
renderersFactory
,
trackSelector
,
trackSelector
,
loadControl
,
loadControl
,
/* drmSessionManager= */
null
,
Util
.
getLooper
());
Util
.
getLooper
());
}
}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
...
@@ -186,24 +115,18 @@ public final class ExoPlayerFactory {
...
@@ -186,24 +115,18 @@ public final class ExoPlayerFactory {
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
BandwidthMeter
bandwidthMeter
)
{
BandwidthMeter
bandwidthMeter
)
{
return
newSimpleInstance
(
return
newSimpleInstance
(
context
,
context
,
renderersFactory
,
renderersFactory
,
trackSelector
,
trackSelector
,
loadControl
,
loadControl
,
drmSessionManager
,
bandwidthMeter
,
bandwidthMeter
,
new
AnalyticsCollector
(
Clock
.
DEFAULT
),
new
AnalyticsCollector
(
Clock
.
DEFAULT
),
Util
.
getLooper
());
Util
.
getLooper
());
}
}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
...
@@ -211,23 +134,17 @@ public final class ExoPlayerFactory {
...
@@ -211,23 +134,17 @@ public final class ExoPlayerFactory {
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
AnalyticsCollector
analyticsCollector
)
{
AnalyticsCollector
analyticsCollector
)
{
return
newSimpleInstance
(
return
newSimpleInstance
(
context
,
context
,
renderersFactory
,
renderersFactory
,
trackSelector
,
trackSelector
,
loadControl
,
loadControl
,
drmSessionManager
,
analyticsCollector
,
analyticsCollector
,
Util
.
getLooper
());
Util
.
getLooper
());
}
}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
...
@@ -235,23 +152,17 @@ public final class ExoPlayerFactory {
...
@@ -235,23 +152,17 @@ public final class ExoPlayerFactory {
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
Looper
looper
)
{
Looper
looper
)
{
return
newSimpleInstance
(
return
newSimpleInstance
(
context
,
context
,
renderersFactory
,
renderersFactory
,
trackSelector
,
trackSelector
,
loadControl
,
loadControl
,
drmSessionManager
,
new
AnalyticsCollector
(
Clock
.
DEFAULT
),
new
AnalyticsCollector
(
Clock
.
DEFAULT
),
looper
);
looper
);
}
}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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
@Deprecated
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
...
@@ -259,7 +170,6 @@ public final class ExoPlayerFactory {
...
@@ -259,7 +170,6 @@ public final class ExoPlayerFactory {
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
AnalyticsCollector
analyticsCollector
,
AnalyticsCollector
analyticsCollector
,
Looper
looper
)
{
Looper
looper
)
{
return
newSimpleInstance
(
return
newSimpleInstance
(
...
@@ -267,17 +177,12 @@ public final class ExoPlayerFactory {
...
@@ -267,17 +177,12 @@ public final class ExoPlayerFactory {
renderersFactory
,
renderersFactory
,
trackSelector
,
trackSelector
,
loadControl
,
loadControl
,
drmSessionManager
,
DefaultBandwidthMeter
.
getSingletonInstance
(
context
),
DefaultBandwidthMeter
.
getSingletonInstance
(
context
),
analyticsCollector
,
analyticsCollector
,
looper
);
looper
);
}
}
/**
/** @deprecated Use {@link SimpleExoPlayer.Builder} instead. */
* @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.
*/
@SuppressWarnings
(
"deprecation"
)
@SuppressWarnings
(
"deprecation"
)
@Deprecated
@Deprecated
public
static
SimpleExoPlayer
newSimpleInstance
(
public
static
SimpleExoPlayer
newSimpleInstance
(
...
@@ -285,7 +190,6 @@ public final class ExoPlayerFactory {
...
@@ -285,7 +190,6 @@ public final class ExoPlayerFactory {
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
BandwidthMeter
bandwidthMeter
,
BandwidthMeter
bandwidthMeter
,
AnalyticsCollector
analyticsCollector
,
AnalyticsCollector
analyticsCollector
,
Looper
looper
)
{
Looper
looper
)
{
...
@@ -294,7 +198,6 @@ public final class ExoPlayerFactory {
...
@@ -294,7 +198,6 @@ public final class ExoPlayerFactory {
renderersFactory
,
renderersFactory
,
trackSelector
,
trackSelector
,
loadControl
,
loadControl
,
drmSessionManager
,
bandwidthMeter
,
bandwidthMeter
,
analyticsCollector
,
analyticsCollector
,
/* useLazyPreparation= */
true
,
/* useLazyPreparation= */
true
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/RenderersFactory.java
View file @
5c3c8034
...
@@ -16,10 +16,7 @@
...
@@ -16,10 +16,7 @@
package
com
.
google
.
android
.
exoplayer2
;
package
com
.
google
.
android
.
exoplayer2
;
import
android.os.Handler
;
import
android.os.Handler
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
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.metadata.MetadataOutput
;
import
com.google.android.exoplayer2.text.TextOutput
;
import
com.google.android.exoplayer2.text.TextOutput
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
...
@@ -37,7 +34,6 @@ public interface RenderersFactory {
...
@@ -37,7 +34,6 @@ public interface RenderersFactory {
* @param audioRendererEventListener An event listener for audio renderers.
* @param audioRendererEventListener An event listener for audio renderers.
* @param textRendererOutput An output for text renderers.
* @param textRendererOutput An output for text renderers.
* @param metadataRendererOutput An output for metadata renderers.
* @param metadataRendererOutput An output for metadata renderers.
* @param drmSessionManager A drm session manager used by renderers.
* @return The {@link Renderer instances}.
* @return The {@link Renderer instances}.
*/
*/
Renderer
[]
createRenderers
(
Renderer
[]
createRenderers
(
...
@@ -45,6 +41,5 @@ public interface RenderersFactory {
...
@@ -45,6 +41,5 @@ public interface RenderersFactory {
VideoRendererEventListener
videoRendererEventListener
,
VideoRendererEventListener
videoRendererEventListener
,
AudioRendererEventListener
audioRendererEventListener
,
AudioRendererEventListener
audioRendererEventListener
,
TextOutput
textRendererOutput
,
TextOutput
textRendererOutput
,
MetadataOutput
metadataRendererOutput
,
MetadataOutput
metadataRendererOutput
);
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
);
}
}
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;
...
@@ -36,9 +36,6 @@ import com.google.android.exoplayer2.audio.AudioListener;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.audio.AuxEffectInfo
;
import
com.google.android.exoplayer2.audio.AuxEffectInfo
;
import
com.google.android.exoplayer2.decoder.DecoderCounters
;
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.Metadata
;
import
com.google.android.exoplayer2.metadata.MetadataOutput
;
import
com.google.android.exoplayer2.metadata.MetadataOutput
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSource
;
...
@@ -370,42 +367,11 @@ public class SimpleExoPlayer extends BasePlayer
...
@@ -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
* @param looper The {@link Looper} which must be used for all calls to the player and which is
* used to call listeners on.
* 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
(
protected
SimpleExoPlayer
(
Context
context
,
Context
context
,
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
BandwidthMeter
bandwidthMeter
,
BandwidthMeter
bandwidthMeter
,
AnalyticsCollector
analyticsCollector
,
AnalyticsCollector
analyticsCollector
,
boolean
useLazyPreparation
,
boolean
useLazyPreparation
,
...
@@ -427,8 +393,7 @@ public class SimpleExoPlayer extends BasePlayer
...
@@ -427,8 +393,7 @@ public class SimpleExoPlayer extends BasePlayer
componentListener
,
componentListener
,
componentListener
,
componentListener
,
componentListener
,
componentListener
,
componentListener
,
componentListener
);
drmSessionManager
);
// Set initial values.
// Set initial values.
audioVolume
=
1
;
audioVolume
=
1
;
...
@@ -457,9 +422,6 @@ public class SimpleExoPlayer extends BasePlayer
...
@@ -457,9 +422,6 @@ public class SimpleExoPlayer extends BasePlayer
audioListeners
.
add
(
analyticsCollector
);
audioListeners
.
add
(
analyticsCollector
);
addMetadataOutput
(
analyticsCollector
);
addMetadataOutput
(
analyticsCollector
);
bandwidthMeter
.
addEventListener
(
eventHandler
,
analyticsCollector
);
bandwidthMeter
.
addEventListener
(
eventHandler
,
analyticsCollector
);
if
(
drmSessionManager
instanceof
DefaultDrmSessionManager
)
{
((
DefaultDrmSessionManager
)
drmSessionManager
).
addListener
(
eventHandler
,
analyticsCollector
);
}
audioBecomingNoisyManager
=
audioBecomingNoisyManager
=
new
AudioBecomingNoisyManager
(
context
,
eventHandler
,
componentListener
);
new
AudioBecomingNoisyManager
(
context
,
eventHandler
,
componentListener
);
audioFocusManager
=
new
AudioFocusManager
(
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;
...
@@ -33,7 +33,6 @@ import com.google.android.exoplayer2.PlayerMessage.Target;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener.EventDispatcher
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener.EventDispatcher
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
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.drm.FrameworkMediaCrypto
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecRenderer
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecRenderer
;
...
@@ -41,7 +40,6 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
...
@@ -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
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException
;
import
com.google.android.exoplayer2.mediacodec.MediaFormatUtil
;
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.MediaClock
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
...
@@ -96,41 +94,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -96,41 +94,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* @param context A context.
* @param context A context.
* @param mediaCodecSelector A decoder selector.
* @param mediaCodecSelector A decoder selector.
*/
*/
@SuppressWarnings
(
"deprecation"
)
public
MediaCodecAudioRenderer
(
Context
context
,
MediaCodecSelector
mediaCodecSelector
)
{
public
MediaCodecAudioRenderer
(
Context
context
,
MediaCodecSelector
mediaCodecSelector
)
{
this
(
this
(
context
,
context
,
mediaCodecSelector
,
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
,
/* eventHandler= */
null
,
/* eventListener= */
null
);
/* eventListener= */
null
);
}
}
...
@@ -142,7 +109,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -142,7 +109,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* null if delivery of events is not required.
* 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 eventListener A listener of events. May be null if delivery of events is not required.
*/
*/
@SuppressWarnings
(
"deprecation"
)
public
MediaCodecAudioRenderer
(
public
MediaCodecAudioRenderer
(
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
...
@@ -151,43 +117,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -151,43 +117,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
this
(
this
(
context
,
context
,
mediaCodecSelector
,
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
,
eventHandler
,
eventListener
,
eventListener
,
(
AudioCapabilities
)
null
);
(
AudioCapabilities
)
null
);
...
@@ -196,13 +125,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -196,13 +125,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
/**
/**
* @param context A context.
* @param context A context.
* @param mediaCodecSelector A decoder selector.
* @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
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
* null if delivery of events is not required.
* 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 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
...
@@ -210,17 +132,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* default capabilities (no encoded audio passthrough support) should be assumed.
* default capabilities (no encoded audio passthrough support) should be assumed.
* @param audioProcessors Optional {@link AudioProcessor}s that will process PCM audio before
* @param audioProcessors Optional {@link AudioProcessor}s that will process PCM audio before
* output.
* 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
(
public
MediaCodecAudioRenderer
(
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioCapabilities
audioCapabilities
,
@Nullable
AudioCapabilities
audioCapabilities
,
...
@@ -228,8 +143,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -228,8 +143,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
this
(
this
(
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
new
DefaultAudioSink
(
audioCapabilities
,
audioProcessors
));
new
DefaultAudioSink
(
audioCapabilities
,
audioProcessors
));
...
@@ -238,36 +151,20 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -238,36 +151,20 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
/**
/**
* @param context A context.
* @param context A context.
* @param mediaCodecSelector A decoder selector.
* @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
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
* null if delivery of events is not required.
* 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 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.
* @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
(
public
MediaCodecAudioRenderer
(
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioRendererEventListener
eventListener
,
AudioSink
audioSink
)
{
AudioSink
audioSink
)
{
this
(
this
(
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
/* enableDecoderFallback= */
false
,
/* enableDecoderFallback= */
false
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
...
@@ -285,52 +182,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -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 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.
* @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
(
public
MediaCodecAudioRenderer
(
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
boolean
enableDecoderFallback
,
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioRendererEventListener
eventListener
,
...
@@ -338,8 +192,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -338,8 +192,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
super
(
super
(
C
.
TRACK_TYPE_AUDIO
,
C
.
TRACK_TYPE_AUDIO
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
enableDecoderFallback
,
enableDecoderFallback
,
/* assumedMinimumCodecOperatingRate= */
44100
);
/* assumedMinimumCodecOperatingRate= */
44100
);
this
.
context
=
context
.
getApplicationContext
();
this
.
context
=
context
.
getApplicationContext
();
...
@@ -352,7 +204,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -352,7 +204,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
@Capabilities
@Capabilities
protected
int
supportsFormat
(
protected
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
Format
format
)
Format
format
)
throws
DecoderQueryException
{
throws
DecoderQueryException
{
String
mimeType
=
format
.
sampleMimeType
;
String
mimeType
=
format
.
sampleMimeType
;
...
@@ -362,10 +213,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -362,10 +213,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
@TunnelingSupport
@TunnelingSupport
int
tunnelingSupport
=
Util
.
SDK_INT
>=
21
?
TUNNELING_SUPPORTED
:
TUNNELING_NOT_SUPPORTED
;
int
tunnelingSupport
=
Util
.
SDK_INT
>=
21
?
TUNNELING_SUPPORTED
:
TUNNELING_NOT_SUPPORTED
;
boolean
supportsFormatDrm
=
boolean
supportsFormatDrm
=
format
.
drmInitData
==
null
format
.
drmInitData
==
null
||
FrameworkMediaCrypto
.
class
.
equals
(
format
.
exoMediaCryptoType
);
||
FrameworkMediaCrypto
.
class
.
equals
(
format
.
exoMediaCryptoType
)
||
(
format
.
exoMediaCryptoType
==
null
&&
supportsFormatDrm
(
drmSessionManager
,
format
.
drmInitData
));
if
(
supportsFormatDrm
if
(
supportsFormatDrm
&&
allowPassthrough
(
format
.
channelCount
,
mimeType
)
&&
allowPassthrough
(
format
.
channelCount
,
mimeType
)
&&
mediaCodecSelector
.
getPassthroughDecoderInfo
()
!=
null
)
{
&&
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;
...
@@ -36,7 +36,6 @@ import com.google.android.exoplayer2.decoder.SimpleDecoder;
import
com.google.android.exoplayer2.decoder.SimpleOutputBuffer
;
import
com.google.android.exoplayer2.decoder.SimpleOutputBuffer
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSession.DrmSessionException
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.MediaClock
;
import
com.google.android.exoplayer2.util.MediaClock
;
...
@@ -91,13 +90,10 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -91,13 +90,10 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
*/
*/
private
static
final
int
REINITIALIZATION_STATE_WAIT_END_OF_STREAM
=
2
;
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
EventDispatcher
eventDispatcher
;
private
final
AudioSink
audioSink
;
private
final
AudioSink
audioSink
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
boolean
drmResourcesAcquired
;
private
DecoderCounters
decoderCounters
;
private
DecoderCounters
decoderCounters
;
private
Format
inputFormat
;
private
Format
inputFormat
;
private
int
encoderDelay
;
private
int
encoderDelay
;
...
@@ -142,8 +138,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -142,8 +138,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
/* audioCapabilities= */
null
,
/* audioCapabilities= */
null
,
/* drmSessionManager= */
null
,
/* playClearSamplesWithoutKeys= */
false
,
audioProcessors
);
audioProcessors
);
}
}
...
@@ -153,67 +147,27 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -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 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
* @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.
* 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.
* @param audioProcessors Optional {@link AudioProcessor}s that will process audio before output.
*/
*/
public
SimpleDecoderAudioRenderer
(
public
SimpleDecoderAudioRenderer
(
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioCapabilities
audioCapabilities
,
@Nullable
AudioCapabilities
audioCapabilities
,
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
AudioProcessor
...
audioProcessors
)
{
AudioProcessor
...
audioProcessors
)
{
this
(
eventHandler
,
eventListener
,
drmSessionManager
,
this
(
eventHandler
,
eventListener
,
new
DefaultAudioSink
(
audioCapabilities
,
audioProcessors
));
playClearSamplesWithoutKeys
,
new
DefaultAudioSink
(
audioCapabilities
,
audioProcessors
));
}
}
/**
/**
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
* null if delivery of events is not required.
* 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 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.
* @param audioSink The sink to which audio will be output.
*/
*/
public
SimpleDecoderAudioRenderer
(
public
SimpleDecoderAudioRenderer
(
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
AudioRendererEventListener
eventListener
,
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
AudioSink
audioSink
)
{
AudioSink
audioSink
)
{
super
(
C
.
TRACK_TYPE_AUDIO
);
super
(
C
.
TRACK_TYPE_AUDIO
);
this
.
drmSessionManager
=
drmSessionManager
;
this
.
playClearSamplesWithoutKeys
=
playClearSamplesWithoutKeys
;
eventDispatcher
=
new
EventDispatcher
(
eventHandler
,
eventListener
);
eventDispatcher
=
new
EventDispatcher
(
eventHandler
,
eventListener
);
this
.
audioSink
=
audioSink
;
this
.
audioSink
=
audioSink
;
audioSink
.
setListener
(
new
AudioSinkListener
());
audioSink
.
setListener
(
new
AudioSinkListener
());
...
@@ -234,7 +188,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -234,7 +188,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
if
(!
MimeTypes
.
isAudio
(
format
.
sampleMimeType
))
{
if
(!
MimeTypes
.
isAudio
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
}
}
@FormatSupport
int
formatSupport
=
supportsFormatInternal
(
drmSessionManager
,
format
);
@FormatSupport
int
formatSupport
=
supportsFormatInternal
(
format
);
if
(
formatSupport
<=
FORMAT_UNSUPPORTED_DRM
)
{
if
(
formatSupport
<=
FORMAT_UNSUPPORTED_DRM
)
{
return
RendererCapabilities
.
create
(
formatSupport
);
return
RendererCapabilities
.
create
(
formatSupport
);
}
}
...
@@ -246,13 +200,11 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -246,13 +200,11 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
/**
/**
* Returns the {@link FormatSupport} for the given {@link Format}.
* 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}.
* @param format The format, which has an audio {@link Format#sampleMimeType}.
* @return The {@link FormatSupport} for this {@link Format}.
* @return The {@link FormatSupport} for this {@link Format}.
*/
*/
@FormatSupport
@FormatSupport
protected
abstract
int
supportsFormatInternal
(
protected
abstract
int
supportsFormatInternal
(
Format
format
);
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
);
/**
/**
* Returns whether the sink supports the audio format.
* Returns whether the sink supports the audio format.
...
@@ -476,8 +428,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -476,8 +428,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
if
(
decoderDrmSession
==
null
if
(
decoderDrmSession
==
null
||
(!
bufferEncrypted
||
(!
bufferEncrypted
&&
decoderDrmSession
.
playClearSamplesWithoutKeys
()))
{
&&
(
playClearSamplesWithoutKeys
||
decoderDrmSession
.
playClearSamplesWithoutKeys
())))
{
return
false
;
return
false
;
}
}
@DrmSession
.
State
int
drmSessionState
=
decoderDrmSession
.
getState
();
@DrmSession
.
State
int
drmSessionState
=
decoderDrmSession
.
getState
();
...
@@ -544,10 +495,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -544,10 +495,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
@Override
@Override
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
if
(
drmSessionManager
!=
null
&&
!
drmResourcesAcquired
)
{
drmResourcesAcquired
=
true
;
drmSessionManager
.
prepare
();
}
decoderCounters
=
new
DecoderCounters
();
decoderCounters
=
new
DecoderCounters
();
eventDispatcher
.
enabled
(
decoderCounters
);
eventDispatcher
.
enabled
(
decoderCounters
);
int
tunnelingAudioSessionId
=
getConfiguration
().
tunnelingAudioSessionId
;
int
tunnelingAudioSessionId
=
getConfiguration
().
tunnelingAudioSessionId
;
...
@@ -597,14 +544,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -597,14 +544,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
}
}
@Override
@Override
protected
void
onReset
()
{
if
(
drmSessionManager
!=
null
&&
drmResourcesAcquired
)
{
drmResourcesAcquired
=
false
;
drmSessionManager
.
release
();
}
}
@Override
public
void
handleMessage
(
int
messageType
,
@Nullable
Object
message
)
throws
ExoPlaybackException
{
public
void
handleMessage
(
int
messageType
,
@Nullable
Object
message
)
throws
ExoPlaybackException
{
switch
(
messageType
)
{
switch
(
messageType
)
{
case
MSG_SET_VOLUME:
case
MSG_SET_VOLUME:
...
@@ -686,12 +625,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
...
@@ -686,12 +625,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
"unchecked"
)
private
void
onInputFormatChanged
(
FormatHolder
formatHolder
)
throws
ExoPlaybackException
{
private
void
onInputFormatChanged
(
FormatHolder
formatHolder
)
throws
ExoPlaybackException
{
Format
newFormat
=
Assertions
.
checkNotNull
(
formatHolder
.
format
);
Format
newFormat
=
Assertions
.
checkNotNull
(
formatHolder
.
format
);
if
(
formatHolder
.
includesDrmSession
)
{
setSourceDrmSession
((
DrmSession
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
setSourceDrmSession
((
DrmSession
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
}
else
{
sourceDrmSession
=
getUpdatedSourceDrmSession
(
inputFormat
,
newFormat
,
drmSessionManager
,
sourceDrmSession
);
}
Format
oldFormat
=
inputFormat
;
Format
oldFormat
=
inputFormat
;
inputFormat
=
newFormat
;
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;
...
@@ -38,7 +38,6 @@ import com.google.android.exoplayer2.decoder.DecoderCounters;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSession.DrmSessionException
;
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.drm.FrameworkMediaCrypto
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException
;
import
com.google.android.exoplayer2.source.MediaPeriod
;
import
com.google.android.exoplayer2.source.MediaPeriod
;
...
@@ -379,8 +378,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -379,8 +378,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private
static
final
int
ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT
=
32
;
private
static
final
int
ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT
=
32
;
private
final
MediaCodecSelector
mediaCodecSelector
;
private
final
MediaCodecSelector
mediaCodecSelector
;
@Nullable
private
final
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
;
private
final
boolean
playClearSamplesWithoutKeys
;
private
final
boolean
enableDecoderFallback
;
private
final
boolean
enableDecoderFallback
;
private
final
float
assumedMinimumCodecOperatingRate
;
private
final
float
assumedMinimumCodecOperatingRate
;
private
final
DecoderInputBuffer
buffer
;
private
final
DecoderInputBuffer
buffer
;
...
@@ -391,7 +388,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -391,7 +388,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private
final
long
[]
pendingOutputStreamOffsetsUs
;
private
final
long
[]
pendingOutputStreamOffsetsUs
;
private
final
long
[]
pendingOutputStreamSwitchTimesUs
;
private
final
long
[]
pendingOutputStreamSwitchTimesUs
;
private
boolean
drmResourcesAcquired
;
@Nullable
private
Format
inputFormat
;
@Nullable
private
Format
inputFormat
;
private
Format
outputFormat
;
private
Format
outputFormat
;
@Nullable
private
DrmSession
<
FrameworkMediaCrypto
>
codecDrmSession
;
@Nullable
private
DrmSession
<
FrameworkMediaCrypto
>
codecDrmSession
;
...
@@ -448,13 +444,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -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_*}
* @param trackType The track type that the renderer handles. One of the {@code C.TRACK_TYPE_*}
* constants defined in {@link C}.
* constants defined in {@link C}.
* @param mediaCodecSelector A decoder selector.
* @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
* @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
* initialization fails. This may result in using a decoder that is less efficient or slower
* than the primary decoder.
* than the primary decoder.
...
@@ -465,14 +454,10 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -465,14 +454,10 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
public
MediaCodecRenderer
(
public
MediaCodecRenderer
(
int
trackType
,
int
trackType
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
boolean
enableDecoderFallback
,
float
assumedMinimumCodecOperatingRate
)
{
float
assumedMinimumCodecOperatingRate
)
{
super
(
trackType
);
super
(
trackType
);
this
.
mediaCodecSelector
=
Assertions
.
checkNotNull
(
mediaCodecSelector
);
this
.
mediaCodecSelector
=
Assertions
.
checkNotNull
(
mediaCodecSelector
);
this
.
drmSessionManager
=
drmSessionManager
;
this
.
playClearSamplesWithoutKeys
=
playClearSamplesWithoutKeys
;
this
.
enableDecoderFallback
=
enableDecoderFallback
;
this
.
enableDecoderFallback
=
enableDecoderFallback
;
this
.
assumedMinimumCodecOperatingRate
=
assumedMinimumCodecOperatingRate
;
this
.
assumedMinimumCodecOperatingRate
=
assumedMinimumCodecOperatingRate
;
buffer
=
new
DecoderInputBuffer
(
DecoderInputBuffer
.
BUFFER_REPLACEMENT_MODE_DISABLED
);
buffer
=
new
DecoderInputBuffer
(
DecoderInputBuffer
.
BUFFER_REPLACEMENT_MODE_DISABLED
);
...
@@ -550,7 +535,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -550,7 +535,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
@Capabilities
@Capabilities
public
final
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
public
final
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
try
{
try
{
return
supportsFormat
(
mediaCodecSelector
,
drmSessionManager
,
format
);
return
supportsFormat
(
mediaCodecSelector
,
format
);
}
catch
(
DecoderQueryException
e
)
{
}
catch
(
DecoderQueryException
e
)
{
throw
createRendererException
(
e
,
format
);
throw
createRendererException
(
e
,
format
);
}
}
...
@@ -560,7 +545,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -560,7 +545,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
* Returns the {@link Capabilities} for the given {@link Format}.
* Returns the {@link Capabilities} for the given {@link Format}.
*
*
* @param mediaCodecSelector The decoder selector.
* @param mediaCodecSelector The decoder selector.
* @param drmSessionManager The renderer's {@link DrmSessionManager}.
* @param format The {@link Format}.
* @param format The {@link Format}.
* @return The {@link Capabilities} for this {@link Format}.
* @return The {@link Capabilities} for this {@link Format}.
* @throws DecoderQueryException If there was an error querying decoders.
* @throws DecoderQueryException If there was an error querying decoders.
...
@@ -568,7 +552,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -568,7 +552,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
@Capabilities
@Capabilities
protected
abstract
int
supportsFormat
(
protected
abstract
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
Format
format
)
Format
format
)
throws
DecoderQueryException
;
throws
DecoderQueryException
;
...
@@ -696,10 +679,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -696,10 +679,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
@Override
@Override
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
if
(
drmSessionManager
!=
null
&&
!
drmResourcesAcquired
)
{
drmResourcesAcquired
=
true
;
drmSessionManager
.
prepare
();
}
decoderCounters
=
new
DecoderCounters
();
decoderCounters
=
new
DecoderCounters
();
}
}
...
@@ -771,10 +750,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -771,10 +750,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
}
finally
{
}
finally
{
setSourceDrmSession
(
null
);
setSourceDrmSession
(
null
);
}
}
if
(
drmSessionManager
!=
null
&&
drmResourcesAcquired
)
{
drmResourcesAcquired
=
false
;
drmSessionManager
.
release
();
}
}
}
protected
void
releaseCodec
()
{
protected
void
releaseCodec
()
{
...
@@ -1366,8 +1341,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -1366,8 +1341,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
if
(
codecDrmSession
==
null
if
(
codecDrmSession
==
null
||
(!
bufferEncrypted
||
(!
bufferEncrypted
&&
codecDrmSession
.
playClearSamplesWithoutKeys
()))
{
&&
(
playClearSamplesWithoutKeys
||
codecDrmSession
.
playClearSamplesWithoutKeys
())))
{
return
false
;
return
false
;
}
}
@DrmSession
.
State
int
drmSessionState
=
codecDrmSession
.
getState
();
@DrmSession
.
State
int
drmSessionState
=
codecDrmSession
.
getState
();
...
@@ -1402,12 +1376,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
...
@@ -1402,12 +1376,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
protected
void
onInputFormatChanged
(
FormatHolder
formatHolder
)
throws
ExoPlaybackException
{
protected
void
onInputFormatChanged
(
FormatHolder
formatHolder
)
throws
ExoPlaybackException
{
waitingForFirstSampleInFormat
=
true
;
waitingForFirstSampleInFormat
=
true
;
Format
newFormat
=
Assertions
.
checkNotNull
(
formatHolder
.
format
);
Format
newFormat
=
Assertions
.
checkNotNull
(
formatHolder
.
format
);
if
(
formatHolder
.
includesDrmSession
)
{
setSourceDrmSession
((
DrmSession
<
FrameworkMediaCrypto
>)
formatHolder
.
drmSession
);
setSourceDrmSession
((
DrmSession
<
FrameworkMediaCrypto
>)
formatHolder
.
drmSession
);
}
else
{
sourceDrmSession
=
getUpdatedSourceDrmSession
(
inputFormat
,
newFormat
,
drmSessionManager
,
sourceDrmSession
);
}
inputFormat
=
newFormat
;
inputFormat
=
newFormat
;
if
(
codec
==
null
)
{
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 {
...
@@ -96,7 +96,7 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
return
RendererCapabilities
.
create
(
return
RendererCapabilities
.
create
(
supportsFormatDrm
(
null
,
format
.
drmInitData
)
?
FORMAT_HANDLED
:
FORMAT_UNSUPPORTED_DRM
);
format
.
drmInitData
==
null
?
FORMAT_HANDLED
:
FORMAT_UNSUPPORTED_DRM
);
}
else
{
}
else
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
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 {
...
@@ -171,8 +171,7 @@ public final class DownloadHelper {
new
VideoRendererEventListener
()
{},
new
VideoRendererEventListener
()
{},
new
AudioRendererEventListener
()
{},
new
AudioRendererEventListener
()
{},
(
cues
)
->
{},
(
cues
)
->
{},
(
metadata
)
->
{},
(
metadata
)
->
{});
/* drmSessionManager= */
null
);
RendererCapabilities
[]
capabilities
=
new
RendererCapabilities
[
renderers
.
length
];
RendererCapabilities
[]
capabilities
=
new
RendererCapabilities
[
renderers
.
length
];
for
(
int
i
=
0
;
i
<
renderers
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
renderers
.
length
;
i
++)
{
capabilities
[
i
]
=
renderers
[
i
].
getCapabilities
();
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 {
...
@@ -123,7 +123,7 @@ public final class TextRenderer extends BaseRenderer implements Callback {
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
return
RendererCapabilities
.
create
(
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
))
{
}
else
if
(
MimeTypes
.
isText
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
}
else
{
}
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;
...
@@ -41,7 +41,6 @@ import com.google.android.exoplayer2.PlayerMessage.Target;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.drm.DrmInitData
;
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.drm.FrameworkMediaCrypto
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecRenderer
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecRenderer
;
...
@@ -49,7 +48,6 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
...
@@ -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
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException
;
import
com.google.android.exoplayer2.mediacodec.MediaFormatUtil
;
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.Assertions
;
import
com.google.android.exoplayer2.util.Log
;
import
com.google.android.exoplayer2.util.Log
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -194,7 +192,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -194,7 +192,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
* @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between
* @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
*/
*/
@SuppressWarnings
(
"deprecation"
)
public
MediaCodecVideoRenderer
(
public
MediaCodecVideoRenderer
(
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
...
@@ -206,51 +203,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -206,51 +203,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
allowedJoiningTimeMs
,
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
,
/* enableDecoderFallback= */
false
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
...
@@ -271,58 +223,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -271,58 +223,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
* @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between
* @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
* 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
(
public
MediaCodecVideoRenderer
(
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
long
allowedJoiningTimeMs
,
long
allowedJoiningTimeMs
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
boolean
enableDecoderFallback
,
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
VideoRendererEventListener
eventListener
,
@Nullable
VideoRendererEventListener
eventListener
,
...
@@ -330,8 +234,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -330,8 +234,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
super
(
super
(
C
.
TRACK_TYPE_VIDEO
,
C
.
TRACK_TYPE_VIDEO
,
mediaCodecSelector
,
mediaCodecSelector
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
enableDecoderFallback
,
enableDecoderFallback
,
/* assumedMinimumCodecOperatingRate= */
30
);
/* assumedMinimumCodecOperatingRate= */
30
);
this
.
allowedJoiningTimeMs
=
allowedJoiningTimeMs
;
this
.
allowedJoiningTimeMs
=
allowedJoiningTimeMs
;
...
@@ -353,7 +255,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -353,7 +255,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@Capabilities
@Capabilities
protected
int
supportsFormat
(
protected
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
Format
format
)
Format
format
)
throws
DecoderQueryException
{
throws
DecoderQueryException
{
String
mimeType
=
format
.
sampleMimeType
;
String
mimeType
=
format
.
sampleMimeType
;
...
@@ -382,10 +283,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -382,10 +283,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
}
}
boolean
supportsFormatDrm
=
boolean
supportsFormatDrm
=
drmInitData
==
null
drmInitData
==
null
||
FrameworkMediaCrypto
.
class
.
equals
(
format
.
exoMediaCryptoType
);
||
FrameworkMediaCrypto
.
class
.
equals
(
format
.
exoMediaCryptoType
)
||
(
format
.
exoMediaCryptoType
==
null
&&
supportsFormatDrm
(
drmSessionManager
,
drmInitData
));
if
(!
supportsFormatDrm
)
{
if
(!
supportsFormatDrm
)
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_DRM
);
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;
...
@@ -26,13 +26,11 @@ import com.google.android.exoplayer2.C;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.FormatHolder
;
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.DecoderCounters
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.SimpleDecoder
;
import
com.google.android.exoplayer2.decoder.SimpleDecoder
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSession.DrmSessionException
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.TimedValueQueue
;
import
com.google.android.exoplayer2.util.TimedValueQueue
;
...
@@ -71,13 +69,10 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -71,13 +69,10 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
private
final
long
allowedJoiningTimeMs
;
private
final
long
allowedJoiningTimeMs
;
private
final
int
maxDroppedFramesToNotify
;
private
final
int
maxDroppedFramesToNotify
;
private
final
boolean
playClearSamplesWithoutKeys
;
private
final
EventDispatcher
eventDispatcher
;
private
final
EventDispatcher
eventDispatcher
;
private
final
TimedValueQueue
<
Format
>
formatQueue
;
private
final
TimedValueQueue
<
Format
>
formatQueue
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
final
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
;
private
boolean
drmResourcesAcquired
;
private
Format
inputFormat
;
private
Format
inputFormat
;
private
Format
outputFormat
;
private
Format
outputFormat
;
private
SimpleDecoder
<
private
SimpleDecoder
<
...
@@ -126,26 +121,15 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -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 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
* @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
* 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
(
protected
SimpleDecoderVideoRenderer
(
long
allowedJoiningTimeMs
,
long
allowedJoiningTimeMs
,
@Nullable
Handler
eventHandler
,
@Nullable
Handler
eventHandler
,
@Nullable
VideoRendererEventListener
eventListener
,
@Nullable
VideoRendererEventListener
eventListener
,
int
maxDroppedFramesToNotify
,
int
maxDroppedFramesToNotify
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
)
{
super
(
C
.
TRACK_TYPE_VIDEO
);
super
(
C
.
TRACK_TYPE_VIDEO
);
this
.
allowedJoiningTimeMs
=
allowedJoiningTimeMs
;
this
.
allowedJoiningTimeMs
=
allowedJoiningTimeMs
;
this
.
maxDroppedFramesToNotify
=
maxDroppedFramesToNotify
;
this
.
maxDroppedFramesToNotify
=
maxDroppedFramesToNotify
;
this
.
drmSessionManager
=
drmSessionManager
;
this
.
playClearSamplesWithoutKeys
=
playClearSamplesWithoutKeys
;
joiningDeadlineMs
=
C
.
TIME_UNSET
;
joiningDeadlineMs
=
C
.
TIME_UNSET
;
clearReportedVideoSize
();
clearReportedVideoSize
();
formatQueue
=
new
TimedValueQueue
<>();
formatQueue
=
new
TimedValueQueue
<>();
...
@@ -158,12 +142,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -158,12 +142,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
// BaseRenderer implementation.
// BaseRenderer implementation.
@Override
@Override
@Capabilities
public
final
int
supportsFormat
(
Format
format
)
{
return
supportsFormatInternal
(
drmSessionManager
,
format
);
}
@Override
public
void
render
(
long
positionUs
,
long
elapsedRealtimeUs
)
throws
ExoPlaybackException
{
public
void
render
(
long
positionUs
,
long
elapsedRealtimeUs
)
throws
ExoPlaybackException
{
if
(
outputStreamEnded
)
{
if
(
outputStreamEnded
)
{
return
;
return
;
...
@@ -238,10 +216,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -238,10 +216,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
@Override
@Override
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
if
(
drmSessionManager
!=
null
&&
!
drmResourcesAcquired
)
{
drmResourcesAcquired
=
true
;
drmSessionManager
.
prepare
();
}
decoderCounters
=
new
DecoderCounters
();
decoderCounters
=
new
DecoderCounters
();
eventDispatcher
.
enabled
(
decoderCounters
);
eventDispatcher
.
enabled
(
decoderCounters
);
}
}
...
@@ -292,14 +266,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -292,14 +266,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
}
}
@Override
@Override
protected
void
onReset
()
{
if
(
drmSessionManager
!=
null
&&
drmResourcesAcquired
)
{
drmResourcesAcquired
=
false
;
drmSessionManager
.
release
();
}
}
@Override
protected
void
onStreamChanged
(
Format
[]
formats
,
long
offsetUs
)
throws
ExoPlaybackException
{
protected
void
onStreamChanged
(
Format
[]
formats
,
long
offsetUs
)
throws
ExoPlaybackException
{
outputStreamOffsetUs
=
offsetUs
;
outputStreamOffsetUs
=
offsetUs
;
super
.
onStreamChanged
(
formats
,
offsetUs
);
super
.
onStreamChanged
(
formats
,
offsetUs
);
...
@@ -371,12 +337,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -371,12 +337,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
protected
void
onInputFormatChanged
(
FormatHolder
formatHolder
)
throws
ExoPlaybackException
{
protected
void
onInputFormatChanged
(
FormatHolder
formatHolder
)
throws
ExoPlaybackException
{
waitingForFirstSampleInFormat
=
true
;
waitingForFirstSampleInFormat
=
true
;
Format
newFormat
=
Assertions
.
checkNotNull
(
formatHolder
.
format
);
Format
newFormat
=
Assertions
.
checkNotNull
(
formatHolder
.
format
);
if
(
formatHolder
.
includesDrmSession
)
{
setSourceDrmSession
((
DrmSession
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
setSourceDrmSession
((
DrmSession
<
ExoMediaCrypto
>)
formatHolder
.
drmSession
);
}
else
{
sourceDrmSession
=
getUpdatedSourceDrmSession
(
inputFormat
,
newFormat
,
drmSessionManager
,
sourceDrmSession
);
}
inputFormat
=
newFormat
;
inputFormat
=
newFormat
;
if
(
sourceDrmSession
!=
decoderDrmSession
)
{
if
(
sourceDrmSession
!=
decoderDrmSession
)
{
...
@@ -512,18 +473,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -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.
* Creates a decoder for the given format.
*
*
* @param format The format for which a decoder is required.
* @param format The format for which a decoder is required.
...
@@ -893,9 +842,9 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
...
@@ -893,9 +842,9 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
}
}
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
private
boolean
shouldWaitForKeys
(
boolean
bufferEncrypted
)
throws
ExoPlaybackException
{
DrmSession
<
ExoMediaCrypto
>
decoderDrmSession
=
this
.
decoderDrmSession
;
if
(
decoderDrmSession
==
null
if
(
decoderDrmSession
==
null
||
(!
bufferEncrypted
||
(!
bufferEncrypted
&&
decoderDrmSession
.
playClearSamplesWithoutKeys
()))
{
&&
(
playClearSamplesWithoutKeys
||
decoderDrmSession
.
playClearSamplesWithoutKeys
())))
{
return
false
;
return
false
;
}
}
@DrmSession
.
State
int
drmSessionState
=
decoderDrmSession
.
getState
();
@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 {
...
@@ -1167,8 +1167,7 @@ public final class AnalyticsCollectorTest {
videoRendererEventListener
,
videoRendererEventListener
,
audioRendererEventListener
,
audioRendererEventListener
,
textRendererOutput
,
textRendererOutput
,
metadataRendererOutput
,
metadataRendererOutput
)
->
drmSessionManager
)
->
new
Renderer
[]
{
new
Renderer
[]
{
new
FakeVideoRenderer
(
eventHandler
,
videoRendererEventListener
),
new
FakeVideoRenderer
(
eventHandler
,
videoRendererEventListener
),
new
FakeAudioRenderer
(
eventHandler
,
audioRendererEventListener
)
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;
...
@@ -32,7 +32,6 @@ import com.google.android.exoplayer2.RendererConfiguration;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.SimpleDecoder
;
import
com.google.android.exoplayer2.decoder.SimpleDecoder
;
import
com.google.android.exoplayer2.decoder.SimpleOutputBuffer
;
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.drm.ExoMediaCrypto
;
import
com.google.android.exoplayer2.testutil.FakeSampleStream
;
import
com.google.android.exoplayer2.testutil.FakeSampleStream
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -56,11 +55,10 @@ public class SimpleDecoderAudioRendererTest {
...
@@ -56,11 +55,10 @@ public class SimpleDecoderAudioRendererTest {
public
void
setUp
()
throws
Exception
{
public
void
setUp
()
throws
Exception
{
MockitoAnnotations
.
initMocks
(
this
);
MockitoAnnotations
.
initMocks
(
this
);
audioRenderer
=
audioRenderer
=
new
SimpleDecoderAudioRenderer
(
null
,
null
,
null
,
false
,
mockAudioSink
)
{
new
SimpleDecoderAudioRenderer
(
null
,
null
,
mockAudioSink
)
{
@Override
@Override
@FormatSupport
@FormatSupport
protected
int
supportsFormatInternal
(
protected
int
supportsFormatInternal
(
Format
format
)
{
@Nullable
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
,
Format
format
)
{
return
FORMAT_HANDLED
;
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 {
...
@@ -123,7 +123,7 @@ public class DownloadHelperTest {
FakeRenderer
audioRenderer
=
new
FakeRenderer
(
audioFormatUs
,
audioFormatZh
);
FakeRenderer
audioRenderer
=
new
FakeRenderer
(
audioFormatUs
,
audioFormatZh
);
FakeRenderer
textRenderer
=
new
FakeRenderer
(
textFormatUs
,
textFormatZh
);
FakeRenderer
textRenderer
=
new
FakeRenderer
(
textFormatUs
,
textFormatZh
);
RenderersFactory
renderersFactory
=
RenderersFactory
renderersFactory
=
(
handler
,
videoListener
,
audioListener
,
metadata
,
text
,
drm
)
->
(
handler
,
videoListener
,
audioListener
,
metadata
,
text
)
->
new
Renderer
[]
{
textRenderer
,
audioRenderer
,
videoRenderer
};
new
Renderer
[]
{
textRenderer
,
audioRenderer
,
videoRenderer
};
downloadHelper
=
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 {
...
@@ -35,11 +35,11 @@ public final class DownloadHelperTest {
ApplicationProvider
.
getApplicationContext
(),
ApplicationProvider
.
getApplicationContext
(),
Uri
.
parse
(
"http://uri"
),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
,
drm
)
->
new
Renderer
[
0
]);
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
]);
DownloadHelper
.
forDash
(
DownloadHelper
.
forDash
(
Uri
.
parse
(
"http://uri"
),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
,
drm
)
->
new
Renderer
[
0
],
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
/* drmSessionManager= */
DrmSessionManager
.
getDummyDrmSessionManager
(),
/* drmSessionManager= */
DrmSessionManager
.
getDummyDrmSessionManager
(),
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
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 {
...
@@ -34,11 +34,11 @@ public final class DownloadHelperTest {
ApplicationProvider
.
getApplicationContext
(),
ApplicationProvider
.
getApplicationContext
(),
Uri
.
parse
(
"http://uri"
),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
,
drm
)
->
new
Renderer
[
0
]);
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
]);
DownloadHelper
.
forHls
(
DownloadHelper
.
forHls
(
Uri
.
parse
(
"http://uri"
),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
,
drm
)
->
new
Renderer
[
0
],
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
/* drmSessionManager= */
null
,
/* drmSessionManager= */
null
,
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
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 {
...
@@ -34,11 +34,11 @@ public final class DownloadHelperTest {
ApplicationProvider
.
getApplicationContext
(),
ApplicationProvider
.
getApplicationContext
(),
Uri
.
parse
(
"http://uri"
),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
,
drm
)
->
new
Renderer
[
0
]);
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
]);
DownloadHelper
.
forSmoothStreaming
(
DownloadHelper
.
forSmoothStreaming
(
Uri
.
parse
(
"http://uri"
),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
,
drm
)
->
new
Renderer
[
0
],
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
/* drmSessionManager= */
null
,
/* drmSessionManager= */
null
,
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
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;
...
@@ -270,7 +270,7 @@ import java.util.List;
C
.
WIDEVINE_UUID
,
C
.
WIDEVINE_UUID
,
frameworkMediaDrm
,
frameworkMediaDrm
,
drmCallback
,
drmCallback
,
/*
optionalK
eyRequestParameters= */
null
,
/*
k
eyRequestParameters= */
null
,
/* multiSession= */
false
,
/* multiSession= */
false
,
DefaultDrmSessionManager
.
INITIAL_DRM_REQUEST_RETRY_COUNT
);
DefaultDrmSessionManager
.
INITIAL_DRM_REQUEST_RETRY_COUNT
);
if
(!
useL1Widevine
)
{
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;
...
@@ -27,8 +27,6 @@ import com.google.android.exoplayer2.Format;
import
com.google.android.exoplayer2.FormatHolder
;
import
com.google.android.exoplayer2.FormatHolder
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
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.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecSelector
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecSelector
;
import
com.google.android.exoplayer2.video.MediaCodecVideoRenderer
;
import
com.google.android.exoplayer2.video.MediaCodecVideoRenderer
;
...
@@ -53,8 +51,6 @@ import java.util.ArrayList;
...
@@ -53,8 +51,6 @@ import java.util.ArrayList;
Context
context
,
Context
context
,
@ExtensionRendererMode
int
extensionRendererMode
,
@ExtensionRendererMode
int
extensionRendererMode
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
boolean
enableDecoderFallback
,
boolean
enableDecoderFallback
,
Handler
eventHandler
,
Handler
eventHandler
,
VideoRendererEventListener
eventListener
,
VideoRendererEventListener
eventListener
,
...
@@ -65,8 +61,6 @@ import java.util.ArrayList;
...
@@ -65,8 +61,6 @@ import java.util.ArrayList;
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
allowedVideoJoiningTimeMs
,
allowedVideoJoiningTimeMs
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY
));
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY
));
...
@@ -92,8 +86,6 @@ import java.util.ArrayList;
...
@@ -92,8 +86,6 @@ import java.util.ArrayList;
Context
context
,
Context
context
,
MediaCodecSelector
mediaCodecSelector
,
MediaCodecSelector
mediaCodecSelector
,
long
allowedJoiningTimeMs
,
long
allowedJoiningTimeMs
,
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
boolean
playClearSamplesWithoutKeys
,
Handler
eventHandler
,
Handler
eventHandler
,
VideoRendererEventListener
eventListener
,
VideoRendererEventListener
eventListener
,
int
maxDroppedFrameCountToNotify
)
{
int
maxDroppedFrameCountToNotify
)
{
...
@@ -101,8 +93,6 @@ import java.util.ArrayList;
...
@@ -101,8 +93,6 @@ import java.util.ArrayList;
context
,
context
,
mediaCodecSelector
,
mediaCodecSelector
,
allowedJoiningTimeMs
,
allowedJoiningTimeMs
,
drmSessionManager
,
playClearSamplesWithoutKeys
,
eventHandler
,
eventHandler
,
eventListener
,
eventListener
,
maxDroppedFrameCountToNotify
);
maxDroppedFrameCountToNotify
);
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/DefaultRenderersFactoryAsserts.java
View file @
5c3c8034
...
@@ -93,7 +93,6 @@ public final class DefaultRenderersFactoryAsserts {
...
@@ -93,7 +93,6 @@ public final class DefaultRenderersFactoryAsserts {
new
VideoRendererEventListener
()
{},
new
VideoRendererEventListener
()
{},
new
AudioRendererEventListener
()
{},
new
AudioRendererEventListener
()
{},
(
List
<
Cue
>
cues
)
->
{},
(
List
<
Cue
>
cues
)
->
{},
(
Metadata
metadata
)
->
{},
(
Metadata
metadata
)
->
{});
/* drmSessionManager= */
null
);
}
}
}
}
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
...
@@ -371,8 +371,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
videoRendererEventListener
,
videoRendererEventListener
,
audioRendererEventListener
,
audioRendererEventListener
,
textRendererOutput
,
textRendererOutput
,
metadataRendererOutput
,
metadataRendererOutput
)
->
renderers
;
drmSessionManager
)
->
renderers
;
}
}
if
(
loadControl
==
null
)
{
if
(
loadControl
==
null
)
{
loadControl
=
new
DefaultLoadControl
();
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