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
d233c045
authored
May 20, 2020
by
bachinger
Committed by
tonihei
May 21, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Simplify DownloadHelper
PiperOrigin-RevId: 312467496
parent
b9157a9e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
286 additions
and
321 deletions
demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java
library/core/proguard-rules.txt
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.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
demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java
View file @
d233c045
...
@@ -24,7 +24,6 @@ import android.widget.Toast;
...
@@ -24,7 +24,6 @@ import android.widget.Toast;
import
androidx.annotation.NonNull
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.FragmentManager
;
import
androidx.fragment.app.FragmentManager
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.offline.Download
;
import
com.google.android.exoplayer2.offline.Download
;
...
@@ -106,7 +105,9 @@ public class DownloadTracker {
...
@@ -106,7 +105,9 @@ public class DownloadTracker {
}
}
startDownloadDialogHelper
=
startDownloadDialogHelper
=
new
StartDownloadDialogHelper
(
new
StartDownloadDialogHelper
(
fragmentManager
,
getDownloadHelper
(
mediaItem
,
renderersFactory
),
mediaItem
);
fragmentManager
,
DownloadHelper
.
forMediaItem
(
context
,
mediaItem
,
renderersFactory
,
dataSourceFactory
),
mediaItem
);
}
}
}
}
...
@@ -121,28 +122,6 @@ public class DownloadTracker {
...
@@ -121,28 +122,6 @@ public class DownloadTracker {
}
}
}
}
private
DownloadHelper
getDownloadHelper
(
MediaItem
mediaItem
,
RenderersFactory
renderersFactory
)
{
MediaItem
.
PlaybackProperties
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
@C
.
ContentType
int
type
=
Util
.
inferContentTypeWithMimeType
(
playbackProperties
.
uri
,
playbackProperties
.
mimeType
);
switch
(
type
)
{
case
C
.
TYPE_DASH
:
return
DownloadHelper
.
forDash
(
context
,
playbackProperties
.
uri
,
dataSourceFactory
,
renderersFactory
);
case
C
.
TYPE_SS
:
return
DownloadHelper
.
forSmoothStreaming
(
context
,
playbackProperties
.
uri
,
dataSourceFactory
,
renderersFactory
);
case
C
.
TYPE_HLS
:
return
DownloadHelper
.
forHls
(
context
,
playbackProperties
.
uri
,
dataSourceFactory
,
renderersFactory
);
case
C
.
TYPE_OTHER
:
return
DownloadHelper
.
forProgressive
(
context
,
playbackProperties
.
uri
);
default
:
throw
new
IllegalStateException
(
"Unsupported type: "
+
type
);
}
}
private
class
DownloadManagerListener
implements
DownloadManager
.
Listener
{
private
class
DownloadManagerListener
implements
DownloadManager
.
Listener
{
@Override
@Override
...
...
library/core/proguard-rules.txt
View file @
d233c045
...
@@ -62,7 +62,7 @@
...
@@ -62,7 +62,7 @@
<init>(android.net.Uri, java.util.List, com.google.android.exoplayer2.upstream.cache.CacheDataSource.Factory, java.util.concurrent.Executor);
<init>(android.net.Uri, java.util.List, com.google.android.exoplayer2.upstream.cache.CacheDataSource.Factory, java.util.concurrent.Executor);
}
}
# Constructors accessed via reflection in DefaultMediaSourceFactory
and DownloadHelper
# Constructors accessed via reflection in DefaultMediaSourceFactory
-dontnote com.google.android.exoplayer2.source.dash.DashMediaSource$Factory
-dontnote com.google.android.exoplayer2.source.dash.DashMediaSource$Factory
-keepclasseswithmembers class com.google.android.exoplayer2.source.dash.DashMediaSource$Factory {
-keepclasseswithmembers class com.google.android.exoplayer2.source.dash.DashMediaSource$Factory {
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
<init>(com.google.android.exoplayer2.upstream.DataSource$Factory);
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
View file @
d233c045
...
@@ -15,6 +15,9 @@
...
@@ -15,6 +15,9 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
offline
;
package
com
.
google
.
android
.
exoplayer2
.
offline
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
import
android.content.Context
;
import
android.content.Context
;
import
android.net.Uri
;
import
android.net.Uri
;
import
android.os.Handler
;
import
android.os.Handler
;
...
@@ -24,18 +27,18 @@ import android.util.SparseIntArray;
...
@@ -24,18 +27,18 @@ import android.util.SparseIntArray;
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.ExoPlaybackException
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
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.DrmSessionManager
;
import
com.google.android.exoplayer2.source.DefaultMediaSourceFactory
;
import
com.google.android.exoplayer2.source.MediaPeriod
;
import
com.google.android.exoplayer2.source.MediaPeriod
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller
;
import
com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller
;
import
com.google.android.exoplayer2.source.MediaSourceFactory
;
import
com.google.android.exoplayer2.source.ProgressiveMediaSource
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.chunk.MediaChunk
;
import
com.google.android.exoplayer2.source.chunk.MediaChunk
;
...
@@ -50,14 +53,13 @@ import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
...
@@ -50,14 +53,13 @@ import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
import
com.google.android.exoplayer2.upstream.Allocator
;
import
com.google.android.exoplayer2.upstream.Allocator
;
import
com.google.android.exoplayer2.upstream.BandwidthMeter
;
import
com.google.android.exoplayer2.upstream.BandwidthMeter
;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSource.Factory
;
import
com.google.android.exoplayer2.upstream.DefaultAllocator
;
import
com.google.android.exoplayer2.upstream.DefaultAllocator
;
import
com.google.android.exoplayer2.upstream.TransferListener
;
import
com.google.android.exoplayer2.upstream.TransferListener
;
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.Util
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.lang.reflect.Constructor
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.List
;
...
@@ -144,18 +146,6 @@ public final class DownloadHelper {
...
@@ -144,18 +146,6 @@ public final class DownloadHelper {
/** Thrown at an attempt to download live content. */
/** Thrown at an attempt to download live content. */
public
static
class
LiveContentUnsupportedException
extends
IOException
{}
public
static
class
LiveContentUnsupportedException
extends
IOException
{}
@Nullable
private
static
final
Constructor
<?
extends
MediaSourceFactory
>
DASH_FACTORY_CONSTRUCTOR
=
getConstructor
(
"com.google.android.exoplayer2.source.dash.DashMediaSource$Factory"
);
@Nullable
private
static
final
Constructor
<?
extends
MediaSourceFactory
>
SS_FACTORY_CONSTRUCTOR
=
getConstructor
(
"com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource$Factory"
);
@Nullable
private
static
final
Constructor
<?
extends
MediaSourceFactory
>
HLS_FACTORY_CONSTRUCTOR
=
getConstructor
(
"com.google.android.exoplayer2.source.hls.HlsMediaSource$Factory"
);
/**
/**
* Extracts renderer capabilities for the renderers created by the provided renderers factory.
* Extracts renderer capabilities for the renderers created by the provided renderers factory.
*
*
...
@@ -178,77 +168,25 @@ public final class DownloadHelper {
...
@@ -178,77 +168,25 @@ public final class DownloadHelper {
return
capabilities
;
return
capabilities
;
}
}
/** @deprecated Use {@link #for
Progressive(Context, Uri
)} */
/** @deprecated Use {@link #for
MediaItem(Context, MediaItem
)} */
@Deprecated
@Deprecated
@SuppressWarnings
(
"deprecation"
)
public
static
DownloadHelper
forProgressive
(
Uri
uri
)
{
return
forProgressive
(
uri
,
/* cacheKey= */
null
);
}
/**
* Creates a {@link DownloadHelper} for progressive streams.
*
* @param context Any {@link Context}.
* @param uri A stream {@link Uri}.
* @return A {@link DownloadHelper} for progressive streams.
*/
public
static
DownloadHelper
forProgressive
(
Context
context
,
Uri
uri
)
{
public
static
DownloadHelper
forProgressive
(
Context
context
,
Uri
uri
)
{
return
for
Progressive
(
context
,
uri
,
/* cacheKey= */
null
);
return
for
MediaItem
(
context
,
new
MediaItem
.
Builder
().
setUri
(
uri
).
build
()
);
}
}
/** @deprecated Use {@link #for
Progressive(Context, Uri, String
)} */
/** @deprecated Use {@link #for
MediaItem(Context, MediaItem
)} */
@Deprecated
@Deprecated
public
static
DownloadHelper
forProgressive
(
Uri
uri
,
@Nullable
String
cacheKey
)
{
return
new
DownloadHelper
(
DownloadRequest
.
TYPE_PROGRESSIVE
,
uri
,
cacheKey
,
/* mediaSource= */
null
,
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
,
/* rendererCapabilities= */
new
RendererCapabilities
[
0
]);
}
/**
* Creates a {@link DownloadHelper} for progressive streams.
*
* @param context Any {@link Context}.
* @param uri A stream {@link Uri}.
* @param cacheKey An optional cache key.
* @return A {@link DownloadHelper} for progressive streams.
*/
public
static
DownloadHelper
forProgressive
(
Context
context
,
Uri
uri
,
@Nullable
String
cacheKey
)
{
public
static
DownloadHelper
forProgressive
(
Context
context
,
Uri
uri
,
@Nullable
String
cacheKey
)
{
return
new
DownloadHelper
(
return
forMediaItem
(
DownloadRequest
.
TYPE_PROGRESSIVE
,
context
,
new
MediaItem
.
Builder
().
setUri
(
uri
).
setCustomCacheKey
(
cacheKey
).
build
());
uri
,
cacheKey
,
/* mediaSource= */
null
,
getDefaultTrackSelectorParameters
(
context
),
/* rendererCapabilities= */
new
RendererCapabilities
[
0
]);
}
/** @deprecated Use {@link #forDash(Context, Uri, Factory, RenderersFactory)} */
@Deprecated
public
static
DownloadHelper
forDash
(
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
)
{
return
forDash
(
uri
,
dataSourceFactory
,
renderersFactory
,
/* drmSessionManager= */
null
,
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
}
}
/**
/**
* Creates a {@link DownloadHelper} for DASH streams.
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
*
* DataSource.Factory)} instead.
* @param context Any {@link Context}.
* @param uri A manifest {@link Uri}.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @return A {@link DownloadHelper} for DASH streams.
* @throws IllegalStateException If the DASH module is missing.
*/
*/
@SuppressWarnings
(
"deprecation"
)
@Deprecated
public
static
DownloadHelper
forDash
(
public
static
DownloadHelper
forDash
(
Context
context
,
Context
context
,
Uri
uri
,
Uri
uri
,
...
@@ -263,62 +201,30 @@ public final class DownloadHelper {
...
@@ -263,62 +201,30 @@ public final class DownloadHelper {
}
}
/**
/**
* Creates a {@link DownloadHelper} for DASH streams.
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
*
* DataSource.Factory, DrmSessionManager)} instead.
* @param uri A manifest {@link Uri}.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @param drmSessionManager An optional {@link DrmSessionManager}. Used to help determine which
* tracks can be selected.
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
* downloading.
* @return A {@link DownloadHelper} for DASH streams.
* @throws IllegalStateException If the DASH module is missing.
*/
*/
@Deprecated
public
static
DownloadHelper
forDash
(
public
static
DownloadHelper
forDash
(
Uri
uri
,
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
@Nullable
DrmSessionManager
drmSessionManager
,
@Nullable
DrmSessionManager
drmSessionManager
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
)
{
DefaultTrackSelector
.
Parameters
trackSelectorParameters
)
{
return
new
DownloadHelper
(
return
forMediaItem
(
DownloadRequest
.
TYPE_DASH
,
new
MediaItem
.
Builder
().
setUri
(
uri
).
setMimeType
(
MimeTypes
.
APPLICATION_MPD
).
build
(),
uri
,
/* cacheKey= */
null
,
createMediaSourceInternal
(
DASH_FACTORY_CONSTRUCTOR
,
uri
,
dataSourceFactory
,
drmSessionManager
,
/* streamKeys= */
null
),
trackSelectorParameters
,
trackSelectorParameters
,
getRendererCapabilities
(
renderersFactory
));
}
/** @deprecated Use {@link #forHls(Context, Uri, Factory, RenderersFactory)} */
@Deprecated
public
static
DownloadHelper
forHls
(
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
)
{
return
forHls
(
uri
,
dataSourceFactory
,
renderersFactory
,
renderersFactory
,
/* drmSessionManager= */
null
,
dataSourceFactory
,
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
drmSessionManager
);
}
}
/**
/**
* Creates a {@link DownloadHelper} for HLS streams.
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
*
* DataSource.Factory)} instead.
* @param context Any {@link Context}.
* @param uri A playlist {@link Uri}.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the playlist.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @return A {@link DownloadHelper} for HLS streams.
* @throws IllegalStateException If the HLS module is missing.
*/
*/
@SuppressWarnings
(
"deprecation"
)
@Deprecated
public
static
DownloadHelper
forHls
(
public
static
DownloadHelper
forHls
(
Context
context
,
Context
context
,
Uri
uri
,
Uri
uri
,
...
@@ -333,40 +239,29 @@ public final class DownloadHelper {
...
@@ -333,40 +239,29 @@ public final class DownloadHelper {
}
}
/**
/**
* Creates a {@link DownloadHelper} for HLS streams.
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
*
* DataSource.Factory, DrmSessionManager)} instead.
* @param uri A playlist {@link Uri}.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the playlist.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @param drmSessionManager An optional {@link DrmSessionManager}. Used to help determine which
* tracks can be selected.
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
* downloading.
* @return A {@link DownloadHelper} for HLS streams.
* @throws IllegalStateException If the HLS module is missing.
*/
*/
@Deprecated
public
static
DownloadHelper
forHls
(
public
static
DownloadHelper
forHls
(
Uri
uri
,
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
@Nullable
DrmSessionManager
drmSessionManager
,
@Nullable
DrmSessionManager
drmSessionManager
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
)
{
DefaultTrackSelector
.
Parameters
trackSelectorParameters
)
{
return
new
DownloadHelper
(
return
forMediaItem
(
DownloadRequest
.
TYPE_HLS
,
new
MediaItem
.
Builder
().
setUri
(
uri
).
setMimeType
(
MimeTypes
.
APPLICATION_M3U8
).
build
(),
uri
,
/* cacheKey= */
null
,
createMediaSourceInternal
(
HLS_FACTORY_CONSTRUCTOR
,
uri
,
dataSourceFactory
,
drmSessionManager
,
/* streamKeys= */
null
),
trackSelectorParameters
,
trackSelectorParameters
,
getRendererCapabilities
(
renderersFactory
));
renderersFactory
,
dataSourceFactory
,
drmSessionManager
);
}
}
/** @deprecated Use {@link #forSmoothStreaming(Context, Uri, Factory, RenderersFactory)} */
/**
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
* DataSource.Factory)} instead.
*/
@SuppressWarnings
(
"deprecation"
)
@Deprecated
@Deprecated
public
static
DownloadHelper
forSmoothStreaming
(
public
static
DownloadHelper
forSmoothStreaming
(
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
)
{
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
)
{
...
@@ -379,16 +274,11 @@ public final class DownloadHelper {
...
@@ -379,16 +274,11 @@ public final class DownloadHelper {
}
}
/**
/**
* Creates a {@link DownloadHelper} for SmoothStreaming streams.
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
*
* DataSource.Factory)} instead.
* @param context Any {@link Context}.
* @param uri A manifest {@link Uri}.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @return A {@link DownloadHelper} for SmoothStreaming streams.
* @throws IllegalStateException If the SmoothStreaming module is missing.
*/
*/
@SuppressWarnings
(
"deprecation"
)
@Deprecated
public
static
DownloadHelper
forSmoothStreaming
(
public
static
DownloadHelper
forSmoothStreaming
(
Context
context
,
Context
context
,
Uri
uri
,
Uri
uri
,
...
@@ -403,37 +293,139 @@ public final class DownloadHelper {
...
@@ -403,37 +293,139 @@ public final class DownloadHelper {
}
}
/**
/**
* Creates a {@link DownloadHelper} for SmoothStreaming streams.
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
*
* DataSource.Factory, DrmSessionManager)} instead.
* @param uri A manifest {@link Uri}.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @param drmSessionManager An optional {@link DrmSessionManager}. Used to help determine which
* tracks can be selected.
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
* downloading.
* @return A {@link DownloadHelper} for SmoothStreaming streams.
* @throws IllegalStateException If the SmoothStreaming module is missing.
*/
*/
@Deprecated
public
static
DownloadHelper
forSmoothStreaming
(
public
static
DownloadHelper
forSmoothStreaming
(
Uri
uri
,
Uri
uri
,
DataSource
.
Factory
dataSourceFactory
,
DataSource
.
Factory
dataSourceFactory
,
RenderersFactory
renderersFactory
,
RenderersFactory
renderersFactory
,
@Nullable
DrmSessionManager
drmSessionManager
,
@Nullable
DrmSessionManager
drmSessionManager
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
)
{
DefaultTrackSelector
.
Parameters
trackSelectorParameters
)
{
return
forMediaItem
(
new
MediaItem
.
Builder
().
setUri
(
uri
).
setMimeType
(
MimeTypes
.
APPLICATION_SS
).
build
(),
trackSelectorParameters
,
renderersFactory
,
dataSourceFactory
,
drmSessionManager
);
}
/**
* Creates a {@link DownloadHelper} for the given progressive media item.
*
* @param context The context.
* @param mediaItem A {@link MediaItem}.
* @return A {@link DownloadHelper} for progressive streams.
* @throws IllegalStateException If the media item is of type DASH, HLS or SmoothStreaming.
*/
public
static
DownloadHelper
forMediaItem
(
Context
context
,
MediaItem
mediaItem
)
{
Assertions
.
checkArgument
(
DownloadRequest
.
TYPE_PROGRESSIVE
.
equals
(
getDownloadType
(
checkNotNull
(
mediaItem
.
playbackProperties
))));
return
forMediaItem
(
mediaItem
,
getDefaultTrackSelectorParameters
(
context
),
/* renderersFactory= */
null
,
/* dataSourceFactory= */
null
,
/* drmSessionManager= */
null
);
}
/**
* Creates a {@link DownloadHelper} for the given media item.
*
* @param context The context.
* @param mediaItem A {@link MediaItem}.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive
* streams. This argument is required for adaptive streams and ignored for progressive
* streams.
* @return A {@link DownloadHelper}.
* @throws IllegalStateException If the the corresponding module is missing for DASH, HLS or
* SmoothStreaming media items.
* @throws IllegalArgumentException If the {@code dataSourceFactory} is null for adaptive streams.
*/
public
static
DownloadHelper
forMediaItem
(
Context
context
,
MediaItem
mediaItem
,
@Nullable
RenderersFactory
renderersFactory
,
@Nullable
DataSource
.
Factory
dataSourceFactory
)
{
return
forMediaItem
(
mediaItem
,
getDefaultTrackSelectorParameters
(
context
),
renderersFactory
,
dataSourceFactory
,
/* drmSessionManager= */
null
);
}
/**
* Creates a {@link DownloadHelper} for the given media item.
*
* @param mediaItem A {@link MediaItem}.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
* downloading.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive
* streams. This argument is required for adaptive streams and ignored for progressive
* streams.
* @return A {@link DownloadHelper}.
* @throws IllegalStateException If the the corresponding module is missing for DASH, HLS or
* SmoothStreaming media items.
* @throws IllegalArgumentException If the {@code dataSourceFactory} is null for adaptive streams.
*/
public
static
DownloadHelper
forMediaItem
(
MediaItem
mediaItem
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
,
@Nullable
RenderersFactory
renderersFactory
,
@Nullable
DataSource
.
Factory
dataSourceFactory
)
{
return
forMediaItem
(
mediaItem
,
trackSelectorParameters
,
renderersFactory
,
dataSourceFactory
,
/* drmSessionManager= */
null
);
}
/**
* Creates a {@link DownloadHelper} for the given media item.
*
* @param mediaItem A {@link MediaItem}.
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
* selected.
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
* downloading.
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive
* streams. This argument is required for adaptive streams and ignored for progressive
* streams.
* @param drmSessionManager An optional {@link DrmSessionManager}. Used to help determine which
* tracks can be selected.
* @return A {@link DownloadHelper}.
* @throws IllegalStateException If the the corresponding module is missing for DASH, HLS or
* SmoothStreaming media items.
* @throws IllegalArgumentException If the {@code dataSourceFactory} is null for adaptive streams.
*/
public
static
DownloadHelper
forMediaItem
(
MediaItem
mediaItem
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
,
@Nullable
RenderersFactory
renderersFactory
,
@Nullable
DataSource
.
Factory
dataSourceFactory
,
@Nullable
DrmSessionManager
drmSessionManager
)
{
boolean
isProgressive
=
DownloadRequest
.
TYPE_PROGRESSIVE
.
equals
(
getDownloadType
(
checkNotNull
(
mediaItem
.
playbackProperties
)));
Assertions
.
checkArgument
(
isProgressive
||
dataSourceFactory
!=
null
);
return
new
DownloadHelper
(
return
new
DownloadHelper
(
DownloadRequest
.
TYPE_SS
,
mediaItem
,
uri
,
isProgressive
/* cacheKey= */
null
,
?
null
createMediaSourceInternal
(
:
createMediaSourceInternal
(
SS_FACTORY_CONSTRUCTOR
,
mediaItem
,
castNonNull
(
dataSourceFactory
),
drmSessionManager
),
uri
,
dataSourceFactory
,
drmSessionManager
,
/* streamKeys= */
null
),
trackSelectorParameters
,
trackSelectorParameters
,
getRendererCapabilities
(
renderersFactory
));
renderersFactory
!=
null
?
getRendererCapabilities
(
renderersFactory
)
:
new
RendererCapabilities
[
0
]);
}
}
/**
/**
...
@@ -459,35 +451,18 @@ public final class DownloadHelper {
...
@@ -459,35 +451,18 @@ public final class DownloadHelper {
DownloadRequest
downloadRequest
,
DownloadRequest
downloadRequest
,
DataSource
.
Factory
dataSourceFactory
,
DataSource
.
Factory
dataSourceFactory
,
@Nullable
DrmSessionManager
drmSessionManager
)
{
@Nullable
DrmSessionManager
drmSessionManager
)
{
@Nullable
Constructor
<?
extends
MediaSourceFactory
>
constructor
;
switch
(
downloadRequest
.
type
)
{
case
DownloadRequest
.
TYPE_DASH
:
constructor
=
DASH_FACTORY_CONSTRUCTOR
;
break
;
case
DownloadRequest
.
TYPE_SS
:
constructor
=
SS_FACTORY_CONSTRUCTOR
;
break
;
case
DownloadRequest
.
TYPE_HLS
:
constructor
=
HLS_FACTORY_CONSTRUCTOR
;
break
;
case
DownloadRequest
.
TYPE_PROGRESSIVE
:
return
new
ProgressiveMediaSource
.
Factory
(
dataSourceFactory
)
.
setCustomCacheKey
(
downloadRequest
.
customCacheKey
)
.
createMediaSource
(
downloadRequest
.
uri
);
default
:
throw
new
IllegalStateException
(
"Unsupported type: "
+
downloadRequest
.
type
);
}
return
createMediaSourceInternal
(
return
createMediaSourceInternal
(
constructor
,
new
MediaItem
.
Builder
()
downloadRequest
.
uri
,
.
setUri
(
downloadRequest
.
uri
)
.
setCustomCacheKey
(
downloadRequest
.
customCacheKey
)
.
setMimeType
(
getMimeType
(
downloadRequest
.
type
))
.
setStreamKeys
(
downloadRequest
.
streamKeys
)
.
build
(),
dataSourceFactory
,
dataSourceFactory
,
drmSessionManager
,
drmSessionManager
);
downloadRequest
.
streamKeys
);
}
}
private
final
String
downloadType
;
private
final
MediaItem
.
PlaybackProperties
playbackProperties
;
private
final
Uri
uri
;
@Nullable
private
final
String
cacheKey
;
@Nullable
private
final
MediaSource
mediaSource
;
@Nullable
private
final
MediaSource
mediaSource
;
private
final
DefaultTrackSelector
trackSelector
;
private
final
DefaultTrackSelector
trackSelector
;
private
final
RendererCapabilities
[]
rendererCapabilities
;
private
final
RendererCapabilities
[]
rendererCapabilities
;
...
@@ -506,9 +481,7 @@ public final class DownloadHelper {
...
@@ -506,9 +481,7 @@ public final class DownloadHelper {
/**
/**
* Creates download helper.
* Creates download helper.
*
*
* @param downloadType A download type. This value will be used as {@link DownloadRequest#type}.
* @param mediaItem The media item.
* @param uri A {@link Uri}.
* @param cacheKey An optional cache key.
* @param mediaSource A {@link MediaSource} for which tracks are selected, or null if no track
* @param mediaSource A {@link MediaSource} for which tracks are selected, or null if no track
* selection needs to be made.
* selection needs to be made.
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
...
@@ -517,15 +490,11 @@ public final class DownloadHelper {
...
@@ -517,15 +490,11 @@ public final class DownloadHelper {
* are selected.
* are selected.
*/
*/
public
DownloadHelper
(
public
DownloadHelper
(
String
downloadType
,
MediaItem
mediaItem
,
Uri
uri
,
@Nullable
String
cacheKey
,
@Nullable
MediaSource
mediaSource
,
@Nullable
MediaSource
mediaSource
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
,
RendererCapabilities
[]
rendererCapabilities
)
{
RendererCapabilities
[]
rendererCapabilities
)
{
this
.
downloadType
=
downloadType
;
this
.
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
this
.
uri
=
uri
;
this
.
cacheKey
=
cacheKey
;
this
.
mediaSource
=
mediaSource
;
this
.
mediaSource
=
mediaSource
;
this
.
trackSelector
=
this
.
trackSelector
=
new
DefaultTrackSelector
(
trackSelectorParameters
,
new
DownloadTrackSelection
.
Factory
());
new
DefaultTrackSelector
(
trackSelectorParameters
,
new
DownloadTrackSelection
.
Factory
());
...
@@ -766,7 +735,7 @@ public final class DownloadHelper {
...
@@ -766,7 +735,7 @@ public final class DownloadHelper {
* @return The built {@link DownloadRequest}.
* @return The built {@link DownloadRequest}.
*/
*/
public
DownloadRequest
getDownloadRequest
(
@Nullable
byte
[]
data
)
{
public
DownloadRequest
getDownloadRequest
(
@Nullable
byte
[]
data
)
{
return
getDownloadRequest
(
uri
.
toString
(),
data
);
return
getDownloadRequest
(
playbackProperties
.
uri
.
toString
(),
data
);
}
}
/**
/**
...
@@ -778,9 +747,15 @@ public final class DownloadHelper {
...
@@ -778,9 +747,15 @@ public final class DownloadHelper {
* @return The built {@link DownloadRequest}.
* @return The built {@link DownloadRequest}.
*/
*/
public
DownloadRequest
getDownloadRequest
(
String
id
,
@Nullable
byte
[]
data
)
{
public
DownloadRequest
getDownloadRequest
(
String
id
,
@Nullable
byte
[]
data
)
{
String
downloadType
=
getDownloadType
(
playbackProperties
);
if
(
mediaSource
==
null
)
{
if
(
mediaSource
==
null
)
{
return
new
DownloadRequest
(
return
new
DownloadRequest
(
id
,
downloadType
,
uri
,
/* streamKeys= */
Collections
.
emptyList
(),
cacheKey
,
data
);
id
,
downloadType
,
playbackProperties
.
uri
,
/* streamKeys= */
Collections
.
emptyList
(),
playbackProperties
.
customCacheKey
,
data
);
}
}
assertPreparedWithMedia
();
assertPreparedWithMedia
();
List
<
StreamKey
>
streamKeys
=
new
ArrayList
<>();
List
<
StreamKey
>
streamKeys
=
new
ArrayList
<>();
...
@@ -794,15 +769,21 @@ public final class DownloadHelper {
...
@@ -794,15 +769,21 @@ public final class DownloadHelper {
}
}
streamKeys
.
addAll
(
mediaPreparer
.
mediaPeriods
[
periodIndex
].
getStreamKeys
(
allSelections
));
streamKeys
.
addAll
(
mediaPreparer
.
mediaPeriods
[
periodIndex
].
getStreamKeys
(
allSelections
));
}
}
return
new
DownloadRequest
(
id
,
downloadType
,
uri
,
streamKeys
,
cacheKey
,
data
);
return
new
DownloadRequest
(
id
,
downloadType
,
playbackProperties
.
uri
,
streamKeys
,
playbackProperties
.
customCacheKey
,
data
);
}
}
// Initialization of array of Lists.
// Initialization of array of Lists.
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
"unchecked"
)
private
void
onMediaPrepared
()
{
private
void
onMediaPrepared
()
{
Assertions
.
checkNotNull
(
mediaPreparer
);
checkNotNull
(
mediaPreparer
);
Assertions
.
checkNotNull
(
mediaPreparer
.
mediaPeriods
);
checkNotNull
(
mediaPreparer
.
mediaPeriods
);
Assertions
.
checkNotNull
(
mediaPreparer
.
timeline
);
checkNotNull
(
mediaPreparer
.
timeline
);
int
periodCount
=
mediaPreparer
.
mediaPeriods
.
length
;
int
periodCount
=
mediaPreparer
.
mediaPeriods
.
length
;
int
rendererCount
=
rendererCapabilities
.
length
;
int
rendererCount
=
rendererCapabilities
.
length
;
trackSelectionsByPeriodAndRenderer
=
trackSelectionsByPeriodAndRenderer
=
...
@@ -822,16 +803,14 @@ public final class DownloadHelper {
...
@@ -822,16 +803,14 @@ public final class DownloadHelper {
trackGroupArrays
[
i
]
=
mediaPreparer
.
mediaPeriods
[
i
].
getTrackGroups
();
trackGroupArrays
[
i
]
=
mediaPreparer
.
mediaPeriods
[
i
].
getTrackGroups
();
TrackSelectorResult
trackSelectorResult
=
runTrackSelection
(
/* periodIndex= */
i
);
TrackSelectorResult
trackSelectorResult
=
runTrackSelection
(
/* periodIndex= */
i
);
trackSelector
.
onSelectionActivated
(
trackSelectorResult
.
info
);
trackSelector
.
onSelectionActivated
(
trackSelectorResult
.
info
);
mappedTrackInfos
[
i
]
=
Assertions
.
checkNotNull
(
trackSelector
.
getCurrentMappedTrackInfo
());
mappedTrackInfos
[
i
]
=
checkNotNull
(
trackSelector
.
getCurrentMappedTrackInfo
());
}
}
setPreparedWithMedia
();
setPreparedWithMedia
();
Assertions
.
checkNotNull
(
callbackHandler
)
checkNotNull
(
callbackHandler
).
post
(()
->
checkNotNull
(
callback
).
onPrepared
(
this
));
.
post
(()
->
Assertions
.
checkNotNull
(
callback
).
onPrepared
(
this
));
}
}
private
void
onMediaPreparationFailed
(
IOException
error
)
{
private
void
onMediaPreparationFailed
(
IOException
error
)
{
Assertions
.
checkNotNull
(
callbackHandler
)
checkNotNull
(
callbackHandler
).
post
(()
->
checkNotNull
(
callback
).
onPrepareError
(
this
,
error
));
.
post
(()
->
Assertions
.
checkNotNull
(
callback
).
onPrepareError
(
this
,
error
));
}
}
@RequiresNonNull
({
@RequiresNonNull
({
...
@@ -921,43 +900,43 @@ public final class DownloadHelper {
...
@@ -921,43 +900,43 @@ public final class DownloadHelper {
}
}
}
}
@Nullable
private
static
MediaSource
createMediaSourceInternal
(
private
static
Constructor
<?
extends
MediaSourceFactory
>
getConstructor
(
String
className
)
{
MediaItem
mediaItem
,
try
{
DataSource
.
Factory
dataSourceFactory
,
// LINT.IfChange
@Nullable
DrmSessionManager
drmSessionManager
)
{
Class
<?
extends
MediaSourceFactory
>
factoryClazz
=
return
new
DefaultMediaSourceFactory
(
dataSourceFactory
,
/* adSupportProvider= */
null
)
Class
.
forName
(
className
).
asSubclass
(
MediaSourceFactory
.
class
);
.
setDrmSessionManager
(
drmSessionManager
)
return
factoryClazz
.
getConstructor
(
Factory
.
class
);
.
createMediaSource
(
mediaItem
);
// LINT.ThenChange(../../../../../../../../proguard-rules.txt)
}
catch
(
ClassNotFoundException
e
)
{
// Expected if the app was built without the respective module.
return
null
;
}
catch
(
NoSuchMethodException
e
)
{
// Something is wrong with the library or the proguard configuration.
throw
new
IllegalStateException
(
e
);
}
}
}
private
static
MediaSource
createMediaSourceInternal
(
private
static
String
getDownloadType
(
MediaItem
.
PlaybackProperties
playbackProperties
)
{
@Nullable
Constructor
<?
extends
MediaSourceFactory
>
constructor
,
int
contentType
=
Uri
uri
,
Util
.
inferContentTypeWithMimeType
(
playbackProperties
.
uri
,
playbackProperties
.
mimeType
);
Factory
dataSourceFactory
,
switch
(
contentType
)
{
@Nullable
DrmSessionManager
drmSessionManager
,
case
C
.
TYPE_DASH
:
@Nullable
List
<
StreamKey
>
streamKeys
)
{
return
DownloadRequest
.
TYPE_DASH
;
if
(
constructor
==
null
)
{
case
C
.
TYPE_HLS
:
throw
new
IllegalStateException
(
"Module missing to create media source."
);
return
DownloadRequest
.
TYPE_HLS
;
case
C
.
TYPE_SS
:
return
DownloadRequest
.
TYPE_SS
;
default
:
return
DownloadRequest
.
TYPE_PROGRESSIVE
;
}
}
try
{
}
MediaSourceFactory
factory
=
constructor
.
newInstance
(
dataSourceFactory
);
if
(
drmSessionManager
!=
null
)
{
@Nullable
factory
.
setDrmSessionManager
(
drmSessionManager
);
private
static
String
getMimeType
(
String
downloadType
)
{
}
switch
(
downloadType
)
{
if
(
streamKeys
!=
null
)
{
case
DownloadRequest
.
TYPE_DASH
:
factory
.
setStreamKeys
(
streamKeys
);
return
MimeTypes
.
APPLICATION_MPD
;
}
case
DownloadRequest
.
TYPE_HLS
:
return
Assertions
.
checkNotNull
(
factory
.
createMediaSource
(
uri
));
return
MimeTypes
.
APPLICATION_M3U8
;
}
catch
(
Exception
e
)
{
case
DownloadRequest
.
TYPE_SS
:
throw
new
IllegalStateException
(
"Failed to instantiate media source."
,
e
);
return
MimeTypes
.
APPLICATION_SS
;
case
DownloadRequest
.
TYPE_PROGRESSIVE
:
return
null
;
default
:
throw
new
IllegalArgumentException
();
}
}
}
}
...
@@ -1115,7 +1094,7 @@ public final class DownloadHelper {
...
@@ -1115,7 +1094,7 @@ public final class DownloadHelper {
return
true
;
return
true
;
case
DOWNLOAD_HELPER_CALLBACK_MESSAGE_FAILED:
case
DOWNLOAD_HELPER_CALLBACK_MESSAGE_FAILED:
release
();
release
();
downloadHelper
.
onMediaPreparationFailed
((
IOException
)
Util
.
castNonNull
(
msg
.
obj
));
downloadHelper
.
onMediaPreparationFailed
((
IOException
)
castNonNull
(
msg
.
obj
));
return
true
;
return
true
;
default
:
default
:
return
false
;
return
false
;
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
View file @
d233c045
...
@@ -18,11 +18,11 @@ package com.google.android.exoplayer2.offline;
...
@@ -18,11 +18,11 @@ package com.google.android.exoplayer2.offline;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
org
.
robolectric
.
shadows
.
ShadowBaseLooper
.
shadowMainLooper
;
import
static
org
.
robolectric
.
shadows
.
ShadowBaseLooper
.
shadowMainLooper
;
import
android.net.Uri
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
...
@@ -59,8 +59,6 @@ import org.robolectric.annotation.LooperMode;
...
@@ -59,8 +59,6 @@ import org.robolectric.annotation.LooperMode;
@LooperMode
(
LooperMode
.
Mode
.
PAUSED
)
@LooperMode
(
LooperMode
.
Mode
.
PAUSED
)
public
class
DownloadHelperTest
{
public
class
DownloadHelperTest
{
private
static
final
String
TEST_DOWNLOAD_TYPE
=
"downloadType"
;
private
static
final
String
TEST_CACHE_KEY
=
"cacheKey"
;
private
static
final
Object
TEST_MANIFEST
=
new
Object
();
private
static
final
Object
TEST_MANIFEST
=
new
Object
();
private
static
final
Timeline
TEST_TIMELINE
=
private
static
final
Timeline
TEST_TIMELINE
=
new
FakeTimeline
(
new
FakeTimeline
(
...
@@ -86,7 +84,7 @@ public class DownloadHelperTest {
...
@@ -86,7 +84,7 @@ public class DownloadHelperTest {
private
static
TrackGroupArray
trackGroupArraySingle
;
private
static
TrackGroupArray
trackGroupArraySingle
;
private
static
TrackGroupArray
[]
trackGroupArrays
;
private
static
TrackGroupArray
[]
trackGroupArrays
;
private
static
Uri
testUri
;
private
static
MediaItem
testMediaItem
;
private
DownloadHelper
downloadHelper
;
private
DownloadHelper
downloadHelper
;
...
@@ -114,7 +112,8 @@ public class DownloadHelperTest {
...
@@ -114,7 +112,8 @@ public class DownloadHelperTest {
trackGroupArrays
=
trackGroupArrays
=
new
TrackGroupArray
[]
{
trackGroupArrayAll
,
trackGroupArraySingle
};
new
TrackGroupArray
[]
{
trackGroupArrayAll
,
trackGroupArraySingle
};
testUri
=
Uri
.
parse
(
"http://test.uri"
);
testMediaItem
=
new
MediaItem
.
Builder
().
setUri
(
"http://test.uri"
).
setCustomCacheKey
(
"cacheKey"
).
build
();
}
}
@Before
@Before
...
@@ -128,9 +127,7 @@ public class DownloadHelperTest {
...
@@ -128,9 +127,7 @@ public class DownloadHelperTest {
downloadHelper
=
downloadHelper
=
new
DownloadHelper
(
new
DownloadHelper
(
TEST_DOWNLOAD_TYPE
,
testMediaItem
,
testUri
,
TEST_CACHE_KEY
,
new
TestMediaSource
(),
new
TestMediaSource
(),
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
,
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
,
DownloadHelper
.
getRendererCapabilities
(
renderersFactory
));
DownloadHelper
.
getRendererCapabilities
(
renderersFactory
));
...
@@ -414,9 +411,10 @@ public class DownloadHelperTest {
...
@@ -414,9 +411,10 @@ public class DownloadHelperTest {
DownloadRequest
downloadRequest
=
downloadHelper
.
getDownloadRequest
(
data
);
DownloadRequest
downloadRequest
=
downloadHelper
.
getDownloadRequest
(
data
);
assertThat
(
downloadRequest
.
type
).
isEqualTo
(
TEST_DOWNLOAD_TYPE
);
assertThat
(
downloadRequest
.
type
).
isEqualTo
(
DownloadRequest
.
TYPE_PROGRESSIVE
);
assertThat
(
downloadRequest
.
uri
).
isEqualTo
(
testUri
);
assertThat
(
downloadRequest
.
uri
).
isEqualTo
(
testMediaItem
.
playbackProperties
.
uri
);
assertThat
(
downloadRequest
.
customCacheKey
).
isEqualTo
(
TEST_CACHE_KEY
);
assertThat
(
downloadRequest
.
customCacheKey
)
.
isEqualTo
(
testMediaItem
.
playbackProperties
.
customCacheKey
);
assertThat
(
downloadRequest
.
data
).
isEqualTo
(
data
);
assertThat
(
downloadRequest
.
data
).
isEqualTo
(
data
);
assertThat
(
downloadRequest
.
streamKeys
)
assertThat
(
downloadRequest
.
streamKeys
)
.
containsExactly
(
.
containsExactly
(
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadHelperTest.java
View file @
d233c045
...
@@ -15,13 +15,14 @@
...
@@ -15,13 +15,14 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
dash
.
offline
;
package
com
.
google
.
android
.
exoplayer2
.
source
.
dash
.
offline
;
import
android.net.Uri
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.offline.DownloadHelper
;
import
com.google.android.exoplayer2.offline.DownloadHelper
;
import
com.google.android.exoplayer2.testutil.FakeDataSource
;
import
com.google.android.exoplayer2.testutil.FakeDataSource
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -31,16 +32,16 @@ public final class DownloadHelperTest {
...
@@ -31,16 +32,16 @@ public final class DownloadHelperTest {
@Test
@Test
public
void
staticDownloadHelperForDash_doesNotThrow
()
{
public
void
staticDownloadHelperForDash_doesNotThrow
()
{
DownloadHelper
.
for
Dash
(
DownloadHelper
.
for
MediaItem
(
ApplicationProvider
.
getApplicationContext
(),
ApplicationProvider
.
getApplicationContext
(),
Uri
.
parse
(
"http://uri"
),
new
MediaItem
.
Builder
().
setUri
(
"http://uri"
).
setMimeType
(
MimeTypes
.
APPLICATION_MPD
).
build
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
]);
DownloadHelper
.
forDash
(
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
/* drmSessionManager= */
DrmSessionManager
.
getDummyDrmSessionManager
(),
new
FakeDataSource
.
Factory
());
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
DownloadHelper
.
forMediaItem
(
new
MediaItem
.
Builder
().
setUri
(
"http://uri"
).
setMimeType
(
MimeTypes
.
APPLICATION_MPD
).
build
(),
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
,
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
new
FakeDataSource
.
Factory
(),
/* drmSessionManager= */
DrmSessionManager
.
getDummyDrmSessionManager
());
}
}
}
}
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/DownloadHelperTest.java
View file @
d233c045
...
@@ -15,12 +15,13 @@
...
@@ -15,12 +15,13 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
hls
.
offline
;
package
com
.
google
.
android
.
exoplayer2
.
source
.
hls
.
offline
;
import
android.net.Uri
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.offline.DownloadHelper
;
import
com.google.android.exoplayer2.offline.DownloadHelper
;
import
com.google.android.exoplayer2.testutil.FakeDataSource
;
import
com.google.android.exoplayer2.testutil.FakeDataSource
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -30,16 +31,22 @@ public final class DownloadHelperTest {
...
@@ -30,16 +31,22 @@ public final class DownloadHelperTest {
@Test
@Test
public
void
staticDownloadHelperForHls_doesNotThrow
()
{
public
void
staticDownloadHelperForHls_doesNotThrow
()
{
DownloadHelper
.
for
Hls
(
DownloadHelper
.
for
MediaItem
(
ApplicationProvider
.
getApplicationContext
(),
ApplicationProvider
.
getApplicationContext
(),
Uri
.
parse
(
"http://uri"
),
new
MediaItem
.
Builder
()
new
FakeDataSource
.
Factory
(),
.
setUri
(
"http://uri"
)
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
]);
.
setMimeType
(
MimeTypes
.
APPLICATION_M3U8
)
DownloadHelper
.
forHls
(
.
build
(),
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
/* drmSessionManager= */
null
,
new
FakeDataSource
.
Factory
());
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
DownloadHelper
.
forMediaItem
(
new
MediaItem
.
Builder
()
.
setUri
(
"http://uri"
)
.
setMimeType
(
MimeTypes
.
APPLICATION_M3U8
)
.
build
(),
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
,
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
new
FakeDataSource
.
Factory
(),
/* drmSessionManager= */
null
);
}
}
}
}
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/DownloadHelperTest.java
View file @
d233c045
...
@@ -15,12 +15,13 @@
...
@@ -15,12 +15,13 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
smoothstreaming
.
offline
;
package
com
.
google
.
android
.
exoplayer2
.
source
.
smoothstreaming
.
offline
;
import
android.net.Uri
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.offline.DownloadHelper
;
import
com.google.android.exoplayer2.offline.DownloadHelper
;
import
com.google.android.exoplayer2.testutil.FakeDataSource
;
import
com.google.android.exoplayer2.testutil.FakeDataSource
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -30,16 +31,16 @@ public final class DownloadHelperTest {
...
@@ -30,16 +31,16 @@ public final class DownloadHelperTest {
@Test
@Test
public
void
staticDownloadHelperForSmoothStreaming_doesNotThrow
()
{
public
void
staticDownloadHelperForSmoothStreaming_doesNotThrow
()
{
DownloadHelper
.
for
SmoothStreaming
(
DownloadHelper
.
for
MediaItem
(
ApplicationProvider
.
getApplicationContext
(),
ApplicationProvider
.
getApplicationContext
(),
Uri
.
parse
(
"http://uri"
),
new
MediaItem
.
Builder
().
setUri
(
"http://uri"
).
setMimeType
(
MimeTypes
.
APPLICATION_SS
).
build
(),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
]);
DownloadHelper
.
forSmoothStreaming
(
Uri
.
parse
(
"http://uri"
),
new
FakeDataSource
.
Factory
(),
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
/* drmSessionManager= */
null
,
new
FakeDataSource
.
Factory
());
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
);
DownloadHelper
.
forMediaItem
(
new
MediaItem
.
Builder
().
setUri
(
"http://uri"
).
setMimeType
(
MimeTypes
.
APPLICATION_SS
).
build
(),
DownloadHelper
.
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
,
(
handler
,
videoListener
,
audioListener
,
text
,
metadata
)
->
new
Renderer
[
0
],
new
FakeDataSource
.
Factory
(),
/* drmSessionManager= */
null
);
}
}
}
}
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