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
a04f1d17
authored
Sep 27, 2021
by
ibaker
Committed by
bachinger
Sep 28, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Migrate usages of MediaItem.PlaybackProperties to LocalConfiguration
PiperOrigin-RevId: 399206106
parent
e373e0cb
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
257 additions
and
258 deletions
demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java
docs/analytics.md
docs/playlists.md
extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/DefaultMediaItemConverter.java
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/DefaultMediaItemConverter.java
library/common/src/main/java/com/google/android/exoplayer2/Timeline.java
library/common/src/main/java/com/google/android/exoplayer2/util/Util.java
library/common/src/test/java/com/google/android/exoplayer2/TimelineTest.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerProvider.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/ProgressiveDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
library/core/src/main/java/com/google/android/exoplayer2/source/MediaSourceFactory.java
library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
library/core/src/main/java/com/google/android/exoplayer2/source/SilenceMediaSource.java
library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java
library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
library/core/src/test/java/com/google/android/exoplayer2/source/SilenceMediaSourceTest.java
library/core/src/test/java/com/google/android/exoplayer2/source/SinglePeriodTimelineTest.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaSourceTest.java
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DefaultMediaSourceFactoryTest.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/DefaultMediaSourceFactoryTest.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsMediaSourceTest.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspMediaSource.java
library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/offline/SsDownloader.java
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/DefaultMediaSourceFactoryTest.java
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSourceTest.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/TimelineAsserts.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadTracker.java
View file @
a04f1d17
...
...
@@ -98,7 +98,7 @@ public class DownloadTracker {
}
public
boolean
isDownloaded
(
MediaItem
mediaItem
)
{
@Nullable
Download
download
=
downloads
.
get
(
checkNotNull
(
mediaItem
.
playbackProperties
).
uri
);
@Nullable
Download
download
=
downloads
.
get
(
checkNotNull
(
mediaItem
.
localConfiguration
).
uri
);
return
download
!=
null
&&
download
.
state
!=
Download
.
STATE_FAILED
;
}
...
...
@@ -110,7 +110,7 @@ public class DownloadTracker {
public
void
toggleDownload
(
FragmentManager
fragmentManager
,
MediaItem
mediaItem
,
RenderersFactory
renderersFactory
)
{
@Nullable
Download
download
=
downloads
.
get
(
checkNotNull
(
mediaItem
.
playbackProperties
).
uri
);
@Nullable
Download
download
=
downloads
.
get
(
checkNotNull
(
mediaItem
.
localConfiguration
).
uri
);
if
(
download
!=
null
&&
download
.
state
!=
Download
.
STATE_FAILED
)
{
DownloadService
.
sendRemoveDownload
(
context
,
DemoDownloadService
.
class
,
download
.
request
.
id
,
/* foreground= */
false
);
...
...
@@ -223,7 +223,7 @@ public class DownloadTracker {
widevineOfflineLicenseFetchTask
=
new
WidevineOfflineLicenseFetchTask
(
format
,
mediaItem
.
playbackProperties
.
drmConfiguration
,
mediaItem
.
localConfiguration
.
drmConfiguration
,
httpDataSourceFactory
,
/* dialogHelper= */
this
,
helper
);
...
...
demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
View file @
a04f1d17
...
...
@@ -88,22 +88,22 @@ public class IntentUtil {
Assertions
.
checkArgument
(!
mediaItems
.
isEmpty
());
if
(
mediaItems
.
size
()
==
1
)
{
MediaItem
mediaItem
=
mediaItems
.
get
(
0
);
MediaItem
.
PlaybackProperties
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
intent
.
setAction
(
ACTION_VIEW
).
setData
(
mediaItem
.
playbackProperties
.
uri
);
MediaItem
.
LocalConfiguration
localConfiguration
=
checkNotNull
(
mediaItem
.
localConfiguration
);
intent
.
setAction
(
ACTION_VIEW
).
setData
(
mediaItem
.
localConfiguration
.
uri
);
if
(
mediaItem
.
mediaMetadata
.
title
!=
null
)
{
intent
.
putExtra
(
TITLE_EXTRA
,
mediaItem
.
mediaMetadata
.
title
);
}
addPlaybackPropertiesToIntent
(
playbackProperties
,
intent
,
/* extrasKeySuffix= */
""
);
addPlaybackPropertiesToIntent
(
localConfiguration
,
intent
,
/* extrasKeySuffix= */
""
);
addClippingPropertiesToIntent
(
mediaItem
.
clippingProperties
,
intent
,
/* extrasKeySuffix= */
""
);
}
else
{
intent
.
setAction
(
ACTION_VIEW_LIST
);
for
(
int
i
=
0
;
i
<
mediaItems
.
size
();
i
++)
{
MediaItem
mediaItem
=
mediaItems
.
get
(
i
);
MediaItem
.
PlaybackProperties
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
intent
.
putExtra
(
URI_EXTRA
+
(
"_"
+
i
),
playbackProperties
.
uri
.
toString
());
addPlaybackPropertiesToIntent
(
playbackProperties
,
intent
,
/* extrasKeySuffix= */
"_"
+
i
);
MediaItem
.
LocalConfiguration
localConfiguration
=
checkNotNull
(
mediaItem
.
localConfiguration
);
intent
.
putExtra
(
URI_EXTRA
+
(
"_"
+
i
),
localConfiguration
.
uri
.
toString
());
addPlaybackPropertiesToIntent
(
localConfiguration
,
intent
,
/* extrasKeySuffix= */
"_"
+
i
);
addClippingPropertiesToIntent
(
mediaItem
.
clippingProperties
,
intent
,
/* extrasKeySuffix= */
"_"
+
i
);
if
(
mediaItem
.
mediaMetadata
.
title
!=
null
)
{
...
...
@@ -185,20 +185,20 @@ public class IntentUtil {
}
private
static
void
addPlaybackPropertiesToIntent
(
MediaItem
.
PlaybackProperties
playbackProperties
,
Intent
intent
,
String
extrasKeySuffix
)
{
MediaItem
.
LocalConfiguration
localConfiguration
,
Intent
intent
,
String
extrasKeySuffix
)
{
intent
.
putExtra
(
MIME_TYPE_EXTRA
+
extrasKeySuffix
,
playbackProperties
.
mimeType
)
.
putExtra
(
MIME_TYPE_EXTRA
+
extrasKeySuffix
,
localConfiguration
.
mimeType
)
.
putExtra
(
AD_TAG_URI_EXTRA
+
extrasKeySuffix
,
playbackProperties
.
adsConfiguration
!=
null
?
playbackProperties
.
adsConfiguration
.
adTagUri
.
toString
()
localConfiguration
.
adsConfiguration
!=
null
?
localConfiguration
.
adsConfiguration
.
adTagUri
.
toString
()
:
null
);
if
(
playbackProperties
.
drmConfiguration
!=
null
)
{
addDrmConfigurationToIntent
(
playbackProperties
.
drmConfiguration
,
intent
,
extrasKeySuffix
);
if
(
localConfiguration
.
drmConfiguration
!=
null
)
{
addDrmConfigurationToIntent
(
localConfiguration
.
drmConfiguration
,
intent
,
extrasKeySuffix
);
}
if
(!
playbackProperties
.
subtitles
.
isEmpty
())
{
checkState
(
playbackProperties
.
subtitles
.
size
()
==
1
);
MediaItem
.
Subtitle
subtitle
=
playbackProperties
.
subtitles
.
get
(
0
);
if
(!
localConfiguration
.
subtitles
.
isEmpty
())
{
checkState
(
localConfiguration
.
subtitles
.
size
()
==
1
);
MediaItem
.
Subtitle
subtitle
=
localConfiguration
.
subtitles
.
get
(
0
);
intent
.
putExtra
(
SUBTITLE_URI_EXTRA
+
extrasKeySuffix
,
subtitle
.
uri
.
toString
());
intent
.
putExtra
(
SUBTITLE_MIME_TYPE_EXTRA
+
extrasKeySuffix
,
subtitle
.
mimeType
);
intent
.
putExtra
(
SUBTITLE_LANGUAGE_EXTRA
+
extrasKeySuffix
,
subtitle
.
language
);
...
...
demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java
View file @
a04f1d17
...
...
@@ -323,7 +323,7 @@ public class PlayerActivity extends AppCompatActivity
}
MediaItem
.
DrmConfiguration
drmConfiguration
=
checkNotNull
(
mediaItem
.
playbackProperties
).
drmConfiguration
;
checkNotNull
(
mediaItem
.
localConfiguration
).
drmConfiguration
;
if
(
drmConfiguration
!=
null
)
{
if
(
Util
.
SDK_INT
<
18
)
{
showToast
(
R
.
string
.
error_drm_unsupported_before_api_18
);
...
...
@@ -335,7 +335,7 @@ public class PlayerActivity extends AppCompatActivity
return
Collections
.
emptyList
();
}
}
hasAds
|=
mediaItem
.
playbackProperties
.
adsConfiguration
!=
null
;
hasAds
|=
mediaItem
.
localConfiguration
.
adsConfiguration
!=
null
;
}
if
(!
hasAds
)
{
releaseAdsLoader
();
...
...
@@ -496,7 +496,7 @@ public class PlayerActivity extends AppCompatActivity
for
(
MediaItem
item
:
IntentUtil
.
createMediaItemsFromIntent
(
intent
))
{
@Nullable
DownloadRequest
downloadRequest
=
downloadTracker
.
getDownloadRequest
(
checkNotNull
(
item
.
playbackProperties
).
uri
);
downloadTracker
.
getDownloadRequest
(
checkNotNull
(
item
.
localConfiguration
).
uri
);
if
(
downloadRequest
!=
null
)
{
MediaItem
.
Builder
builder
=
item
.
buildUpon
();
builder
...
...
@@ -506,7 +506,7 @@ public class PlayerActivity extends AppCompatActivity
.
setMimeType
(
downloadRequest
.
mimeType
)
.
setStreamKeys
(
downloadRequest
.
streamKeys
);
@Nullable
MediaItem
.
DrmConfiguration
drmConfiguration
=
item
.
playbackProperties
.
drmConfiguration
;
MediaItem
.
DrmConfiguration
drmConfiguration
=
item
.
localConfiguration
.
drmConfiguration
;
if
(
drmConfiguration
!=
null
)
{
builder
.
setDrmConfiguration
(
drmConfiguration
...
...
@@ -526,7 +526,7 @@ public class PlayerActivity extends AppCompatActivity
@Nullable
private
static
Map
<
String
,
String
>
getDrmRequestHeaders
(
MediaItem
item
)
{
MediaItem
.
DrmConfiguration
drmConfiguration
=
item
.
playbackProperties
.
drmConfiguration
;
MediaItem
.
DrmConfiguration
drmConfiguration
=
item
.
localConfiguration
.
drmConfiguration
;
return
drmConfiguration
!=
null
?
drmConfiguration
.
licenseRequestHeaders
:
null
;
}
}
demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java
View file @
a04f1d17
...
...
@@ -249,12 +249,12 @@ public class SampleChooserActivity extends AppCompatActivity
if
(
playlistHolder
.
mediaItems
.
size
()
>
1
)
{
return
R
.
string
.
download_playlist_unsupported
;
}
MediaItem
.
PlaybackProperties
playbackProperties
=
checkNotNull
(
playlistHolder
.
mediaItems
.
get
(
0
).
playbackProperties
);
if
(
playbackProperties
.
adsConfiguration
!=
null
)
{
MediaItem
.
LocalConfiguration
localConfiguration
=
checkNotNull
(
playlistHolder
.
mediaItems
.
get
(
0
).
localConfiguration
);
if
(
localConfiguration
.
adsConfiguration
!=
null
)
{
return
R
.
string
.
download_ads_unsupported
;
}
String
scheme
=
playbackProperties
.
uri
.
getScheme
();
String
scheme
=
localConfiguration
.
uri
.
getScheme
();
if
(!(
"http"
.
equals
(
scheme
)
||
"https"
.
equals
(
scheme
)))
{
return
R
.
string
.
download_scheme_unsupported
;
}
...
...
docs/analytics.md
View file @
a04f1d17
...
...
@@ -215,7 +215,7 @@ new PlaybackStatsListener(
/* keepHistory= */ false, (eventTime, playbackStats) -> {
Object mediaTag =
eventTime.timeline.getWindow(eventTime.windowIndex, new Window())
.mediaItem.
playbackProperties
.tag;
.mediaItem.
localConfiguration
.tag;
// Report playbackStats with mediaTag metadata.
});
~~~
...
...
docs/playlists.md
View file @
a04f1d17
...
...
@@ -124,8 +124,8 @@ custom tags, then an implementation might look like:
public void onMediaItemTransition(
@Nullable MediaItem mediaItem, @MediaItemTransitionReason int reason) {
@Nullable CustomMetadata metadata = null;
if (mediaItem != null && mediaItem.
playbackProperties
!= null) {
metadata = (CustomMetadata) mediaItem.
playbackProperties
.tag;
if (mediaItem != null && mediaItem.
localConfiguration
!= null) {
metadata = (CustomMetadata) mediaItem.
localConfiguration
.tag;
}
updateUiForPlayingMediaItem(metadata);
}
...
...
extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/DefaultMediaItemConverter.java
View file @
a04f1d17
...
...
@@ -52,8 +52,8 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
@Override
public
MediaQueueItem
toMediaQueueItem
(
MediaItem
mediaItem
)
{
Assertions
.
checkNotNull
(
mediaItem
.
playbackProperties
);
if
(
mediaItem
.
playbackProperties
.
mimeType
==
null
)
{
Assertions
.
checkNotNull
(
mediaItem
.
localConfiguration
);
if
(
mediaItem
.
localConfiguration
.
mimeType
==
null
)
{
throw
new
IllegalArgumentException
(
"The item must specify its mimeType"
);
}
MediaMetadata
metadata
=
new
MediaMetadata
(
MediaMetadata
.
MEDIA_TYPE_MOVIE
);
...
...
@@ -61,9 +61,9 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
metadata
.
putString
(
MediaMetadata
.
KEY_TITLE
,
mediaItem
.
mediaMetadata
.
title
.
toString
());
}
MediaInfo
mediaInfo
=
new
MediaInfo
.
Builder
(
mediaItem
.
playbackProperties
.
uri
.
toString
())
new
MediaInfo
.
Builder
(
mediaItem
.
localConfiguration
.
uri
.
toString
())
.
setStreamType
(
MediaInfo
.
STREAM_TYPE_BUFFERED
)
.
setContentType
(
mediaItem
.
playbackProperties
.
mimeType
)
.
setContentType
(
mediaItem
.
localConfiguration
.
mimeType
)
.
setMetadata
(
metadata
)
.
setCustomData
(
getCustomData
(
mediaItem
))
.
build
();
...
...
@@ -128,15 +128,15 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
}
private
static
JSONObject
getMediaItemJson
(
MediaItem
mediaItem
)
throws
JSONException
{
Assertions
.
checkNotNull
(
mediaItem
.
playbackProperties
);
Assertions
.
checkNotNull
(
mediaItem
.
localConfiguration
);
JSONObject
json
=
new
JSONObject
();
json
.
put
(
KEY_TITLE
,
mediaItem
.
mediaMetadata
.
title
);
json
.
put
(
KEY_URI
,
mediaItem
.
playbackProperties
.
uri
.
toString
());
json
.
put
(
KEY_MIME_TYPE
,
mediaItem
.
playbackProperties
.
mimeType
);
if
(
mediaItem
.
playbackProperties
.
drmConfiguration
!=
null
)
{
json
.
put
(
KEY_URI
,
mediaItem
.
localConfiguration
.
uri
.
toString
());
json
.
put
(
KEY_MIME_TYPE
,
mediaItem
.
localConfiguration
.
mimeType
);
if
(
mediaItem
.
localConfiguration
.
drmConfiguration
!=
null
)
{
json
.
put
(
KEY_DRM_CONFIGURATION
,
getDrmConfigurationJson
(
mediaItem
.
playbackProperties
.
drmConfiguration
));
getDrmConfigurationJson
(
mediaItem
.
localConfiguration
.
drmConfiguration
));
}
return
json
;
}
...
...
@@ -152,11 +152,11 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
@Nullable
private
static
JSONObject
getPlayerConfigJson
(
MediaItem
mediaItem
)
throws
JSONException
{
if
(
mediaItem
.
playbackProperties
==
null
||
mediaItem
.
playbackProperties
.
drmConfiguration
==
null
)
{
if
(
mediaItem
.
localConfiguration
==
null
||
mediaItem
.
localConfiguration
.
drmConfiguration
==
null
)
{
return
null
;
}
MediaItem
.
DrmConfiguration
drmConfiguration
=
mediaItem
.
playbackProperties
.
drmConfiguration
;
MediaItem
.
DrmConfiguration
drmConfiguration
=
mediaItem
.
localConfiguration
.
drmConfiguration
;
String
drmScheme
;
if
(
C
.
WIDEVINE_UUID
.
equals
(
drmConfiguration
.
scheme
))
{
...
...
extensions/cast/src/test/java/com/google/android/exoplayer2/ext/cast/CastPlayerTest.java
View file @
a04f1d17
...
...
@@ -423,7 +423,7 @@ public class CastPlayerTest {
.
onMediaItemTransition
(
mediaItemCaptor
.
capture
(),
eq
(
MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mockListener
,
never
()).
onMediaItemTransition
(
any
(),
anyInt
());
assertThat
(
mediaItemCaptor
.
getAllValues
().
get
(
1
).
playbackProperties
.
tag
).
isEqualTo
(
3
);
assertThat
(
mediaItemCaptor
.
getAllValues
().
get
(
1
).
localConfiguration
.
tag
).
isEqualTo
(
3
);
}
@SuppressWarnings
(
"deprecation"
)
// Verifies deprecated callback being called correctly.
...
...
@@ -533,7 +533,7 @@ public class CastPlayerTest {
verify
(
mockRemoteMediaClient
)
.
queueInsertItems
(
queueItemsArgumentCaptor
.
capture
(),
eq
((
int
)
mediaItems
.
get
(
index
).
playbackProperties
.
tag
),
eq
((
int
)
mediaItems
.
get
(
index
).
localConfiguration
.
tag
),
any
());
MediaQueueItem
[]
mediaQueueItems
=
queueItemsArgumentCaptor
.
getValue
();
...
...
@@ -677,7 +677,7 @@ public class CastPlayerTest {
Timeline
currentTimeline
=
castPlayer
.
getCurrentTimeline
();
for
(
int
i
=
0
;
i
<
mediaItems
.
size
();
i
++)
{
assertThat
(
currentTimeline
.
getWindow
(
/* windowIndex= */
i
,
window
).
uid
)
.
isEqualTo
(
mediaItems
.
get
(
i
).
playbackProperties
.
tag
);
.
isEqualTo
(
mediaItems
.
get
(
i
).
localConfiguration
.
tag
);
}
}
...
...
@@ -696,8 +696,8 @@ public class CastPlayerTest {
.
onMediaItemTransition
(
mediaItemCaptor
.
capture
(),
eq
(
Player
.
MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mockListener
,
never
()).
onMediaItemTransition
(
any
(),
anyInt
());
assertThat
(
mediaItemCaptor
.
getValue
().
playbackProperties
.
tag
)
.
isEqualTo
(
mediaItem
.
playbackProperties
.
tag
);
assertThat
(
mediaItemCaptor
.
getValue
().
localConfiguration
.
tag
)
.
isEqualTo
(
mediaItem
.
localConfiguration
.
tag
);
}
@Test
...
...
@@ -801,10 +801,10 @@ public class CastPlayerTest {
.
onMediaItemTransition
(
mediaItemCaptor
.
capture
(),
eq
(
Player
.
MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mockListener
,
never
()).
onMediaItemTransition
(
any
(),
anyInt
());
assertThat
(
mediaItemCaptor
.
getAllValues
().
get
(
0
).
playbackProperties
.
tag
)
.
isEqualTo
(
mediaItem1
.
playbackProperties
.
tag
);
assertThat
(
mediaItemCaptor
.
getAllValues
().
get
(
1
).
playbackProperties
.
tag
)
.
isEqualTo
(
mediaItem2
.
playbackProperties
.
tag
);
assertThat
(
mediaItemCaptor
.
getAllValues
().
get
(
0
).
localConfiguration
.
tag
)
.
isEqualTo
(
mediaItem1
.
localConfiguration
.
tag
);
assertThat
(
mediaItemCaptor
.
getAllValues
().
get
(
1
).
localConfiguration
.
tag
)
.
isEqualTo
(
mediaItem2
.
localConfiguration
.
tag
);
}
@Test
...
...
@@ -886,10 +886,10 @@ public class CastPlayerTest {
mediaItemCaptor
.
capture
(),
eq
(
Player
.
MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED
));
inOrder
.
verify
(
mockListener
,
never
()).
onMediaItemTransition
(
any
(),
anyInt
());
List
<
MediaItem
>
capturedMediaItems
=
mediaItemCaptor
.
getAllValues
();
assertThat
(
capturedMediaItems
.
get
(
0
).
playbackProperties
.
tag
)
.
isEqualTo
(
mediaItem1
.
playbackProperties
.
tag
);
assertThat
(
capturedMediaItems
.
get
(
1
).
playbackProperties
.
tag
)
.
isEqualTo
(
mediaItem2
.
playbackProperties
.
tag
);
assertThat
(
capturedMediaItems
.
get
(
0
).
localConfiguration
.
tag
)
.
isEqualTo
(
mediaItem1
.
localConfiguration
.
tag
);
assertThat
(
capturedMediaItems
.
get
(
1
).
localConfiguration
.
tag
)
.
isEqualTo
(
mediaItem2
.
localConfiguration
.
tag
);
}
@Test
...
...
@@ -1012,8 +1012,8 @@ public class CastPlayerTest {
.
onMediaItemTransition
(
mediaItemCaptor
.
capture
(),
eq
(
Player
.
MEDIA_ITEM_TRANSITION_REASON_SEEK
));
inOrder
.
verify
(
mockListener
,
never
()).
onPositionDiscontinuity
(
any
(),
any
(),
anyInt
());
assertThat
(
mediaItemCaptor
.
getValue
().
playbackProperties
.
tag
)
.
isEqualTo
(
mediaItem2
.
playbackProperties
.
tag
);
assertThat
(
mediaItemCaptor
.
getValue
().
localConfiguration
.
tag
)
.
isEqualTo
(
mediaItem2
.
localConfiguration
.
tag
);
}
@Test
...
...
@@ -1144,7 +1144,7 @@ public class CastPlayerTest {
.
onMediaItemTransition
(
mediaItemCaptor
.
capture
(),
eq
(
Player
.
MEDIA_ITEM_TRANSITION_REASON_AUTO
));
inOrder
.
verify
(
mockListener
,
never
()).
onMediaItemTransition
(
any
(),
anyInt
());
assertThat
(
mediaItemCaptor
.
getValue
().
playbackProperties
.
tag
).
isEqualTo
(
2
);
assertThat
(
mediaItemCaptor
.
getValue
().
localConfiguration
.
tag
).
isEqualTo
(
2
);
}
@Test
...
...
@@ -1788,9 +1788,9 @@ public class CastPlayerTest {
int
streamType
=
streamTypes
[
i
];
long
durationMs
=
durationsMs
[
i
];
MediaInfo
.
Builder
mediaInfoBuilder
=
new
MediaInfo
.
Builder
(
mediaItem
.
playbackProperties
.
uri
.
toString
())
new
MediaInfo
.
Builder
(
mediaItem
.
localConfiguration
.
uri
.
toString
())
.
setStreamType
(
streamType
)
.
setContentType
(
mediaItem
.
playbackProperties
.
mimeType
);
.
setContentType
(
mediaItem
.
localConfiguration
.
mimeType
);
if
(
durationMs
!=
C
.
TIME_UNSET
)
{
mediaInfoBuilder
.
setStreamDuration
(
durationMs
);
}
...
...
extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/DefaultMediaItemConverter.java
View file @
a04f1d17
...
...
@@ -96,10 +96,10 @@ public class DefaultMediaItemConverter implements MediaItemConverter {
@Override
public
androidx
.
media2
.
common
.
MediaItem
convertToMedia2MediaItem
(
MediaItem
exoPlayerMediaItem
)
{
Assertions
.
checkNotNull
(
exoPlayerMediaItem
);
MediaItem
.
PlaybackProperties
playbackProperties
=
Assertions
.
checkNotNull
(
exoPlayerMediaItem
.
playbackProperties
);
MediaItem
.
LocalConfiguration
localConfiguration
=
Assertions
.
checkNotNull
(
exoPlayerMediaItem
.
localConfiguration
);
@Nullable
Object
tag
=
playbackProperties
.
tag
;
@Nullable
Object
tag
=
localConfiguration
.
tag
;
if
(
tag
instanceof
androidx
.
media2
.
common
.
MediaItem
)
{
return
(
androidx
.
media2
.
common
.
MediaItem
)
tag
;
}
...
...
library/common/src/main/java/com/google/android/exoplayer2/Timeline.java
View file @
a04f1d17
...
...
@@ -272,8 +272,8 @@ public abstract class Timeline implements Bundleable {
this
.
uid
=
uid
;
this
.
mediaItem
=
mediaItem
!=
null
?
mediaItem
:
EMPTY_MEDIA_ITEM
;
this
.
tag
=
mediaItem
!=
null
&&
mediaItem
.
playbackProperties
!=
null
?
mediaItem
.
playbackProperties
.
tag
mediaItem
!=
null
&&
mediaItem
.
localConfiguration
!=
null
?
mediaItem
.
localConfiguration
.
tag
:
null
;
this
.
manifest
=
manifest
;
this
.
presentationStartTimeMs
=
presentationStartTimeMs
;
...
...
library/common/src/main/java/com/google/android/exoplayer2/util/Util.java
View file @
a04f1d17
...
...
@@ -227,14 +227,14 @@ public final class Util {
return
false
;
}
for
(
MediaItem
mediaItem
:
mediaItems
)
{
if
(
mediaItem
.
playbackProperties
==
null
)
{
if
(
mediaItem
.
localConfiguration
==
null
)
{
continue
;
}
if
(
isLocalFileUri
(
mediaItem
.
playbackProperties
.
uri
))
{
if
(
isLocalFileUri
(
mediaItem
.
localConfiguration
.
uri
))
{
return
requestExternalStoragePermission
(
activity
);
}
for
(
int
i
=
0
;
i
<
mediaItem
.
playbackProperties
.
subtitles
.
size
();
i
++)
{
if
(
isLocalFileUri
(
mediaItem
.
playbackProperties
.
subtitles
.
get
(
i
).
uri
))
{
for
(
int
i
=
0
;
i
<
mediaItem
.
localConfiguration
.
subtitles
.
size
();
i
++)
{
if
(
isLocalFileUri
(
mediaItem
.
localConfiguration
.
subtitles
.
get
(
i
).
uri
))
{
return
requestExternalStoragePermission
(
activity
);
}
}
...
...
@@ -255,14 +255,14 @@ public final class Util {
return
true
;
}
for
(
MediaItem
mediaItem
:
mediaItems
)
{
if
(
mediaItem
.
playbackProperties
==
null
)
{
if
(
mediaItem
.
localConfiguration
==
null
)
{
continue
;
}
if
(
isTrafficRestricted
(
mediaItem
.
playbackProperties
.
uri
))
{
if
(
isTrafficRestricted
(
mediaItem
.
localConfiguration
.
uri
))
{
return
false
;
}
for
(
int
i
=
0
;
i
<
mediaItem
.
playbackProperties
.
subtitles
.
size
();
i
++)
{
if
(
isTrafficRestricted
(
mediaItem
.
playbackProperties
.
subtitles
.
get
(
i
).
uri
))
{
for
(
int
i
=
0
;
i
<
mediaItem
.
localConfiguration
.
subtitles
.
size
();
i
++)
{
if
(
isTrafficRestricted
(
mediaItem
.
localConfiguration
.
subtitles
.
get
(
i
).
uri
))
{
return
false
;
}
}
...
...
library/common/src/test/java/com/google/android/exoplayer2/TimelineTest.java
View file @
a04f1d17
...
...
@@ -122,7 +122,7 @@ public class TimelineTest {
otherWindow
.
positionInFirstPeriodUs
=
C
.
TIME_UNSET
;
assertThat
(
window
).
isNotEqualTo
(
otherWindow
);
window
=
populateWindow
(
mediaItem
,
mediaItem
.
playbackProperties
.
tag
);
window
=
populateWindow
(
mediaItem
,
mediaItem
.
localConfiguration
.
tag
);
otherWindow
=
otherWindow
.
set
(
window
.
uid
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerProvider.java
View file @
a04f1d17
...
...
@@ -74,9 +74,9 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager
@Override
public
DrmSessionManager
get
(
MediaItem
mediaItem
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
checkNotNull
(
mediaItem
.
localConfiguration
);
@Nullable
MediaItem
.
DrmConfiguration
drmConfiguration
=
mediaItem
.
playbackProperties
.
drmConfiguration
;
MediaItem
.
DrmConfiguration
drmConfiguration
=
mediaItem
.
localConfiguration
.
drmConfiguration
;
if
(
drmConfiguration
==
null
||
Util
.
SDK_INT
<
18
)
{
return
DrmSessionManager
.
DRM_UNSUPPORTED
;
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java
View file @
a04f1d17
...
...
@@ -321,7 +321,7 @@ public final class DownloadHelper {
* @throws IllegalStateException If the media item is of type DASH, HLS or SmoothStreaming.
*/
public
static
DownloadHelper
forMediaItem
(
Context
context
,
MediaItem
mediaItem
)
{
Assertions
.
checkArgument
(
isProgressive
(
checkNotNull
(
mediaItem
.
playbackProperties
)));
Assertions
.
checkArgument
(
isProgressive
(
checkNotNull
(
mediaItem
.
localConfiguration
)));
return
forMediaItem
(
mediaItem
,
getDefaultTrackSelectorParameters
(
context
),
...
...
@@ -411,7 +411,7 @@ public final class DownloadHelper {
@Nullable
RenderersFactory
renderersFactory
,
@Nullable
DataSource
.
Factory
dataSourceFactory
,
@Nullable
DrmSessionManager
drmSessionManager
)
{
boolean
isProgressive
=
isProgressive
(
checkNotNull
(
mediaItem
.
playbackProperties
));
boolean
isProgressive
=
isProgressive
(
checkNotNull
(
mediaItem
.
localConfiguration
));
Assertions
.
checkArgument
(
isProgressive
||
dataSourceFactory
!=
null
);
return
new
DownloadHelper
(
mediaItem
,
...
...
@@ -452,7 +452,7 @@ public final class DownloadHelper {
downloadRequest
.
toMediaItem
(),
dataSourceFactory
,
drmSessionManager
);
}
private
final
MediaItem
.
PlaybackProperties
playbackProperties
;
private
final
MediaItem
.
LocalConfiguration
localConfiguration
;
@Nullable
private
final
MediaSource
mediaSource
;
private
final
DefaultTrackSelector
trackSelector
;
private
final
RendererCapabilities
[]
rendererCapabilities
;
...
...
@@ -485,7 +485,7 @@ public final class DownloadHelper {
@Nullable
MediaSource
mediaSource
,
DefaultTrackSelector
.
Parameters
trackSelectorParameters
,
RendererCapabilities
[]
rendererCapabilities
)
{
this
.
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
this
.
localConfiguration
=
checkNotNull
(
mediaItem
.
localConfiguration
);
this
.
mediaSource
=
mediaSource
;
this
.
trackSelector
=
new
DefaultTrackSelector
(
trackSelectorParameters
,
new
DownloadTrackSelection
.
Factory
());
...
...
@@ -726,7 +726,7 @@ public final class DownloadHelper {
* @return The built {@link DownloadRequest}.
*/
public
DownloadRequest
getDownloadRequest
(
@Nullable
byte
[]
data
)
{
return
getDownloadRequest
(
playbackProperties
.
uri
.
toString
(),
data
);
return
getDownloadRequest
(
localConfiguration
.
uri
.
toString
(),
data
);
}
/**
...
...
@@ -739,13 +739,13 @@ public final class DownloadHelper {
*/
public
DownloadRequest
getDownloadRequest
(
String
id
,
@Nullable
byte
[]
data
)
{
DownloadRequest
.
Builder
requestBuilder
=
new
DownloadRequest
.
Builder
(
id
,
playbackProperties
.
uri
)
.
setMimeType
(
playbackProperties
.
mimeType
)
new
DownloadRequest
.
Builder
(
id
,
localConfiguration
.
uri
)
.
setMimeType
(
localConfiguration
.
mimeType
)
.
setKeySetId
(
playbackProperties
.
drmConfiguration
!=
null
?
playbackProperties
.
drmConfiguration
.
getKeySetId
()
localConfiguration
.
drmConfiguration
!=
null
?
localConfiguration
.
drmConfiguration
.
getKeySetId
()
:
null
)
.
setCustomCacheKey
(
playbackProperties
.
customCacheKey
)
.
setCustomCacheKey
(
localConfiguration
.
customCacheKey
)
.
setData
(
data
);
if
(
mediaSource
==
null
)
{
return
requestBuilder
.
build
();
...
...
@@ -896,9 +896,9 @@ public final class DownloadHelper {
.
createMediaSource
(
mediaItem
);
}
private
static
boolean
isProgressive
(
MediaItem
.
PlaybackProperties
playbackProperties
)
{
private
static
boolean
isProgressive
(
MediaItem
.
LocalConfiguration
localConfiguration
)
{
return
Util
.
inferContentTypeForUriAndMimeType
(
playbackProperties
.
uri
,
playbackProperties
.
mimeType
)
localConfiguration
.
uri
,
localConfiguration
.
mimeType
)
==
C
.
TYPE_OTHER
;
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/ProgressiveDownloader.java
View file @
a04f1d17
...
...
@@ -69,11 +69,11 @@ public final class ProgressiveDownloader implements Downloader {
public
ProgressiveDownloader
(
MediaItem
mediaItem
,
CacheDataSource
.
Factory
cacheDataSourceFactory
,
Executor
executor
)
{
this
.
executor
=
Assertions
.
checkNotNull
(
executor
);
Assertions
.
checkNotNull
(
mediaItem
.
playbackProperties
);
Assertions
.
checkNotNull
(
mediaItem
.
localConfiguration
);
dataSpec
=
new
DataSpec
.
Builder
()
.
setUri
(
mediaItem
.
playbackProperties
.
uri
)
.
setKey
(
mediaItem
.
playbackProperties
.
customCacheKey
)
.
setUri
(
mediaItem
.
localConfiguration
.
uri
)
.
setKey
(
mediaItem
.
localConfiguration
.
customCacheKey
)
.
setFlags
(
DataSpec
.
FLAG_ALLOW_CACHE_FRAGMENTATION
)
.
build
();
dataSource
=
cacheDataSourceFactory
.
createDataSourceForDownloading
();
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
View file @
a04f1d17
...
...
@@ -110,10 +110,10 @@ public abstract class SegmentDownloader<M extends FilterableManifest<M>> impleme
Parser
<
M
>
manifestParser
,
CacheDataSource
.
Factory
cacheDataSourceFactory
,
Executor
executor
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
this
.
manifestDataSpec
=
getCompressibleDataSpec
(
mediaItem
.
playbackProperties
.
uri
);
checkNotNull
(
mediaItem
.
localConfiguration
);
this
.
manifestDataSpec
=
getCompressibleDataSpec
(
mediaItem
.
localConfiguration
.
uri
);
this
.
manifestParser
=
manifestParser
;
this
.
streamKeys
=
new
ArrayList
<>(
mediaItem
.
playbackProperties
.
streamKeys
);
this
.
streamKeys
=
new
ArrayList
<>(
mediaItem
.
localConfiguration
.
streamKeys
);
this
.
cacheDataSourceFactory
=
cacheDataSourceFactory
;
this
.
executor
=
executor
;
cache
=
Assertions
.
checkNotNull
(
cacheDataSourceFactory
.
getCache
());
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
View file @
a04f1d17
...
...
@@ -54,23 +54,23 @@ import java.util.List;
* factories:
*
* <ul>
* <li>{@code DashMediaSource.Factory} if the item's {@link MediaItem.
PlaybackProperties
#uri uri}
* ends in '.mpd' or if its {@link MediaItem.
PlaybackProperties
#mimeType mimeType field} is
* <li>{@code DashMediaSource.Factory} if the item's {@link MediaItem.
LocalConfiguration
#uri uri}
* ends in '.mpd' or if its {@link MediaItem.
LocalConfiguration
#mimeType mimeType field} is
* explicitly set to {@link MimeTypes#APPLICATION_MPD} (Requires the <a
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-dash module
* to be added</a> to the app).
* <li>{@code HlsMediaSource.Factory} if the item's {@link MediaItem.
PlaybackProperties
#uri uri}
* ends in '.m3u8' or if its {@link MediaItem.
PlaybackProperties
#mimeType mimeType field} is
* <li>{@code HlsMediaSource.Factory} if the item's {@link MediaItem.
LocalConfiguration
#uri uri}
* ends in '.m3u8' or if its {@link MediaItem.
LocalConfiguration
#mimeType mimeType field} is
* explicitly set to {@link MimeTypes#APPLICATION_M3U8} (Requires the <a
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-hls module to
* be added</a> to the app).
* <li>{@code SsMediaSource.Factory} if the item's {@link MediaItem.
PlaybackProperties
#uri uri}
* ends in '.ism', '.ism/Manifest' or if its {@link MediaItem.
PlaybackProperties
#mimeType
* <li>{@code SsMediaSource.Factory} if the item's {@link MediaItem.
LocalConfiguration
#uri uri}
* ends in '.ism', '.ism/Manifest' or if its {@link MediaItem.
LocalConfiguration
#mimeType
* mimeType field} is explicitly set to {@link MimeTypes#APPLICATION_SS} (Requires the <a
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">
* exoplayer-smoothstreaming module to be added</a> to the app).
* <li>{@link ProgressiveMediaSource.Factory} serves as a fallback if the item's {@link
* MediaItem.
PlaybackProperties
#uri uri} doesn't match one of the above. It tries to infer the
* MediaItem.
LocalConfiguration
#uri uri} doesn't match one of the above. It tries to infer the
* required extractor by using the {@link DefaultExtractorsFactory} or the {@link
* ExtractorsFactory} provided in the constructor. An {@link UnrecognizedInputFormatException}
* is thrown if none of the available extractors can read the stream.
...
...
@@ -78,7 +78,7 @@ import java.util.List;
*
* <h2>Ad support for media items with ad tag URIs</h2>
*
* <p>To support media items with {@link MediaItem.
PlaybackProperties
#adsConfiguration ads
* <p>To support media items with {@link MediaItem.
LocalConfiguration
#adsConfiguration ads
* configuration}, {@link #setAdsLoaderProvider} and {@link #setAdViewProvider} need to be called to
* configure the factory with the required providers.
*/
...
...
@@ -86,17 +86,17 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Provides {@link AdsLoader} instances for media items that have {@link
* MediaItem.
PlaybackProperties
#adsConfiguration ad tag URIs}.
* MediaItem.
LocalConfiguration
#adsConfiguration ad tag URIs}.
*/
public
interface
AdsLoaderProvider
{
/**
* Returns an {@link AdsLoader} for the given {@link
* MediaItem.
PlaybackProperties
#adsConfiguration ads configuration}, or {@code null} if no ads
* MediaItem.
LocalConfiguration
#adsConfiguration ads configuration}, or {@code null} if no ads
* loader is available for the given ads configuration.
*
* <p>This method is called each time a {@link MediaSource} is created from a {@link MediaItem}
* that defines an {@link MediaItem.
PlaybackProperties
#adsConfiguration ads configuration}.
* that defines an {@link MediaItem.
LocalConfiguration
#adsConfiguration ads configuration}.
*/
@Nullable
AdsLoader
getAdsLoader
(
MediaItem
.
AdsConfiguration
adsConfiguration
);
...
...
@@ -173,7 +173,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Sets whether a {@link ProgressiveMediaSource} or {@link SingleSampleMediaSource} is constructed
* to handle {@link MediaItem.
PlaybackProperties
#subtitles}. Defaults to false (i.e. {@link
* to handle {@link MediaItem.
LocalConfiguration
#subtitles}. Defaults to false (i.e. {@link
* SingleSampleMediaSource}.
*
* <p>This method is experimental, and will be renamed or removed in a future release.
...
...
@@ -190,7 +190,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Sets the {@link AdsLoaderProvider} that provides {@link AdsLoader} instances for media items
* that have {@link MediaItem.
PlaybackProperties
#adsConfiguration ads configurations}.
* that have {@link MediaItem.
LocalConfiguration
#adsConfiguration ads configurations}.
*
* @param adsLoaderProvider A provider for {@link AdsLoader} instances.
* @return This factory, for convenience.
...
...
@@ -341,11 +341,11 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
@Override
public
MediaSource
createMediaSource
(
MediaItem
mediaItem
)
{
Assertions
.
checkNotNull
(
mediaItem
.
playbackProperties
);
Assertions
.
checkNotNull
(
mediaItem
.
localConfiguration
);
@C
.
ContentType
int
type
=
Util
.
inferContentTypeForUriAndMimeType
(
mediaItem
.
playbackProperties
.
uri
,
mediaItem
.
playbackProperties
.
mimeType
);
mediaItem
.
localConfiguration
.
uri
,
mediaItem
.
localConfiguration
.
mimeType
);
@Nullable
MediaSourceFactory
mediaSourceFactory
=
mediaSourceFactories
.
get
(
type
);
Assertions
.
checkNotNull
(
mediaSourceFactory
,
"No suitable media source factory found for content type: "
+
type
);
...
...
@@ -375,7 +375,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
MediaSource
mediaSource
=
mediaSourceFactory
.
createMediaSource
(
mediaItem
);
List
<
MediaItem
.
Subtitle
>
subtitles
=
castNonNull
(
mediaItem
.
playbackProperties
).
subtitles
;
List
<
MediaItem
.
Subtitle
>
subtitles
=
castNonNull
(
mediaItem
.
localConfiguration
).
subtitles
;
if
(!
subtitles
.
isEmpty
())
{
MediaSource
[]
mediaSources
=
new
MediaSource
[
subtitles
.
size
()
+
1
];
mediaSources
[
0
]
=
mediaSource
;
...
...
@@ -434,9 +434,9 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
}
private
MediaSource
maybeWrapWithAdsMediaSource
(
MediaItem
mediaItem
,
MediaSource
mediaSource
)
{
Assertions
.
checkNotNull
(
mediaItem
.
playbackProperties
);
Assertions
.
checkNotNull
(
mediaItem
.
localConfiguration
);
@Nullable
MediaItem
.
AdsConfiguration
adsConfiguration
=
mediaItem
.
playbackProperties
.
adsConfiguration
;
MediaItem
.
AdsConfiguration
adsConfiguration
=
mediaItem
.
localConfiguration
.
adsConfiguration
;
if
(
adsConfiguration
==
null
)
{
return
mediaSource
;
}
...
...
@@ -460,7 +460,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/* adsId= */
adsConfiguration
.
adsId
!=
null
?
adsConfiguration
.
adsId
:
ImmutableList
.
of
(
mediaItem
.
mediaId
,
mediaItem
.
playbackProperties
.
uri
,
adsConfiguration
.
adTagUri
),
mediaItem
.
mediaId
,
mediaItem
.
localConfiguration
.
uri
,
adsConfiguration
.
adTagUri
),
/* adMediaSourceFactory= */
this
,
adsLoader
,
adViewProvider
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/MediaSourceFactory.java
View file @
a04f1d17
...
...
@@ -34,7 +34,7 @@ import java.util.List;
/** Factory for creating {@link MediaSource MediaSources} from {@link MediaItem MediaItems}. */
public
interface
MediaSourceFactory
{
/** @deprecated Use {@link MediaItem.
PlaybackProperties
#streamKeys} instead. */
/** @deprecated Use {@link MediaItem.
LocalConfiguration
#streamKeys} instead. */
@Deprecated
default
MediaSourceFactory
setStreamKeys
(
@Nullable
List
<
StreamKey
>
streamKeys
)
{
return
this
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
View file @
a04f1d17
...
...
@@ -215,14 +215,14 @@ public final class ProgressiveMediaSource extends BaseMediaSource
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link ProgressiveMediaSource}.
* @throws NullPointerException if {@link MediaItem#
playbackProperties
} is {@code null}.
* @throws NullPointerException if {@link MediaItem#
localConfiguration
} is {@code null}.
*/
@Override
public
ProgressiveMediaSource
createMediaSource
(
MediaItem
mediaItem
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
boolean
needsTag
=
mediaItem
.
playbackProperties
.
tag
==
null
&&
tag
!=
null
;
checkNotNull
(
mediaItem
.
localConfiguration
);
boolean
needsTag
=
mediaItem
.
localConfiguration
.
tag
==
null
&&
tag
!=
null
;
boolean
needsCustomCacheKey
=
mediaItem
.
playbackProperties
.
customCacheKey
==
null
&&
customCacheKey
!=
null
;
mediaItem
.
localConfiguration
.
customCacheKey
==
null
&&
customCacheKey
!=
null
;
if
(
needsTag
&&
needsCustomCacheKey
)
{
mediaItem
=
mediaItem
.
buildUpon
().
setTag
(
tag
).
setCustomCacheKey
(
customCacheKey
).
build
();
}
else
if
(
needsTag
)
{
...
...
@@ -252,7 +252,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
public
static
final
int
DEFAULT_LOADING_CHECK_INTERVAL_BYTES
=
1024
*
1024
;
private
final
MediaItem
mediaItem
;
private
final
MediaItem
.
PlaybackProperties
playbackProperties
;
private
final
MediaItem
.
LocalConfiguration
localConfiguration
;
private
final
DataSource
.
Factory
dataSourceFactory
;
private
final
ProgressiveMediaExtractor
.
Factory
progressiveMediaExtractorFactory
;
private
final
DrmSessionManager
drmSessionManager
;
...
...
@@ -272,7 +272,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
DrmSessionManager
drmSessionManager
,
LoadErrorHandlingPolicy
loadableLoadErrorHandlingPolicy
,
int
continueLoadingCheckIntervalBytes
)
{
this
.
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
this
.
localConfiguration
=
checkNotNull
(
mediaItem
.
localConfiguration
);
this
.
mediaItem
=
mediaItem
;
this
.
dataSourceFactory
=
dataSourceFactory
;
this
.
progressiveMediaExtractorFactory
=
progressiveMediaExtractorFactory
;
...
...
@@ -307,7 +307,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
dataSource
.
addTransferListener
(
transferListener
);
}
return
new
ProgressiveMediaPeriod
(
playbackProperties
.
uri
,
localConfiguration
.
uri
,
dataSource
,
progressiveMediaExtractorFactory
.
createProgressiveMediaExtractor
(),
drmSessionManager
,
...
...
@@ -316,7 +316,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
createEventDispatcher
(
id
),
this
,
allocator
,
playbackProperties
.
customCacheKey
,
localConfiguration
.
customCacheKey
,
continueLoadingCheckIntervalBytes
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/SilenceMediaSource.java
View file @
a04f1d17
...
...
@@ -58,8 +58,7 @@ public final class SilenceMediaSource extends BaseMediaSource {
/**
* Sets a tag for the media source which will be published in the {@link
* com.google.android.exoplayer2.Timeline} of the source as {@link
* com.google.android.exoplayer2.MediaItem.PlaybackProperties#tag
* Window#mediaItem.playbackProperties.tag}.
* MediaItem.LocalConfiguration#tag Window#mediaItem.localConfiguration.tag}.
*
* @param tag A tag for the media source.
* @return This factory, for convenience.
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java
View file @
a04f1d17
...
...
@@ -61,8 +61,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
/**
* Sets a tag for the media source which will be published in the {@link Timeline} of the source
* as {@link com.google.android.exoplayer2.MediaItem.PlaybackProperties#tag
* Window#mediaItem.playbackProperties.tag}.
* as {@link MediaItem.LocalConfiguration#tag Window#mediaItem.localConfiguration.tag}.
*
* @param tag A tag for the media source.
* @return This factory, for convenience.
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/ads/AdsMediaSource.java
View file @
a04f1d17
...
...
@@ -314,10 +314,10 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
MediaItem
.
Builder
adMediaItem
=
new
MediaItem
.
Builder
().
setUri
(
adUri
);
// Propagate the content's DRM config into the ad media source.
@Nullable
MediaItem
.
PlaybackProperties
contentPlaybackProperties
=
contentMediaSource
.
getMediaItem
().
playbackProperties
;
if
(
content
PlaybackProperties
!=
null
)
{
adMediaItem
.
setDrmConfiguration
(
content
PlaybackProperties
.
drmConfiguration
);
MediaItem
.
LocalConfiguration
contentLocalConfiguration
=
contentMediaSource
.
getMediaItem
().
localConfiguration
;
if
(
content
LocalConfiguration
!=
null
)
{
adMediaItem
.
setDrmConfiguration
(
content
LocalConfiguration
.
drmConfiguration
);
}
MediaSource
adMediaSource
=
adMediaSourceFactory
.
createMediaSource
(
adMediaItem
.
build
());
adMediaSourceHolder
.
initializeWithMediaSource
(
adMediaSource
,
adUri
);
...
...
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
View file @
a04f1d17
...
...
@@ -7953,11 +7953,11 @@ public final class ExoPlayerTest {
.
blockUntilActionScheduleFinished
(
TIMEOUT_MS
)
.
blockUntilEnded
(
TIMEOUT_MS
);
assertThat
(
currentMediaItems
.
get
(
0
).
playbackProperties
.
uri
.
toString
())
assertThat
(
currentMediaItems
.
get
(
0
).
localConfiguration
.
uri
.
toString
())
.
isEqualTo
(
"http://foo.bar/fake1"
);
assertThat
(
currentMediaItems
.
get
(
1
).
playbackProperties
.
uri
.
toString
())
assertThat
(
currentMediaItems
.
get
(
1
).
localConfiguration
.
uri
.
toString
())
.
isEqualTo
(
"http://foo.bar/fake2"
);
assertThat
(
currentMediaItems
.
get
(
2
).
playbackProperties
.
uri
.
toString
())
assertThat
(
currentMediaItems
.
get
(
2
).
localConfiguration
.
uri
.
toString
())
.
isEqualTo
(
"http://foo.bar/fake3"
);
assertThat
(
mediaItemsInTimeline
).
containsExactlyElementsIn
(
currentMediaItems
);
}
...
...
@@ -9767,7 +9767,7 @@ public final class ExoPlayerTest {
assertThat
(
oldPositionInfo
.
periodUid
).
isEqualTo
(
newPositionInfo
.
periodUid
);
assertThat
(
oldPositionInfo
.
periodIndex
).
isEqualTo
(
newPositionInfo
.
periodIndex
);
assertThat
(
oldPositionInfo
.
windowIndex
).
isEqualTo
(
newPositionInfo
.
windowIndex
);
assertThat
(
oldPositionInfo
.
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
1
);
assertThat
(
oldPositionInfo
.
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
1
);
assertThat
(
oldPositionInfo
.
windowUid
).
isEqualTo
(
newPositionInfo
.
windowUid
);
assertThat
(
oldPositionInfo
.
positionMs
).
isEqualTo
(
10_000
);
assertThat
(
oldPositionInfo
.
contentPositionMs
).
isEqualTo
(
10_000
);
...
...
@@ -9789,7 +9789,7 @@ public final class ExoPlayerTest {
assertThat
(
oldPositionInfo
.
periodUid
).
isEqualTo
(
newPositionInfo
.
periodUid
);
assertThat
(
oldPositionInfo
.
periodIndex
).
isEqualTo
(
newPositionInfo
.
periodIndex
);
assertThat
(
oldPositionInfo
.
windowIndex
).
isEqualTo
(
newPositionInfo
.
windowIndex
);
assertThat
(
oldPositionInfo
.
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
1
);
assertThat
(
oldPositionInfo
.
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
1
);
assertThat
(
oldPositionInfo
.
windowUid
).
isEqualTo
(
newPositionInfo
.
windowUid
);
assertThat
(
oldPositionInfo
.
positionMs
).
isEqualTo
(
10_000
);
assertThat
(
oldPositionInfo
.
contentPositionMs
).
isEqualTo
(
10_000
);
...
...
@@ -9809,7 +9809,7 @@ public final class ExoPlayerTest {
oldPositionInfo
=
oldPosition
.
getValue
();
newPositionInfo
=
newPosition
.
getValue
();
assertThat
(
oldPositionInfo
.
windowIndex
).
isEqualTo
(
1
);
assertThat
(
oldPositionInfo
.
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
2
);
assertThat
(
oldPositionInfo
.
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
2
);
assertThat
(
oldPositionInfo
.
windowUid
).
isNotEqualTo
(
newPositionInfo
.
windowUid
);
assertThat
(
oldPositionInfo
.
positionMs
).
isEqualTo
(
20_000
);
assertThat
(
oldPositionInfo
.
contentPositionMs
).
isEqualTo
(
20_000
);
...
...
@@ -10131,7 +10131,7 @@ public final class ExoPlayerTest {
assertThat
(
oldPosition
.
getValue
().
windowUid
)
.
isEqualTo
(
player
.
getCurrentTimeline
().
getWindow
(
0
,
window
).
uid
);
assertThat
(
oldPosition
.
getValue
().
windowIndex
).
isEqualTo
(
0
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
oldPosition
.
getValue
().
positionMs
).
isEqualTo
(
10_000
);
assertThat
(
oldPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
10_000
);
assertThat
(
oldPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
...
...
@@ -10139,7 +10139,7 @@ public final class ExoPlayerTest {
assertThat
(
newPosition
.
getValue
().
windowUid
)
.
isEqualTo
(
player
.
getCurrentTimeline
().
getWindow
(
1
,
window
).
uid
);
assertThat
(
newPosition
.
getValue
().
windowIndex
).
isEqualTo
(
1
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
newPosition
.
getValue
().
positionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
...
...
@@ -10159,13 +10159,13 @@ public final class ExoPlayerTest {
assertThat
(
newPosition
.
getValue
().
windowUid
)
.
isEqualTo
(
player
.
getCurrentTimeline
().
getWindow
(
2
,
window
).
uid
);
assertThat
(
oldPosition
.
getValue
().
windowIndex
).
isEqualTo
(
1
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
oldPosition
.
getValue
().
positionMs
).
isEqualTo
(
15_000
);
assertThat
(
oldPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
15_000
);
assertThat
(
oldPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
assertThat
(
oldPosition
.
getValue
().
adIndexInAdGroup
).
isEqualTo
(-
1
);
assertThat
(
newPosition
.
getValue
().
windowIndex
).
isEqualTo
(
2
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
newPosition
.
getValue
().
positionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
...
...
@@ -10179,14 +10179,14 @@ public final class ExoPlayerTest {
newPosition
.
capture
(),
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
assertThat
(
oldPosition
.
getValue
().
windowIndex
).
isEqualTo
(
2
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
oldPosition
.
getValue
().
windowUid
).
isEqualTo
(
lastNewWindowUid
);
assertThat
(
oldPosition
.
getValue
().
positionMs
).
isEqualTo
(
20_000
);
assertThat
(
oldPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
20_000
);
assertThat
(
oldPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
assertThat
(
oldPosition
.
getValue
().
adIndexInAdGroup
).
isEqualTo
(-
1
);
assertThat
(
newPosition
.
getValue
().
windowIndex
).
isEqualTo
(
2
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
newPosition
.
getValue
().
positionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
20_000
);
assertThat
(
newPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(
0
);
...
...
@@ -10201,14 +10201,14 @@ public final class ExoPlayerTest {
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
assertThat
(
oldPosition
.
getValue
().
windowUid
).
isEqualTo
(
lastNewWindowUid
);
assertThat
(
oldPosition
.
getValue
().
windowIndex
).
isEqualTo
(
2
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
oldPosition
.
getValue
().
positionMs
).
isEqualTo
(
5_000
);
assertThat
(
oldPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
20_000
);
assertThat
(
oldPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(
0
);
assertThat
(
oldPosition
.
getValue
().
adIndexInAdGroup
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
windowUid
).
isEqualTo
(
oldPosition
.
getValue
().
windowUid
);
assertThat
(
newPosition
.
getValue
().
windowIndex
).
isEqualTo
(
2
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
newPosition
.
getValue
().
positionMs
).
isEqualTo
(
19_999
);
assertThat
(
newPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
19_999
);
assertThat
(
newPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
...
...
@@ -10226,14 +10226,14 @@ public final class ExoPlayerTest {
.
onMediaItemTransition
(
any
(),
eq
(
Player
.
MEDIA_ITEM_TRANSITION_REASON_AUTO
));
assertThat
(
oldPosition
.
getValue
().
windowUid
).
isEqualTo
(
lastNewWindowUid
);
assertThat
(
oldPosition
.
getValue
().
windowIndex
).
isEqualTo
(
2
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-2"
);
assertThat
(
oldPosition
.
getValue
().
positionMs
).
isEqualTo
(
20_000
);
assertThat
(
oldPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
20_000
);
assertThat
(
oldPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
assertThat
(
oldPosition
.
getValue
().
adIndexInAdGroup
).
isEqualTo
(-
1
);
assertThat
(
newPosition
.
getValue
().
windowUid
).
isNotEqualTo
(
oldPosition
.
getValue
().
windowUid
);
assertThat
(
newPosition
.
getValue
().
windowIndex
).
isEqualTo
(
3
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-3"
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-3"
);
assertThat
(
newPosition
.
getValue
().
positionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(
0
);
...
...
@@ -10248,14 +10248,14 @@ public final class ExoPlayerTest {
eq
(
Player
.
DISCONTINUITY_REASON_AUTO_TRANSITION
));
assertThat
(
oldPosition
.
getValue
().
windowUid
).
isEqualTo
(
lastNewWindowUid
);
assertThat
(
oldPosition
.
getValue
().
windowIndex
).
isEqualTo
(
3
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-3"
);
assertThat
(
oldPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-3"
);
assertThat
(
oldPosition
.
getValue
().
positionMs
).
isEqualTo
(
5_000
);
assertThat
(
oldPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
0
);
assertThat
(
oldPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(
0
);
assertThat
(
oldPosition
.
getValue
().
adIndexInAdGroup
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
windowUid
).
isEqualTo
(
oldPosition
.
getValue
().
windowUid
);
assertThat
(
newPosition
.
getValue
().
windowIndex
).
isEqualTo
(
3
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-3"
);
assertThat
(
newPosition
.
getValue
().
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-3"
);
assertThat
(
newPosition
.
getValue
().
positionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
contentPositionMs
).
isEqualTo
(
0
);
assertThat
(
newPosition
.
getValue
().
adGroupIndex
).
isEqualTo
(-
1
);
...
...
@@ -10379,14 +10379,14 @@ public final class ExoPlayerTest {
any
(),
newPositionArgumentCaptor
.
capture
(),
eq
(
Player
.
DISCONTINUITY_REASON_REMOVE
));
// The state at auto-transition event time.
assertThat
(
mediaItemCount
[
0
]).
isEqualTo
(
2
);
assertThat
(
currentMediaItems
[
0
].
playbackProperties
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
currentMediaItems
[
0
].
localConfiguration
.
tag
).
isEqualTo
(
"id-1"
);
// The masked state after id-1 has been removed.
assertThat
(
mediaItemCount
[
1
]).
isEqualTo
(
1
);
assertThat
(
currentMediaItems
[
1
].
playbackProperties
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
currentMediaItems
[
1
].
localConfiguration
.
tag
).
isEqualTo
(
"id-0"
);
// PositionInfo reports the media item at event time.
assertThat
(
newPositionArgumentCaptor
.
getAllValues
().
get
(
0
).
mediaItem
.
playbackProperties
.
tag
)
assertThat
(
newPositionArgumentCaptor
.
getAllValues
().
get
(
0
).
mediaItem
.
localConfiguration
.
tag
)
.
isEqualTo
(
"id-1"
);
assertThat
(
newPositionArgumentCaptor
.
getAllValues
().
get
(
1
).
mediaItem
.
playbackProperties
.
tag
)
assertThat
(
newPositionArgumentCaptor
.
getAllValues
().
get
(
1
).
mediaItem
.
localConfiguration
.
tag
)
.
isEqualTo
(
"id-0"
);
player
.
release
();
}
...
...
@@ -10717,20 +10717,20 @@ public final class ExoPlayerTest {
List
<
Player
.
PositionInfo
>
newPositions
=
newPosition
.
getAllValues
();
assertThat
(
oldPositions
.
get
(
0
).
windowUid
).
isEqualTo
(
newPositions
.
get
(
0
).
windowUid
);
assertThat
(
newPositions
.
get
(
0
).
windowIndex
).
isEqualTo
(
0
);
assertThat
(
newPositions
.
get
(
0
).
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
newPositions
.
get
(
0
).
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
oldPositions
.
get
(
0
).
positionMs
).
isIn
(
Range
.
closed
(
4980L
,
5000L
));
assertThat
(
oldPositions
.
get
(
0
).
contentPositionMs
).
isIn
(
Range
.
closed
(
4980L
,
5000L
));
assertThat
(
oldPositions
.
get
(
0
).
windowIndex
).
isEqualTo
(
0
);
assertThat
(
oldPositions
.
get
(
0
).
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
oldPositions
.
get
(
0
).
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
newPositions
.
get
(
0
).
positionMs
).
isEqualTo
(
7_000
);
assertThat
(
newPositions
.
get
(
0
).
contentPositionMs
).
isEqualTo
(
7_000
);
assertThat
(
oldPositions
.
get
(
1
).
windowUid
).
isNotEqualTo
(
newPositions
.
get
(
1
).
windowUid
);
assertThat
(
oldPositions
.
get
(
1
).
windowIndex
).
isEqualTo
(
0
);
assertThat
(
oldPositions
.
get
(
1
).
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
oldPositions
.
get
(
1
).
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-0"
);
assertThat
(
oldPositions
.
get
(
1
).
positionMs
).
isEqualTo
(
7_000
);
assertThat
(
oldPositions
.
get
(
1
).
contentPositionMs
).
isEqualTo
(
7_000
);
assertThat
(
newPositions
.
get
(
1
).
windowIndex
).
isEqualTo
(
1
);
assertThat
(
newPositions
.
get
(
1
).
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
newPositions
.
get
(
1
).
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
"id-1"
);
assertThat
(
newPositions
.
get
(
1
).
positionMs
).
isEqualTo
(
1_000
);
assertThat
(
newPositions
.
get
(
1
).
contentPositionMs
).
isEqualTo
(
1_000
);
player
.
release
();
...
...
@@ -11032,7 +11032,7 @@ public final class ExoPlayerTest {
List
<
Player
.
PositionInfo
>
oldPositions
=
oldPosition
.
getAllValues
();
List
<
Player
.
PositionInfo
>
newPositions
=
newPosition
.
getAllValues
();
assertThat
(
oldPositions
.
get
(
0
).
windowIndex
).
isEqualTo
(
0
);
assertThat
(
oldPositions
.
get
(
0
).
mediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
123
);
assertThat
(
oldPositions
.
get
(
0
).
mediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
123
);
assertThat
(
oldPositions
.
get
(
0
).
positionMs
).
isIn
(
Range
.
closed
(
4980L
,
5000L
));
assertThat
(
oldPositions
.
get
(
0
).
contentPositionMs
).
isIn
(
Range
.
closed
(
4980L
,
5000L
));
assertThat
(
newPositions
.
get
(
0
).
windowUid
).
isNull
();
...
...
library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadHelperTest.java
View file @
a04f1d17
...
...
@@ -400,10 +400,10 @@ public class DownloadHelperTest {
DownloadRequest
downloadRequest
=
downloadHelper
.
getDownloadRequest
(
data
);
assertThat
(
downloadRequest
.
uri
).
isEqualTo
(
testMediaItem
.
playbackProperties
.
uri
);
assertThat
(
downloadRequest
.
mimeType
).
isEqualTo
(
testMediaItem
.
playbackProperties
.
mimeType
);
assertThat
(
downloadRequest
.
uri
).
isEqualTo
(
testMediaItem
.
localConfiguration
.
uri
);
assertThat
(
downloadRequest
.
mimeType
).
isEqualTo
(
testMediaItem
.
localConfiguration
.
mimeType
);
assertThat
(
downloadRequest
.
customCacheKey
)
.
isEqualTo
(
testMediaItem
.
playbackProperties
.
customCacheKey
);
.
isEqualTo
(
testMediaItem
.
localConfiguration
.
customCacheKey
);
assertThat
(
downloadRequest
.
data
).
isEqualTo
(
data
);
assertThat
(
downloadRequest
.
streamKeys
)
.
containsExactly
(
...
...
library/core/src/test/java/com/google/android/exoplayer2/source/SilenceMediaSourceTest.java
View file @
a04f1d17
...
...
@@ -38,8 +38,8 @@ public class SilenceMediaSourceTest {
assertThat
(
mediaItem
).
isNotNull
();
assertThat
(
mediaItem
.
mediaId
).
isEqualTo
(
SilenceMediaSource
.
MEDIA_ID
);
assertThat
(
mediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
Uri
.
EMPTY
);
assertThat
(
mediaItem
.
playbackProperties
.
mimeType
).
isEqualTo
(
MimeTypes
.
AUDIO_RAW
);
assertThat
(
mediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
Uri
.
EMPTY
);
assertThat
(
mediaItem
.
localConfiguration
.
mimeType
).
isEqualTo
(
MimeTypes
.
AUDIO_RAW
);
}
@Test
...
...
@@ -49,7 +49,7 @@ public class SilenceMediaSourceTest {
SilenceMediaSource
mediaSource
=
new
SilenceMediaSource
.
Factory
().
setTag
(
tag
).
setDurationUs
(
1_000_000
).
createMediaSource
();
assertThat
(
mediaSource
.
getMediaItem
().
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
mediaSource
.
getMediaItem
().
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
@Test
...
...
@@ -59,7 +59,7 @@ public class SilenceMediaSourceTest {
SilenceMediaSource
mediaSource
=
new
SilenceMediaSource
.
Factory
().
setTag
(
tag
).
setDurationUs
(
1_000_000
).
createMediaSource
();
assertThat
(
mediaSource
.
getMediaItem
().
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
mediaSource
.
getMediaItem
().
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
@Test
...
...
@@ -82,7 +82,7 @@ public class SilenceMediaSourceTest {
assertThat
(
mediaItem
).
isNotNull
();
assertThat
(
mediaItem
.
mediaId
).
isEqualTo
(
SilenceMediaSource
.
MEDIA_ID
);
assertThat
(
mediaSource
.
getMediaItem
().
playbackProperties
.
uri
).
isEqualTo
(
Uri
.
EMPTY
);
assertThat
(
mediaItem
.
playbackProperties
.
mimeType
).
isEqualTo
(
MimeTypes
.
AUDIO_RAW
);
assertThat
(
mediaSource
.
getMediaItem
().
localConfiguration
.
uri
).
isEqualTo
(
Uri
.
EMPTY
);
assertThat
(
mediaItem
.
localConfiguration
.
mimeType
).
isEqualTo
(
MimeTypes
.
AUDIO_RAW
);
}
}
library/core/src/test/java/com/google/android/exoplayer2/source/SinglePeriodTimelineTest.java
View file @
a04f1d17
...
...
@@ -101,7 +101,7 @@ public final class SinglePeriodTimelineTest {
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setTag
(
null
).
build
());
assertThat
(
timeline
.
getWindow
(
/* windowIndex= */
0
,
window
).
tag
).
isNull
();
assertThat
(
timeline
.
getWindow
(
/* windowIndex= */
0
,
window
).
mediaItem
.
playbackProperties
.
tag
)
assertThat
(
timeline
.
getWindow
(
/* windowIndex= */
0
,
window
).
mediaItem
.
localConfiguration
.
tag
)
.
isNull
();
assertThat
(
timeline
.
getPeriod
(
/* periodIndex= */
0
,
period
,
/* setIds= */
false
).
id
).
isNull
();
assertThat
(
timeline
.
getPeriod
(
/* periodIndex= */
0
,
period
,
/* setIds= */
true
).
id
).
isNull
();
...
...
@@ -143,7 +143,7 @@ public final class SinglePeriodTimelineTest {
Window
window
=
timeline
.
getWindow
(
/* windowIndex= */
0
,
this
.
window
);
assertThat
(
window
.
mediaItem
).
isEqualTo
(
mediaItem
);
assertThat
(
window
.
tag
).
isEqualTo
(
mediaItem
.
playbackProperties
.
tag
);
assertThat
(
window
.
tag
).
isEqualTo
(
mediaItem
.
localConfiguration
.
tag
);
}
@Test
...
...
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
View file @
a04f1d17
...
...
@@ -315,10 +315,10 @@ public final class DashMediaSource extends BaseMediaSource {
Assertions
.
checkArgument
(!
manifest
.
dynamic
);
MediaItem
.
Builder
mediaItemBuilder
=
mediaItem
.
buildUpon
().
setMimeType
(
MimeTypes
.
APPLICATION_MPD
);
if
(
mediaItem
.
playbackProperties
==
null
)
{
if
(
mediaItem
.
localConfiguration
==
null
)
{
mediaItemBuilder
.
setUri
(
Uri
.
EMPTY
);
}
if
(
mediaItem
.
playbackProperties
==
null
||
mediaItem
.
playbackProperties
.
tag
==
null
)
{
if
(
mediaItem
.
localConfiguration
==
null
||
mediaItem
.
localConfiguration
.
tag
==
null
)
{
mediaItemBuilder
.
setTag
(
tag
);
}
if
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
==
C
.
TIME_UNSET
)
{
...
...
@@ -329,12 +329,12 @@ public final class DashMediaSource extends BaseMediaSource {
.
setTargetOffsetMs
(
targetLiveOffsetOverrideMs
)
.
build
());
}
if
(
mediaItem
.
playbackProperties
==
null
||
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
())
{
if
(
mediaItem
.
localConfiguration
==
null
||
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
())
{
mediaItemBuilder
.
setStreamKeys
(
streamKeys
);
}
mediaItem
=
mediaItemBuilder
.
build
();
if
(!
checkNotNull
(
mediaItem
.
playbackProperties
).
streamKeys
.
isEmpty
())
{
if
(!
checkNotNull
(
mediaItem
.
localConfiguration
).
streamKeys
.
isEmpty
())
{
manifest
=
manifest
.
copy
(
streamKeys
);
}
return
new
DashMediaSource
(
...
...
@@ -367,26 +367,26 @@ public final class DashMediaSource extends BaseMediaSource {
*
* @param mediaItem The media item of the dash stream.
* @return The new {@link DashMediaSource}.
* @throws NullPointerException if {@link MediaItem#
playbackProperties
} is {@code null}.
* @throws NullPointerException if {@link MediaItem#
localConfiguration
} is {@code null}.
*/
@Override
public
DashMediaSource
createMediaSource
(
MediaItem
mediaItem
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
checkNotNull
(
mediaItem
.
localConfiguration
);
@Nullable
ParsingLoadable
.
Parser
<?
extends
DashManifest
>
manifestParser
=
this
.
manifestParser
;
if
(
manifestParser
==
null
)
{
manifestParser
=
new
DashManifestParser
();
}
List
<
StreamKey
>
streamKeys
=
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
?
this
.
streamKeys
:
mediaItem
.
playbackProperties
.
streamKeys
;
:
mediaItem
.
localConfiguration
.
streamKeys
;
if
(!
streamKeys
.
isEmpty
())
{
manifestParser
=
new
FilteringManifestParser
<>(
manifestParser
,
streamKeys
);
}
boolean
needsTag
=
mediaItem
.
playbackProperties
.
tag
==
null
&&
tag
!=
null
;
boolean
needsTag
=
mediaItem
.
localConfiguration
.
tag
==
null
&&
tag
!=
null
;
boolean
needsStreamKeys
=
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
boolean
needsTargetLiveOffset
=
mediaItem
.
liveConfiguration
.
targetOffsetMs
==
C
.
TIME_UNSET
&&
targetLiveOffsetOverrideMs
!=
C
.
TIME_UNSET
;
...
...
@@ -501,8 +501,8 @@ public final class DashMediaSource extends BaseMediaSource {
long
fallbackTargetLiveOffsetMs
)
{
this
.
mediaItem
=
mediaItem
;
this
.
liveConfiguration
=
mediaItem
.
liveConfiguration
;
this
.
manifestUri
=
checkNotNull
(
mediaItem
.
playbackProperties
).
uri
;
this
.
initialManifestUri
=
mediaItem
.
playbackProperties
.
uri
;
this
.
manifestUri
=
checkNotNull
(
mediaItem
.
localConfiguration
).
uri
;
this
.
initialManifestUri
=
mediaItem
.
localConfiguration
.
uri
;
this
.
manifest
=
manifest
;
this
.
manifestDataSourceFactory
=
manifestDataSourceFactory
;
this
.
manifestParser
=
manifestParser
;
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaSourceTest.java
View file @
a04f1d17
...
...
@@ -111,9 +111,9 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
dashMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
dashMediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
dashMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
dashMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
dashMediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
// Tests backwards compatibility
...
...
@@ -129,9 +129,9 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
dashMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
dashMediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
mediaItemTag
);
assertThat
(
dashMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
dashMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
dashMediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
mediaItemTag
);
}
// Tests backwards compatibility
...
...
@@ -146,9 +146,9 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
dashMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
dashMediaItem
.
playbackProperties
.
streamKeys
).
containsExactly
(
streamKey
);
assertThat
(
dashMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
dashMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
dashMediaItem
.
localConfiguration
.
streamKeys
).
containsExactly
(
streamKey
);
}
// Tests backwards compatibility
...
...
@@ -168,9 +168,9 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
dashMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
dashMediaItem
.
playbackProperties
.
streamKeys
).
containsExactly
(
mediaItemStreamKey
);
assertThat
(
dashMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
dashMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
dashMediaItem
.
localConfiguration
.
streamKeys
).
containsExactly
(
mediaItemStreamKey
);
}
@Test
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DefaultMediaSourceFactoryTest.java
View file @
a04f1d17
...
...
@@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
MediaSource
mediaSource
=
defaultMediaSourceFactory
.
createMediaSource
(
mediaItem
);
assertThat
(
mediaSource
.
getMediaItem
().
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
mediaSource
.
getMediaItem
().
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
@Test
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
View file @
a04f1d17
...
...
@@ -365,24 +365,24 @@ public final class HlsMediaSource extends BaseMediaSource
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link HlsMediaSource}.
* @throws NullPointerException if {@link MediaItem#
playbackProperties
} is {@code null}.
* @throws NullPointerException if {@link MediaItem#
localConfiguration
} is {@code null}.
*/
@Override
public
HlsMediaSource
createMediaSource
(
MediaItem
mediaItem
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
checkNotNull
(
mediaItem
.
localConfiguration
);
HlsPlaylistParserFactory
playlistParserFactory
=
this
.
playlistParserFactory
;
List
<
StreamKey
>
streamKeys
=
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
?
this
.
streamKeys
:
mediaItem
.
playbackProperties
.
streamKeys
;
:
mediaItem
.
localConfiguration
.
streamKeys
;
if
(!
streamKeys
.
isEmpty
())
{
playlistParserFactory
=
new
FilteringHlsPlaylistParserFactory
(
playlistParserFactory
,
streamKeys
);
}
boolean
needsTag
=
mediaItem
.
playbackProperties
.
tag
==
null
&&
tag
!=
null
;
boolean
needsTag
=
mediaItem
.
localConfiguration
.
tag
==
null
&&
tag
!=
null
;
boolean
needsStreamKeys
=
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
if
(
needsTag
&&
needsStreamKeys
)
{
mediaItem
=
mediaItem
.
buildUpon
().
setTag
(
tag
).
setStreamKeys
(
streamKeys
).
build
();
}
else
if
(
needsTag
)
{
...
...
@@ -412,7 +412,7 @@ public final class HlsMediaSource extends BaseMediaSource
}
private
final
HlsExtractorFactory
extractorFactory
;
private
final
MediaItem
.
PlaybackProperties
playbackProperties
;
private
final
MediaItem
.
LocalConfiguration
localConfiguration
;
private
final
HlsDataSourceFactory
dataSourceFactory
;
private
final
CompositeSequenceableLoaderFactory
compositeSequenceableLoaderFactory
;
private
final
DrmSessionManager
drmSessionManager
;
...
...
@@ -439,7 +439,7 @@ public final class HlsMediaSource extends BaseMediaSource
boolean
allowChunklessPreparation
,
@MetadataType
int
metadataType
,
boolean
useSessionKeys
)
{
this
.
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
this
.
localConfiguration
=
checkNotNull
(
mediaItem
.
localConfiguration
);
this
.
mediaItem
=
mediaItem
;
this
.
liveConfiguration
=
mediaItem
.
liveConfiguration
;
this
.
dataSourceFactory
=
dataSourceFactory
;
...
...
@@ -465,7 +465,8 @@ public final class HlsMediaSource extends BaseMediaSource
drmSessionManager
.
prepare
();
MediaSourceEventListener
.
EventDispatcher
eventDispatcher
=
createEventDispatcher
(
/* mediaPeriodId= */
null
);
playlistTracker
.
start
(
playbackProperties
.
uri
,
eventDispatcher
,
/* listener= */
this
);
playlistTracker
.
start
(
localConfiguration
.
uri
,
eventDispatcher
,
/* primaryPlaylistListener= */
this
);
}
@Override
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/DefaultMediaSourceFactoryTest.java
View file @
a04f1d17
...
...
@@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
MediaSource
mediaSource
=
defaultMediaSourceFactory
.
createMediaSource
(
mediaItem
);
assertThat
(
mediaSource
.
getMediaItem
().
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
mediaSource
.
getMediaItem
().
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
@Test
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsMediaSourceTest.java
View file @
a04f1d17
...
...
@@ -59,9 +59,9 @@ public class HlsMediaSourceTest {
MediaItem
hlsMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
hlsMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
hlsMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
hlsMediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
hlsMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
hlsMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
hlsMediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
// Tests backwards compatibility
...
...
@@ -77,9 +77,9 @@ public class HlsMediaSourceTest {
MediaItem
hlsMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
hlsMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
hlsMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
hlsMediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
mediaItemTag
);
assertThat
(
hlsMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
hlsMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
hlsMediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
mediaItemTag
);
}
// Tests backwards compatibility
...
...
@@ -94,9 +94,9 @@ public class HlsMediaSourceTest {
MediaItem
hlsMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
hlsMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
hlsMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
hlsMediaItem
.
playbackProperties
.
streamKeys
).
containsExactly
(
streamKey
);
assertThat
(
hlsMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
hlsMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
hlsMediaItem
.
localConfiguration
.
streamKeys
).
containsExactly
(
streamKey
);
}
// Tests backwards compatibility
...
...
@@ -116,9 +116,9 @@ public class HlsMediaSourceTest {
MediaItem
hlsMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
hlsMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
hlsMediaItem
.
playbackProperties
.
uri
).
isEqualTo
(
mediaItem
.
playbackProperties
.
uri
);
assertThat
(
hlsMediaItem
.
playbackProperties
.
streamKeys
).
containsExactly
(
mediaItemStreamKey
);
assertThat
(
hlsMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
hlsMediaItem
.
localConfiguration
.
uri
).
isEqualTo
(
mediaItem
.
localConfiguration
.
uri
);
assertThat
(
hlsMediaItem
.
localConfiguration
.
streamKeys
).
containsExactly
(
mediaItemStreamKey
);
}
@Test
...
...
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspMediaSource.java
View file @
a04f1d17
...
...
@@ -191,11 +191,11 @@ public final class RtspMediaSource extends BaseMediaSource {
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link RtspMediaSource}.
* @throws NullPointerException if {@link MediaItem#
playbackProperties
} is {@code null}.
* @throws NullPointerException if {@link MediaItem#
localConfiguration
} is {@code null}.
*/
@Override
public
RtspMediaSource
createMediaSource
(
MediaItem
mediaItem
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
checkNotNull
(
mediaItem
.
localConfiguration
);
return
new
RtspMediaSource
(
mediaItem
,
forceUseRtpTcp
...
...
@@ -241,7 +241,7 @@ public final class RtspMediaSource extends BaseMediaSource {
this
.
mediaItem
=
mediaItem
;
this
.
rtpDataChannelFactory
=
rtpDataChannelFactory
;
this
.
userAgent
=
userAgent
;
this
.
uri
=
checkNotNull
(
this
.
mediaItem
.
playbackProperties
).
uri
;
this
.
uri
=
checkNotNull
(
this
.
mediaItem
.
localConfiguration
).
uri
;
this
.
debugLoggingEnabled
=
debugLoggingEnabled
;
this
.
timelineDurationUs
=
C
.
TIME_UNSET
;
this
.
timelineIsPlaceholder
=
true
;
...
...
library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
View file @
a04f1d17
...
...
@@ -277,20 +277,20 @@ public final class SsMediaSource extends BaseMediaSource
public
SsMediaSource
createMediaSource
(
SsManifest
manifest
,
MediaItem
mediaItem
)
{
Assertions
.
checkArgument
(!
manifest
.
isLive
);
List
<
StreamKey
>
streamKeys
=
mediaItem
.
playbackProperties
!=
null
&&
!
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
?
mediaItem
.
playbackProperties
.
streamKeys
mediaItem
.
localConfiguration
!=
null
&&
!
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
?
mediaItem
.
localConfiguration
.
streamKeys
:
this
.
streamKeys
;
if
(!
streamKeys
.
isEmpty
())
{
manifest
=
manifest
.
copy
(
streamKeys
);
}
boolean
hasUri
=
mediaItem
.
playbackProperties
!=
null
;
boolean
hasTag
=
hasUri
&&
mediaItem
.
playbackProperties
.
tag
!=
null
;
boolean
hasUri
=
mediaItem
.
localConfiguration
!=
null
;
boolean
hasTag
=
hasUri
&&
mediaItem
.
localConfiguration
.
tag
!=
null
;
mediaItem
=
mediaItem
.
buildUpon
()
.
setMimeType
(
MimeTypes
.
APPLICATION_SS
)
.
setUri
(
hasUri
?
mediaItem
.
playbackProperties
.
uri
:
Uri
.
EMPTY
)
.
setTag
(
hasTag
?
mediaItem
.
playbackProperties
.
tag
:
tag
)
.
setUri
(
hasUri
?
mediaItem
.
localConfiguration
.
uri
:
Uri
.
EMPTY
)
.
setTag
(
hasTag
?
mediaItem
.
localConfiguration
.
tag
:
tag
)
.
setStreamKeys
(
streamKeys
)
.
build
();
return
new
SsMediaSource
(
...
...
@@ -310,26 +310,26 @@ public final class SsMediaSource extends BaseMediaSource
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link SsMediaSource}.
* @throws NullPointerException if {@link MediaItem#
playbackProperties
} is {@code null}.
* @throws NullPointerException if {@link MediaItem#
localConfiguration
} is {@code null}.
*/
@Override
public
SsMediaSource
createMediaSource
(
MediaItem
mediaItem
)
{
checkNotNull
(
mediaItem
.
playbackProperties
);
checkNotNull
(
mediaItem
.
localConfiguration
);
@Nullable
ParsingLoadable
.
Parser
<?
extends
SsManifest
>
manifestParser
=
this
.
manifestParser
;
if
(
manifestParser
==
null
)
{
manifestParser
=
new
SsManifestParser
();
}
List
<
StreamKey
>
streamKeys
=
!
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
?
mediaItem
.
playbackProperties
.
streamKeys
!
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
?
mediaItem
.
localConfiguration
.
streamKeys
:
this
.
streamKeys
;
if
(!
streamKeys
.
isEmpty
())
{
manifestParser
=
new
FilteringManifestParser
<>(
manifestParser
,
streamKeys
);
}
boolean
needsTag
=
mediaItem
.
playbackProperties
.
tag
==
null
&&
tag
!=
null
;
boolean
needsTag
=
mediaItem
.
localConfiguration
.
tag
==
null
&&
tag
!=
null
;
boolean
needsStreamKeys
=
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
mediaItem
.
localConfiguration
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
if
(
needsTag
&&
needsStreamKeys
)
{
mediaItem
=
mediaItem
.
buildUpon
().
setTag
(
tag
).
setStreamKeys
(
streamKeys
).
build
();
}
else
if
(
needsTag
)
{
...
...
@@ -370,7 +370,7 @@ public final class SsMediaSource extends BaseMediaSource
private
final
boolean
sideloadedManifest
;
private
final
Uri
manifestUri
;
private
final
MediaItem
.
PlaybackProperties
playbackProperties
;
private
final
MediaItem
.
LocalConfiguration
localConfiguration
;
private
final
MediaItem
mediaItem
;
private
final
DataSource
.
Factory
manifestDataSourceFactory
;
private
final
SsChunkSource
.
Factory
chunkSourceFactory
;
...
...
@@ -404,12 +404,12 @@ public final class SsMediaSource extends BaseMediaSource
long
livePresentationDelayMs
)
{
Assertions
.
checkState
(
manifest
==
null
||
!
manifest
.
isLive
);
this
.
mediaItem
=
mediaItem
;
playbackProperties
=
checkNotNull
(
mediaItem
.
playbackProperties
);
localConfiguration
=
checkNotNull
(
mediaItem
.
localConfiguration
);
this
.
manifest
=
manifest
;
this
.
manifestUri
=
playbackProperties
.
uri
.
equals
(
Uri
.
EMPTY
)
localConfiguration
.
uri
.
equals
(
Uri
.
EMPTY
)
?
null
:
Util
.
fixSmoothStreamingIsmManifestUri
(
playbackProperties
.
uri
);
:
Util
.
fixSmoothStreamingIsmManifestUri
(
localConfiguration
.
uri
);
this
.
manifestDataSourceFactory
=
manifestDataSourceFactory
;
this
.
manifestParser
=
manifestParser
;
this
.
chunkSourceFactory
=
chunkSourceFactory
;
...
...
library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/offline/SsDownloader.java
View file @
a04f1d17
...
...
@@ -87,7 +87,7 @@ public final class SsDownloader extends SegmentDownloader<SsManifest> {
.
buildUpon
()
.
setUri
(
Util
.
fixSmoothStreamingIsmManifestUri
(
checkNotNull
(
mediaItem
.
playbackProperties
).
uri
))
checkNotNull
(
mediaItem
.
localConfiguration
).
uri
))
.
build
(),
new
SsManifestParser
(),
cacheDataSourceFactory
,
...
...
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/DefaultMediaSourceFactoryTest.java
View file @
a04f1d17
...
...
@@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
MediaSource
mediaSource
=
defaultMediaSourceFactory
.
createMediaSource
(
mediaItem
);
assertThat
(
mediaSource
.
getMediaItem
().
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
mediaSource
.
getMediaItem
().
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
@Test
...
...
library/smoothstreaming/src/test/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSourceTest.java
View file @
a04f1d17
...
...
@@ -41,10 +41,10 @@ public class SsMediaSourceTest {
MediaItem
ssMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
ssMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
ssMediaItem
.
playbackProperties
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
playbackProperties
).
uri
);
assertThat
(
ssMediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
tag
);
assertThat
(
ssMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
ssMediaItem
.
localConfiguration
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
localConfiguration
).
uri
);
assertThat
(
ssMediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
tag
);
}
// Tests backwards compatibility
...
...
@@ -60,10 +60,10 @@ public class SsMediaSourceTest {
MediaItem
ssMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
ssMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
ssMediaItem
.
playbackProperties
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
playbackProperties
).
uri
);
assertThat
(
ssMediaItem
.
playbackProperties
.
tag
).
isEqualTo
(
mediaItemTag
);
assertThat
(
ssMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
ssMediaItem
.
localConfiguration
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
localConfiguration
).
uri
);
assertThat
(
ssMediaItem
.
localConfiguration
.
tag
).
isEqualTo
(
mediaItemTag
);
}
// Tests backwards compatibility
...
...
@@ -78,10 +78,10 @@ public class SsMediaSourceTest {
MediaItem
ssMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
ssMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
ssMediaItem
.
playbackProperties
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
playbackProperties
).
uri
);
assertThat
(
ssMediaItem
.
playbackProperties
.
streamKeys
).
containsExactly
(
streamKey
);
assertThat
(
ssMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
ssMediaItem
.
localConfiguration
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
localConfiguration
).
uri
);
assertThat
(
ssMediaItem
.
localConfiguration
.
streamKeys
).
containsExactly
(
streamKey
);
}
// Tests backwards compatibility
...
...
@@ -101,9 +101,9 @@ public class SsMediaSourceTest {
MediaItem
ssMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
ssMediaItem
.
playbackProperties
).
isNotNull
();
assertThat
(
ssMediaItem
.
playbackProperties
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
playbackProperties
).
uri
);
assertThat
(
ssMediaItem
.
playbackProperties
.
streamKeys
).
containsExactly
(
mediaItemStreamKey
);
assertThat
(
ssMediaItem
.
localConfiguration
).
isNotNull
();
assertThat
(
ssMediaItem
.
localConfiguration
.
uri
)
.
isEqualTo
(
castNonNull
(
mediaItem
.
localConfiguration
).
uri
);
assertThat
(
ssMediaItem
.
localConfiguration
.
streamKeys
).
containsExactly
(
mediaItemStreamKey
);
}
}
testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java
View file @
a04f1d17
...
...
@@ -85,7 +85,7 @@ public class FakeMediaSource extends BaseMediaSource {
new
MediaItem
.
Builder
().
setMediaId
(
"FakeMediaSource"
).
setUri
(
"http://manifest.uri"
).
build
();
private
static
final
DataSpec
FAKE_DATA_SPEC
=
new
DataSpec
(
castNonNull
(
FAKE_MEDIA_ITEM
.
playbackProperties
).
uri
);
new
DataSpec
(
castNonNull
(
FAKE_MEDIA_ITEM
.
localConfiguration
).
uri
);
private
static
final
int
MANIFEST_LOAD_BYTES
=
100
;
private
final
TrackGroupArray
trackGroupArray
;
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/TimelineAsserts.java
View file @
a04f1d17
...
...
@@ -58,9 +58,9 @@ public final class TimelineAsserts {
for
(
int
i
=
0
;
i
<
timeline
.
getWindowCount
();
i
++)
{
timeline
.
getWindow
(
i
,
window
);
if
(
expectedWindowTags
[
i
]
!=
null
)
{
MediaItem
.
PlaybackProperties
playbackProperties
=
window
.
mediaItem
.
playbackProperties
;
assertThat
(
playbackProperties
).
isNotNull
();
assertThat
(
Util
.
castNonNull
(
playbackProperties
).
tag
).
isEqualTo
(
expectedWindowTags
[
i
]);
MediaItem
.
LocalConfiguration
localConfiguration
=
window
.
mediaItem
.
localConfiguration
;
assertThat
(
localConfiguration
).
isNotNull
();
assertThat
(
Util
.
castNonNull
(
localConfiguration
).
tag
).
isEqualTo
(
expectedWindowTags
[
i
]);
}
}
}
...
...
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