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
f4287ed0
authored
Aug 03, 2020
by
christosts
Committed by
kim-vde
Aug 07, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add a builder for DownloadRequest
PiperOrigin-RevId: 324616617
parent
129ef7cc
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
259 additions
and
283 deletions
RELEASENOTES.md
library/core/src/main/java/com/google/android/exoplayer2/offline/ActionFile.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DefaultDownloadIndex.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadRequest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloaderFactoryTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadManagerTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadRequestTest.java
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DashDownloaderTest.java
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadManagerDashTest.java
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadServiceDashTest.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/HlsDownloaderTest.java
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/SsDownloaderTest.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/DownloadBuilder.java
RELEASENOTES.md
View file @
f4287ed0
...
...
@@ -168,6 +168,7 @@
[
#6725
](
https://github.com/google/ExoPlayer/issues/6725
)
,
[
#7066
](
https://github.com/google/ExoPlayer/issues/7066
)
).
*
Downloads and caching:
*
Add builder in
`DownloadRequest`
.
*
Support passing an
`Executor`
to
`DefaultDownloaderFactory`
on which
data downloads are performed.
*
Parallelize and merge downloads in
`SegmentDownloader`
to improve
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/ActionFile.java
View file @
f4287ed0
...
...
@@ -140,10 +140,13 @@ import java.util.List;
// Remove actions are not supported anymore.
throw
new
UnsupportedRequestException
();
}
// keySetId and mimeType were not supported. Set keySetId to null and try to infer the mime
// type from the download type.
return
new
DownloadRequest
(
id
,
uri
,
inferMimeType
(
downloadType
),
keys
,
/* keySetId= */
null
,
customCacheKey
,
data
);
return
new
DownloadRequest
.
Builder
(
id
,
uri
)
.
setMimeType
(
inferMimeType
(
downloadType
))
.
setStreamKeys
(
keys
)
.
setCustomCacheKey
(
customCacheKey
)
.
setData
(
data
)
.
build
();
}
private
static
StreamKey
readKey
(
String
type
,
int
version
,
DataInputStream
input
)
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DefaultDownloadIndex.java
View file @
f4287ed0
...
...
@@ -434,14 +434,15 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
private
static
Download
getDownloadForCurrentRow
(
Cursor
cursor
)
{
byte
[]
keySetId
=
cursor
.
getBlob
(
COLUMN_INDEX_KEY_SET_ID
);
DownloadRequest
request
=
new
DownloadRequest
(
/* id= */
cursor
.
getString
(
COLUMN_INDEX_ID
),
/* uri= */
Uri
.
parse
(
cursor
.
getString
(
COLUMN_INDEX_URI
)),
/* mimeType= */
cursor
.
getString
(
COLUMN_INDEX_MIME_TYPE
),
/* streamKeys= */
decodeStreamKeys
(
cursor
.
getString
(
COLUMN_INDEX_STREAM_KEYS
)),
/* keySetId= */
keySetId
.
length
>
0
?
keySetId
:
null
,
/* customCacheKey= */
cursor
.
getString
(
COLUMN_INDEX_CUSTOM_CACHE_KEY
),
/* data= */
cursor
.
getBlob
(
COLUMN_INDEX_DATA
));
new
DownloadRequest
.
Builder
(
/* id= */
cursor
.
getString
(
COLUMN_INDEX_ID
),
/* uri= */
Uri
.
parse
(
cursor
.
getString
(
COLUMN_INDEX_URI
)))
.
setMimeType
(
cursor
.
getString
(
COLUMN_INDEX_MIME_TYPE
))
.
setStreamKeys
(
decodeStreamKeys
(
cursor
.
getString
(
COLUMN_INDEX_STREAM_KEYS
)))
.
setKeySetId
(
keySetId
.
length
>
0
?
keySetId
:
null
)
.
setCustomCacheKey
(
cursor
.
getString
(
COLUMN_INDEX_CUSTOM_CACHE_KEY
))
.
setData
(
cursor
.
getBlob
(
COLUMN_INDEX_DATA
))
.
build
();
DownloadProgress
downloadProgress
=
new
DownloadProgress
();
downloadProgress
.
bytesDownloaded
=
cursor
.
getLong
(
COLUMN_INDEX_BYTES_DOWNLOADED
);
downloadProgress
.
percentDownloaded
=
cursor
.
getFloat
(
COLUMN_INDEX_PERCENT_DOWNLOADED
);
...
...
@@ -485,14 +486,13 @@ public final class DefaultDownloadIndex implements WritableDownloadIndex {
* 13 bytes_downloaded integer
*/
DownloadRequest
request
=
new
DownloadRequest
(
/* id= */
cursor
.
getString
(
0
),
/* uri= */
Uri
.
parse
(
cursor
.
getString
(
2
)),
/* mimeType= */
inferMimeType
(
cursor
.
getString
(
1
)),
/* streamKeys= */
decodeStreamKeys
(
cursor
.
getString
(
3
)),
/* keySetId= */
null
,
/* customCacheKey= */
cursor
.
getString
(
4
),
/* data= */
cursor
.
getBlob
(
5
));
new
DownloadRequest
.
Builder
(
/* id= */
cursor
.
getString
(
0
),
/* uri= */
Uri
.
parse
(
cursor
.
getString
(
2
)))
.
setMimeType
(
inferMimeType
(
cursor
.
getString
(
1
)))
.
setStreamKeys
(
decodeStreamKeys
(
cursor
.
getString
(
3
)))
.
setCustomCacheKey
(
cursor
.
getString
(
4
))
.
setData
(
cursor
.
getBlob
(
5
))
.
build
();
DownloadProgress
downloadProgress
=
new
DownloadProgress
();
downloadProgress
.
bytesDownloaded
=
cursor
.
getLong
(
13
);
downloadProgress
.
percentDownloaded
=
cursor
.
getFloat
(
12
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
View file @
f4287ed0
...
...
@@ -745,14 +745,11 @@ public final class DownloadHelper {
public
DownloadRequest
getDownloadRequest
(
String
id
,
@Nullable
byte
[]
data
)
{
if
(
mediaSource
==
null
)
{
// TODO: add support for DRM (keySetId) [Internal ref: b/158980798]
return
new
DownloadRequest
(
id
,
playbackProperties
.
uri
,
playbackProperties
.
mimeType
,
/* streamKeys= */
Collections
.
emptyList
(),
/* keySetId= */
null
,
playbackProperties
.
customCacheKey
,
data
);
return
new
DownloadRequest
.
Builder
(
id
,
playbackProperties
.
uri
)
.
setMimeType
(
playbackProperties
.
mimeType
)
.
setCustomCacheKey
(
playbackProperties
.
customCacheKey
)
.
setData
(
data
)
.
build
();
}
assertPreparedWithMedia
();
List
<
StreamKey
>
streamKeys
=
new
ArrayList
<>();
...
...
@@ -767,14 +764,12 @@ public final class DownloadHelper {
streamKeys
.
addAll
(
mediaPreparer
.
mediaPeriods
[
periodIndex
].
getStreamKeys
(
allSelections
));
}
// TODO: add support for DRM (keySetId) [Internal ref: b/158980798]
return
new
DownloadRequest
(
id
,
playbackProperties
.
uri
,
playbackProperties
.
mimeType
,
streamKeys
,
/* keySetId= */
null
,
playbackProperties
.
customCacheKey
,
data
);
return
new
DownloadRequest
.
Builder
(
id
,
playbackProperties
.
uri
)
.
setMimeType
(
playbackProperties
.
mimeType
)
.
setStreamKeys
(
streamKeys
)
.
setCustomCacheKey
(
playbackProperties
.
customCacheKey
)
.
setData
(
data
)
.
build
();
}
// Initialization of array of Lists.
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadRequest.java
View file @
f4287ed0
...
...
@@ -24,6 +24,7 @@ import androidx.annotation.Nullable;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.common.collect.ImmutableList
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
...
...
@@ -36,6 +37,64 @@ public final class DownloadRequest implements Parcelable {
/** Thrown when the encoded request data belongs to an unsupported request type. */
public
static
class
UnsupportedRequestException
extends
IOException
{}
/** A builder for download requests. */
public
static
class
Builder
{
private
final
String
id
;
private
final
Uri
uri
;
@Nullable
private
String
mimeType
;
@Nullable
private
List
<
StreamKey
>
streamKeys
;
@Nullable
private
byte
[]
keySetId
;
@Nullable
private
String
customCacheKey
;
@Nullable
private
byte
[]
data
;
/** Creates a new instance with the specified id and uri. */
public
Builder
(
String
id
,
Uri
uri
)
{
this
.
id
=
id
;
this
.
uri
=
uri
;
}
/** Sets the {@link DownloadRequest#mimeType}. */
public
Builder
setMimeType
(
@Nullable
String
mimeType
)
{
this
.
mimeType
=
mimeType
;
return
this
;
}
/** Sets the {@link DownloadRequest#streamKeys}. */
public
Builder
setStreamKeys
(
@Nullable
List
<
StreamKey
>
streamKeys
)
{
this
.
streamKeys
=
streamKeys
;
return
this
;
}
/** Sets the {@link DownloadRequest#keySetId}. */
public
Builder
setKeySetId
(
@Nullable
byte
[]
keySetId
)
{
this
.
keySetId
=
keySetId
;
return
this
;
}
/** Sets the {@link DownloadRequest#customCacheKey}. */
public
Builder
setCustomCacheKey
(
@Nullable
String
customCacheKey
)
{
this
.
customCacheKey
=
customCacheKey
;
return
this
;
}
/** Sets the {@link DownloadRequest#data}. */
public
Builder
setData
(
@Nullable
byte
[]
data
)
{
this
.
data
=
data
;
return
this
;
}
public
DownloadRequest
build
()
{
return
new
DownloadRequest
(
id
,
uri
,
mimeType
,
streamKeys
!=
null
?
streamKeys
:
ImmutableList
.
of
(),
keySetId
,
customCacheKey
,
data
);
}
}
/** The unique content id. */
public
final
String
id
;
/** The uri being downloaded. */
...
...
@@ -66,7 +125,7 @@ public final class DownloadRequest implements Parcelable {
* @param customCacheKey See {@link #customCacheKey}.
* @param data See {@link #data}.
*/
p
ublic
DownloadRequest
(
p
rivate
DownloadRequest
(
String
id
,
Uri
uri
,
@Nullable
String
mimeType
,
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileTest.java
View file @
f4287ed0
...
...
@@ -26,7 +26,6 @@ import com.google.android.exoplayer2.util.Util;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.util.Collections
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.Before
;
...
...
@@ -126,13 +125,9 @@ public class ActionFileTest {
}
private
static
DownloadRequest
buildExpectedRequest
(
Uri
uri
,
byte
[]
data
)
{
return
new
DownloadRequest
(
/* id= */
uri
.
toString
(),
uri
,
/* mimeType= */
MimeTypes
.
VIDEO_UNKNOWN
,
/* streamKeys= */
Collections
.
emptyList
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
data
);
return
new
DownloadRequest
.
Builder
(
/* id= */
uri
.
toString
(),
uri
)
.
setMimeType
(
MimeTypes
.
VIDEO_UNKNOWN
)
.
setData
(
data
)
.
build
();
}
}
library/core/src/test/java/com/google/android/exoplayer2/offline/ActionFileUpgradeUtilTest.java
View file @
f4287ed0
...
...
@@ -66,23 +66,18 @@ public class ActionFileUpgradeUtilTest {
output
.
write
(
actionFileBytes
);
}
DownloadRequest
expectedRequest1
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/1/video.mp4"
,
Uri
.
parse
(
"http://www.test.com/1/video.mp4"
),
/* mimeType= */
MimeTypes
.
VIDEO_UNKNOWN
,
/* streamKeys= */
ImmutableList
.
of
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/1/video.mp4"
,
Uri
.
parse
(
"http://www.test.com/1/video.mp4"
))
.
setMimeType
(
MimeTypes
.
VIDEO_UNKNOWN
)
.
build
();
DownloadRequest
expectedRequest2
=
new
DownloadRequest
(
/* id= */
"customCacheKey"
,
Uri
.
parse
(
"http://www.test.com/2/video.mp4"
),
/* mimeType= */
MimeTypes
.
VIDEO_UNKNOWN
,
/* streamKeys= */
ImmutableList
.
of
(),
/* keySetId= */
null
,
/* customCacheKey= */
"customCacheKey"
,
/* data= */
new
byte
[]
{
0
,
1
,
2
,
3
});
new
DownloadRequest
.
Builder
(
/* id= */
"customCacheKey"
,
Uri
.
parse
(
"http://www.test.com/2/video.mp4"
))
.
setMimeType
(
MimeTypes
.
VIDEO_UNKNOWN
)
.
setCustomCacheKey
(
"customCacheKey"
)
.
setData
(
new
byte
[]
{
0
,
1
,
2
,
3
})
.
build
();
ActionFileUpgradeUtil
.
upgradeAndDelete
(
tempFile
,
...
...
@@ -106,25 +101,22 @@ public class ActionFileUpgradeUtilTest {
output
.
write
(
actionFileBytes
);
}
DownloadRequest
expectedRequest1
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/1/manifest.mpd"
,
Uri
.
parse
(
"http://www.test.com/1/manifest.mpd"
),
MimeTypes
.
APPLICATION_MPD
,
/* streamKeys= */
ImmutableList
.
of
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/1/manifest.mpd"
,
Uri
.
parse
(
"http://www.test.com/1/manifest.mpd"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_MPD
)
.
build
();
DownloadRequest
expectedRequest2
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/2/manifest.mpd"
,
Uri
.
parse
(
"http://www.test.com/2/manifest.mpd"
),
MimeTypes
.
APPLICATION_MPD
,
ImmutableList
.
of
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
),
new
StreamKey
(
/* groupIndex= */
1
,
/* trackIndex= */
1
)
),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
new
byte
[]
{
0
,
1
,
2
,
3
}
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/2/manifest.mpd"
,
Uri
.
parse
(
"http://www.test.com/2/manifest.mpd"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_MPD
)
.
setStreamKeys
(
ImmutableList
.
of
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
),
new
StreamKey
(
/* groupIndex= */
1
,
/* trackIndex= */
1
)))
.
setData
(
new
byte
[]
{
0
,
1
,
2
,
3
})
.
build
(
);
ActionFileUpgradeUtil
.
upgradeAndDelete
(
tempFile
,
...
...
@@ -148,25 +140,22 @@ public class ActionFileUpgradeUtilTest {
output
.
write
(
actionFileBytes
);
}
DownloadRequest
expectedRequest1
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/1/manifest.m3u8"
,
Uri
.
parse
(
"http://www.test.com/1/manifest.m3u8"
),
MimeTypes
.
APPLICATION_M3U8
,
/* streamKeys= */
ImmutableList
.
of
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/1/manifest.m3u8"
,
Uri
.
parse
(
"http://www.test.com/1/manifest.m3u8"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_M3U8
)
.
build
();
DownloadRequest
expectedRequest2
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/2/manifest.m3u8"
,
Uri
.
parse
(
"http://www.test.com/2/manifest.m3u8"
),
MimeTypes
.
APPLICATION_M3U8
,
ImmutableList
.
of
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
),
new
StreamKey
(
/* groupIndex= */
1
,
/* trackIndex= */
1
)
),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
new
byte
[]
{
0
,
1
,
2
,
3
}
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/2/manifest.m3u8"
,
Uri
.
parse
(
"http://www.test.com/2/manifest.m3u8"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_M3U8
)
.
setStreamKeys
(
ImmutableList
.
of
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
),
new
StreamKey
(
/* groupIndex= */
1
,
/* trackIndex= */
1
)))
.
setData
(
new
byte
[]
{
0
,
1
,
2
,
3
})
.
build
(
);
ActionFileUpgradeUtil
.
upgradeAndDelete
(
tempFile
,
...
...
@@ -190,25 +179,22 @@ public class ActionFileUpgradeUtilTest {
output
.
write
(
actionFileBytes
);
}
DownloadRequest
expectedRequest1
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/1/video.ism/manifest"
,
Uri
.
parse
(
"http://www.test.com/1/video.ism/manifest"
),
MimeTypes
.
APPLICATION_SS
,
/* streamKeys= */
ImmutableList
.
of
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/1/video.ism/manifest"
,
Uri
.
parse
(
"http://www.test.com/1/video.ism/manifest"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_SS
)
.
build
();
DownloadRequest
expectedRequest2
=
new
DownloadRequest
(
/* id= */
"http://www.test.com/2/video.ism/manifest"
,
Uri
.
parse
(
"http://www.test.com/2/video.ism/manifest"
),
MimeTypes
.
APPLICATION_SS
,
ImmutableList
.
of
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
),
new
StreamKey
(
/* groupIndex= */
1
,
/* trackIndex= */
1
)
),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
new
byte
[]
{
0
,
1
,
2
,
3
}
);
new
DownloadRequest
.
Builder
(
/* id= */
"http://www.test.com/2/video.ism/manifest"
,
Uri
.
parse
(
"http://www.test.com/2/video.ism/manifest"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_SS
)
.
setStreamKeys
(
ImmutableList
.
of
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
),
new
StreamKey
(
/* groupIndex= */
1
,
/* trackIndex= */
1
)))
.
setData
(
new
byte
[]
{
0
,
1
,
2
,
3
})
.
build
(
);
ActionFileUpgradeUtil
.
upgradeAndDelete
(
tempFile
,
...
...
@@ -225,16 +211,15 @@ public class ActionFileUpgradeUtilTest {
@Test
public
void
mergeRequest_nonExistingDownload_createsNewDownload
()
throws
IOException
{
DownloadRequest
request
=
new
DownloadRequest
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
),
/* mimeType= */
null
,
ImmutableList
.
of
(
new
StreamKey
(
/* periodIndex= */
0
,
/* groupIndex= */
1
,
/* trackIndex= */
2
),
new
StreamKey
(
/* periodIndex= */
3
,
/* groupIndex= */
4
,
/* trackIndex= */
5
)),
/* keySetId= */
new
byte
[]
{
1
,
2
,
3
,
4
},
/* customCacheKey= */
"key123"
,
/* data= */
new
byte
[]
{
1
,
2
,
3
,
4
});
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
))
.
setStreamKeys
(
ImmutableList
.
of
(
new
StreamKey
(
/* periodIndex= */
0
,
/* groupIndex= */
1
,
/* trackIndex= */
2
),
new
StreamKey
(
/* periodIndex= */
3
,
/* groupIndex= */
4
,
/* trackIndex= */
5
)))
.
setKeySetId
(
new
byte
[]
{
1
,
2
,
3
,
4
})
.
setCustomCacheKey
(
"key123"
)
.
setData
(
new
byte
[]
{
1
,
2
,
3
,
4
})
.
build
();
ActionFileUpgradeUtil
.
mergeRequest
(
request
,
downloadIndex
,
/* addNewDownloadAsCompleted= */
false
,
NOW_MS
);
...
...
@@ -249,23 +234,20 @@ public class ActionFileUpgradeUtilTest {
StreamKey
streamKey2
=
new
StreamKey
(
/* periodIndex= */
0
,
/* groupIndex= */
1
,
/* trackIndex= */
2
);
DownloadRequest
request1
=
new
DownloadRequest
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download1"
),
/* mimeType= */
null
,
ImmutableList
.
of
(
streamKey1
),
/* keySetId= */
new
byte
[]
{
1
,
2
,
3
,
4
},
/* customCacheKey= */
"key123"
,
/* data= */
new
byte
[]
{
1
,
2
,
3
,
4
});
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download1"
))
.
setStreamKeys
(
ImmutableList
.
of
(
streamKey1
))
.
setKeySetId
(
new
byte
[]
{
1
,
2
,
3
,
4
})
.
setCustomCacheKey
(
"key123"
)
.
setData
(
new
byte
[]
{
1
,
2
,
3
,
4
})
.
build
();
DownloadRequest
request2
=
new
DownloadRequest
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download2"
),
/* mimeType= */
MimeTypes
.
APPLICATION_MP4
,
ImmutableList
.
of
(
streamKey2
),
/* keySetId= */
new
byte
[]
{
5
,
4
,
3
,
2
,
1
},
/* customCacheKey= */
"key345"
,
/* data= */
new
byte
[]
{
5
,
4
,
3
,
2
,
1
});
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download2"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_MP4
)
.
setStreamKeys
(
ImmutableList
.
of
(
streamKey2
))
.
setKeySetId
(
new
byte
[]
{
5
,
4
,
3
,
2
,
1
})
.
setCustomCacheKey
(
"key345"
)
.
setData
(
new
byte
[]
{
5
,
4
,
3
,
2
,
1
})
.
build
();
ActionFileUpgradeUtil
.
mergeRequest
(
request1
,
downloadIndex
,
/* addNewDownloadAsCompleted= */
false
,
NOW_MS
);
...
...
@@ -290,23 +272,19 @@ public class ActionFileUpgradeUtilTest {
StreamKey
streamKey2
=
new
StreamKey
(
/* periodIndex= */
0
,
/* groupIndex= */
1
,
/* trackIndex= */
2
);
DownloadRequest
request1
=
new
DownloadRequest
(
/* id= */
"id1"
,
Uri
.
parse
(
"https://www.test.com/download1"
),
/* mimeType= */
null
,
ImmutableList
.
of
(
streamKey1
),
/* keySetId= */
new
byte
[]
{
1
,
2
,
3
,
4
},
/* customCacheKey= */
"key123"
,
/* data= */
new
byte
[]
{
1
,
2
,
3
,
4
});
new
DownloadRequest
.
Builder
(
/* id= */
"id1"
,
Uri
.
parse
(
"https://www.test.com/download1"
))
.
setStreamKeys
(
ImmutableList
.
of
(
streamKey1
))
.
setKeySetId
(
new
byte
[]
{
1
,
2
,
3
,
4
})
.
setCustomCacheKey
(
"key123"
)
.
setData
(
new
byte
[]
{
1
,
2
,
3
,
4
})
.
build
();
DownloadRequest
request2
=
new
DownloadRequest
(
/* id= */
"id2"
,
Uri
.
parse
(
"https://www.test.com/download2"
),
/* mimeType= */
null
,
ImmutableList
.
of
(
streamKey2
),
/* keySetId= */
new
byte
[]
{
5
,
4
,
3
,
2
,
1
},
/* customCacheKey= */
"key123"
,
/* data= */
new
byte
[]
{
5
,
4
,
3
,
2
,
1
});
new
DownloadRequest
.
Builder
(
/* id= */
"id2"
,
Uri
.
parse
(
"https://www.test.com/download2"
))
.
setStreamKeys
(
ImmutableList
.
of
(
streamKey2
))
.
setKeySetId
(
new
byte
[]
{
5
,
4
,
3
,
2
,
1
})
.
setCustomCacheKey
(
"key456"
)
.
setData
(
new
byte
[]
{
5
,
4
,
3
,
2
,
1
})
.
build
();
ActionFileUpgradeUtil
.
mergeRequest
(
request1
,
downloadIndex
,
/* addNewDownloadAsCompleted= */
false
,
NOW_MS
);
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloadIndexTest.java
View file @
f4287ed0
...
...
@@ -385,15 +385,15 @@ public class DefaultDownloadIndexTest {
private
static
Download
createDownload
(
String
uri
,
String
mimeType
,
List
<
StreamKey
>
streamKeys
,
@Nullable
String
customCacheKey
)
{
DownloadRequest
downloadRequest
=
new
DownloadRequest
.
Builder
(
uri
,
Uri
.
parse
(
uri
))
.
setMimeType
(
mimeType
)
.
setStreamKeys
(
streamKeys
)
.
setCustomCacheKey
(
customCacheKey
)
.
setData
(
new
byte
[]
{
0
,
1
,
2
,
3
})
.
build
();
return
new
Download
(
new
DownloadRequest
(
uri
,
Uri
.
parse
(
uri
),
mimeType
,
streamKeys
,
/* keySetId= */
null
,
customCacheKey
,
/* data= */
new
byte
[]
{
0
,
1
,
2
,
3
}),
downloadRequest
,
/* state= */
STATE_STOPPED
,
/* startTimeMs= */
1
,
/* updateTimeMs= */
2
,
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DefaultDownloaderFactoryTest.java
View file @
f4287ed0
...
...
@@ -22,7 +22,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import
com.google.android.exoplayer2.upstream.DummyDataSource
;
import
com.google.android.exoplayer2.upstream.cache.Cache
;
import
com.google.android.exoplayer2.upstream.cache.CacheDataSource
;
import
java.util.Collections
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mockito
;
...
...
@@ -42,14 +41,8 @@ public final class DefaultDownloaderFactoryTest {
Downloader
downloader
=
factory
.
createDownloader
(
new
DownloadRequest
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
),
/* mimeType= */
null
,
/* streamKeys= */
Collections
.
emptyList
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
));
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
))
.
build
());
assertThat
(
downloader
).
isInstanceOf
(
ProgressiveDownloader
.
class
);
}
}
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadManagerTest.java
View file @
f4287ed0
...
...
@@ -16,6 +16,7 @@
package
com
.
google
.
android
.
exoplayer2
.
offline
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
java
.
util
.
Arrays
.
asList
;
import
android.net.Uri
;
import
androidx.annotation.GuardedBy
;
...
...
@@ -33,7 +34,6 @@ import com.google.android.exoplayer2.util.Assertions;
import
com.google.android.exoplayer2.util.ConditionVariable
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicReference
;
...
...
@@ -785,14 +785,9 @@ public class DownloadManagerTest {
}
private
static
DownloadRequest
createDownloadRequest
(
String
id
,
StreamKey
...
keys
)
{
return
new
DownloadRequest
(
id
,
Uri
.
parse
(
"http://abc.com/ "
+
id
),
/* mimeType= */
null
,
Arrays
.
asList
(
keys
),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
return
new
DownloadRequest
.
Builder
(
id
,
Uri
.
parse
(
"http://abc.com/ "
+
id
))
.
setStreamKeys
(
asList
(
keys
))
.
build
();
}
// Internal methods.
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadRequestTest.java
View file @
f4287ed0
...
...
@@ -16,14 +16,13 @@
package
com
.
google
.
android
.
exoplayer2
.
offline
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
java
.
util
.
Arrays
.
asList
;
import
static
org
.
junit
.
Assert
.
fail
;
import
android.net.Uri
;
import
android.os.Parcel
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
...
...
@@ -43,24 +42,10 @@ public class DownloadRequestTest {
@Test
public
void
mergeRequests_withDifferentIds_fails
()
{
DownloadRequest
request1
=
new
DownloadRequest
(
/* id= */
"id1"
,
uri1
,
/* mimeType= */
null
,
/* streamKeys= */
Collections
.
emptyList
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
DownloadRequest
request2
=
new
DownloadRequest
(
/* id= */
"id2"
,
uri2
,
/* mimeType= */
null
,
/* streamKeys= */
Collections
.
emptyList
(),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
DownloadRequest
request1
=
new
DownloadRequest
.
Builder
(
/* id= */
"id1"
,
uri1
).
build
();
DownloadRequest
request2
=
new
DownloadRequest
.
Builder
(
/* id= */
"id2"
,
uri2
).
build
();
try
{
request1
.
copyWithMergedRequest
(
request2
);
fail
();
...
...
@@ -114,23 +99,17 @@ public class DownloadRequestTest {
byte
[]
data2
=
new
byte
[]
{
9
,
10
,
11
};
DownloadRequest
request1
=
new
DownloadRequest
(
/* id= */
"id1"
,
uri1
,
/* mimeType= */
null
,
/* streamKeys= */
Collections
.
emptyList
(),
keySetId1
,
/* customCacheKey= */
"key1"
,
data1
);
new
DownloadRequest
.
Builder
(
/* id= */
"id1"
,
uri1
)
.
setKeySetId
(
keySetId1
)
.
setCustomCacheKey
(
"key1"
)
.
setData
(
data1
)
.
build
();
DownloadRequest
request2
=
new
DownloadRequest
(
/* id= */
"id1"
,
uri2
,
/* mimeType= */
null
,
/* streamKeys= */
Collections
.
emptyList
(),
keySetId2
,
/* customCacheKey= */
"key2"
,
data2
);
new
DownloadRequest
.
Builder
(
/* id= */
"id1"
,
uri2
)
.
setKeySetId
(
keySetId2
)
.
setCustomCacheKey
(
"key2"
)
.
setData
(
data2
)
.
build
();
// uri, keySetId, customCacheKey and data should be from the request being merged.
DownloadRequest
mergedRequest
=
request1
.
copyWithMergedRequest
(
request2
);
...
...
@@ -152,14 +131,12 @@ public class DownloadRequestTest {
streamKeys
.
add
(
new
StreamKey
(
1
,
2
,
3
));
streamKeys
.
add
(
new
StreamKey
(
4
,
5
,
6
));
DownloadRequest
requestToParcel
=
new
DownloadRequest
(
/* id= */
"id"
,
Uri
.
parse
(
"https://abc.def/ghi"
),
/* mimeType= */
null
,
streamKeys
,
/* keySetId= */
new
byte
[]
{
1
,
2
,
3
,
4
,
5
},
/* customCacheKey= */
"key"
,
/* data= */
new
byte
[]
{
1
,
2
,
3
,
4
,
5
});
new
DownloadRequest
.
Builder
(
"id"
,
Uri
.
parse
(
"https://abc.def/ghi"
))
.
setStreamKeys
(
streamKeys
)
.
setKeySetId
(
new
byte
[]
{
1
,
2
,
3
,
4
,
5
})
.
setCustomCacheKey
(
"key"
)
.
setData
(
new
byte
[]
{
1
,
2
,
3
,
4
,
5
})
.
build
();
Parcel
parcel
=
Parcel
.
obtain
();
requestToParcel
.
writeToParcel
(
parcel
,
0
);
parcel
.
setDataPosition
(
0
);
...
...
@@ -217,19 +194,6 @@ public class DownloadRequestTest {
}
private
static
DownloadRequest
createRequest
(
Uri
uri
,
StreamKey
...
keys
)
{
return
new
DownloadRequest
(
uri
.
toString
(),
uri
,
/* mimeType= */
null
,
toList
(
keys
),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
);
}
private
static
List
<
StreamKey
>
toList
(
StreamKey
...
keys
)
{
ArrayList
<
StreamKey
>
keysList
=
new
ArrayList
<>();
Collections
.
addAll
(
keysList
,
keys
);
return
keysList
;
return
new
DownloadRequest
.
Builder
(
uri
.
toString
(),
uri
).
setStreamKeys
(
asList
(
keys
)).
build
();
}
}
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DashDownloaderTest.java
View file @
f4287ed0
...
...
@@ -92,14 +92,12 @@ public class DashDownloaderTest {
Downloader
downloader
=
factory
.
createDownloader
(
new
DownloadRequest
(
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
),
MimeTypes
.
APPLICATION_MPD
,
Collections
.
singletonList
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
)),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
));
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_MPD
)
.
setStreamKeys
(
Collections
.
singletonList
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
)))
.
build
());
assertThat
(
downloader
).
isInstanceOf
(
DashDownloader
.
class
);
}
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadManagerDashTest.java
View file @
f4287ed0
...
...
@@ -220,14 +220,10 @@ public class DownloadManagerDashTest {
private
DownloadRequest
getDownloadRequest
(
StreamKey
...
keys
)
{
ArrayList
<
StreamKey
>
keysList
=
new
ArrayList
<>();
Collections
.
addAll
(
keysList
,
keys
);
return
new
DownloadRequest
(
TEST_ID
,
TEST_MPD_URI
,
MimeTypes
.
APPLICATION_MPD
,
keysList
,
/* keySetId= */
null
,
/* customCacheKey= */
null
,
null
);
return
new
DownloadRequest
.
Builder
(
TEST_ID
,
TEST_MPD_URI
)
.
setMimeType
(
MimeTypes
.
APPLICATION_MPD
)
.
setStreamKeys
(
keysList
)
.
build
();
}
private
void
handleRemoveAction
()
{
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadServiceDashTest.java
View file @
f4287ed0
...
...
@@ -206,14 +206,11 @@ public class DownloadServiceDashTest {
ArrayList
<
StreamKey
>
keysList
=
new
ArrayList
<>();
Collections
.
addAll
(
keysList
,
keys
);
DownloadRequest
action
=
new
DownloadRequest
(
TEST_ID
,
TEST_MPD_URI
,
MimeTypes
.
APPLICATION_MPD
,
keysList
,
/* keySetId= */
null
,
/* customCacheKey= */
null
,
null
);
new
DownloadRequest
.
Builder
(
TEST_ID
,
TEST_MPD_URI
)
.
setMimeType
(
MimeTypes
.
APPLICATION_MPD
)
.
setStreamKeys
(
keysList
)
.
build
();
testThread
.
runOnMainThread
(
()
->
{
Intent
startIntent
=
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/HlsDownloaderTest.java
View file @
f4287ed0
...
...
@@ -110,14 +110,12 @@ public class HlsDownloaderTest {
Downloader
downloader
=
factory
.
createDownloader
(
new
DownloadRequest
(
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
),
MimeTypes
.
APPLICATION_M3U8
,
Collections
.
singletonList
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
)),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
));
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_M3U8
)
.
setStreamKeys
(
Collections
.
singletonList
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
)))
.
build
());
assertThat
(
downloader
).
isInstanceOf
(
HlsDownloader
.
class
);
}
...
...
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/offline/SsDownloaderTest.java
View file @
f4287ed0
...
...
@@ -48,14 +48,12 @@ public final class SsDownloaderTest {
Downloader
downloader
=
factory
.
createDownloader
(
new
DownloadRequest
(
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
),
MimeTypes
.
APPLICATION_SS
,
Collections
.
singletonList
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
)),
/* keySetId= */
null
,
/* customCacheKey= */
null
,
/* data= */
null
));
new
DownloadRequest
.
Builder
(
/* id= */
"id"
,
Uri
.
parse
(
"https://www.test.com/download"
))
.
setMimeType
(
MimeTypes
.
APPLICATION_SS
)
.
setStreamKeys
(
Collections
.
singletonList
(
new
StreamKey
(
/* groupIndex= */
0
,
/* trackIndex= */
0
)))
.
build
());
assertThat
(
downloader
).
isInstanceOf
(
SsDownloader
.
class
);
}
}
testutils/src/main/java/com/google/android/exoplayer2/testutil/DownloadBuilder.java
View file @
f4287ed0
...
...
@@ -198,7 +198,13 @@ public final class DownloadBuilder {
public
Download
build
()
{
DownloadRequest
request
=
new
DownloadRequest
(
id
,
uri
,
mimeType
,
streamKeys
,
keySetId
,
cacheKey
,
customMetadata
);
new
DownloadRequest
.
Builder
(
id
,
uri
)
.
setMimeType
(
mimeType
)
.
setStreamKeys
(
streamKeys
)
.
setKeySetId
(
keySetId
)
.
setCustomCacheKey
(
cacheKey
)
.
setData
(
customMetadata
)
.
build
();
return
new
Download
(
request
,
state
,
...
...
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