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
c17d1091
authored
Nov 24, 2020
by
bachinger
Committed by
Andrew Lewis
Nov 27, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Remove "live" from fields in MediaItem.LiveConfiguraton
#exofixit PiperOrigin-RevId: 344065519
parent
93ed71fb
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
112 additions
and
112 deletions
library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java
library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java
library/core/src/main/java/com/google/android/exoplayer2/DefaultLivePlaybackSpeedControl.java
library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.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/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsMediaSourceTest.java
library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java
View file @
c17d1091
...
...
@@ -109,9 +109,9 @@ public final class MediaItem {
clipStartsAtKeyFrame
=
mediaItem
.
clippingProperties
.
startsAtKeyFrame
;
mediaId
=
mediaItem
.
mediaId
;
mediaMetadata
=
mediaItem
.
mediaMetadata
;
liveTargetOffsetMs
=
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
;
liveMinOffsetMs
=
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
;
liveMaxOffsetMs
=
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
;
liveTargetOffsetMs
=
mediaItem
.
liveConfiguration
.
targetOffsetMs
;
liveMinOffsetMs
=
mediaItem
.
liveConfiguration
.
minOffsetMs
;
liveMaxOffsetMs
=
mediaItem
.
liveConfiguration
.
maxOffsetMs
;
liveMinPlaybackSpeed
=
mediaItem
.
liveConfiguration
.
minPlaybackSpeed
;
liveMaxPlaybackSpeed
=
mediaItem
.
liveConfiguration
.
maxPlaybackSpeed
;
@Nullable
PlaybackProperties
playbackProperties
=
mediaItem
.
playbackProperties
;
...
...
@@ -474,8 +474,8 @@ public final class MediaItem {
*
* <p>See {@code Player#getCurrentLiveOffset()}.
*
* @param liveTargetOffsetMs The target
live offset, in milliseconds, or {@link C#TIME_UNSET} to
*
use
the media-defined default.
* @param liveTargetOffsetMs The target
offset, in milliseconds, or {@link C#TIME_UNSET} to use
* the media-defined default.
*/
public
Builder
setLiveTargetOffsetMs
(
long
liveTargetOffsetMs
)
{
this
.
liveTargetOffsetMs
=
liveTargetOffsetMs
;
...
...
@@ -487,8 +487,8 @@ public final class MediaItem {
*
* <p>See {@code Player#getCurrentLiveOffset()}.
*
* @param liveMinOffsetMs The minimum allowed
live offset, in milliseconds, or {@link
*
C#TIME_UNSET}
to use the media-defined default.
* @param liveMinOffsetMs The minimum allowed
offset, in milliseconds, or {@link C#TIME_UNSET}
* to use the media-defined default.
*/
public
Builder
setLiveMinOffsetMs
(
long
liveMinOffsetMs
)
{
this
.
liveMinOffsetMs
=
liveMinOffsetMs
;
...
...
@@ -500,8 +500,8 @@ public final class MediaItem {
*
* <p>See {@code Player#getCurrentLiveOffset()}.
*
* @param liveMaxOffsetMs The maximum allowed
live offset, in milliseconds, or {@link
*
C#TIME_UNSET}
to use the media-defined default.
* @param liveMaxOffsetMs The maximum allowed
offset, in milliseconds, or {@link C#TIME_UNSET}
* to use the media-defined default.
*/
public
Builder
setLiveMaxOffsetMs
(
long
liveMaxOffsetMs
)
{
this
.
liveMaxOffsetMs
=
liveMaxOffsetMs
;
...
...
@@ -840,22 +840,22 @@ public final class MediaItem {
/* maxPlaybackSpeed= */
C
.
RATE_UNSET
);
/**
* Target
live offset, in milliseconds, or {@link C#TIME_UNSET} to use the media-defined
* default.
* Target
offset from the live edge, in milliseconds, or {@link C#TIME_UNSET} to use the
*
media-defined
default.
*/
public
final
long
target
Live
OffsetMs
;
public
final
long
targetOffsetMs
;
/**
* The minimum allowed
live offset, in milliseconds, or {@link C#TIME_UNSET} to use the
* media-defined default.
* The minimum allowed
offset from the live edge, in milliseconds, or {@link C#TIME_UNSET} to
*
use the
media-defined default.
*/
public
final
long
min
Live
OffsetMs
;
public
final
long
minOffsetMs
;
/**
* The maximum allowed
live offset, in milliseconds, or {@link C#TIME_UNSET} to use the
* media-defined default.
* The maximum allowed
offset from the live edge, in milliseconds, or {@link C#TIME_UNSET} to
*
use the
media-defined default.
*/
public
final
long
max
Live
OffsetMs
;
public
final
long
maxOffsetMs
;
/** Minimum playback speed, or {@link C#RATE_UNSET} to use the media-defined default. */
public
final
float
minPlaybackSpeed
;
...
...
@@ -866,26 +866,26 @@ public final class MediaItem {
/**
* Creates a live playback configuration.
*
* @param target
LiveOffsetMs Target live offset, in milliseconds, or {@link C#TIME_UNSET} to us
e
*
the
media-defined default.
* @param min
LiveOffsetMs The minimum allowed live offset, in milliseconds, or {@link
*
C#TIME_UNSET}
to use the media-defined default.
* @param max
LiveOffsetMs The maximum allowed live offset, in milliseconds, or {@link
*
C#TIME_UNSET}
to use the media-defined default.
* @param target
OffsetMs Target live offset, in milliseconds, or {@link C#TIME_UNSET} to use th
e
* media-defined default.
* @param min
OffsetMs The minimum allowed live offset, in milliseconds, or {@link C#TIME_UNSET}
* to use the media-defined default.
* @param max
OffsetMs The maximum allowed live offset, in milliseconds, or {@link C#TIME_UNSET}
* to use the media-defined default.
* @param minPlaybackSpeed Minimum playback speed, or {@link C#RATE_UNSET} to use the
* media-defined default.
* @param maxPlaybackSpeed Maximum playback speed, or {@link C#RATE_UNSET} to use the
* media-defined default.
*/
public
LiveConfiguration
(
long
target
Live
OffsetMs
,
long
min
Live
OffsetMs
,
long
max
Live
OffsetMs
,
long
targetOffsetMs
,
long
minOffsetMs
,
long
maxOffsetMs
,
float
minPlaybackSpeed
,
float
maxPlaybackSpeed
)
{
this
.
target
LiveOffsetMs
=
targetLive
OffsetMs
;
this
.
min
LiveOffsetMs
=
minLive
OffsetMs
;
this
.
max
LiveOffsetMs
=
maxLive
OffsetMs
;
this
.
target
OffsetMs
=
target
OffsetMs
;
this
.
min
OffsetMs
=
min
OffsetMs
;
this
.
max
OffsetMs
=
max
OffsetMs
;
this
.
minPlaybackSpeed
=
minPlaybackSpeed
;
this
.
maxPlaybackSpeed
=
maxPlaybackSpeed
;
}
...
...
@@ -900,18 +900,18 @@ public final class MediaItem {
}
LiveConfiguration
other
=
(
LiveConfiguration
)
obj
;
return
target
LiveOffsetMs
==
other
.
targetLive
OffsetMs
&&
min
LiveOffsetMs
==
other
.
minLive
OffsetMs
&&
max
LiveOffsetMs
==
other
.
maxLive
OffsetMs
return
target
OffsetMs
==
other
.
target
OffsetMs
&&
min
OffsetMs
==
other
.
min
OffsetMs
&&
max
OffsetMs
==
other
.
max
OffsetMs
&&
minPlaybackSpeed
==
other
.
minPlaybackSpeed
&&
maxPlaybackSpeed
==
other
.
maxPlaybackSpeed
;
}
@Override
public
int
hashCode
()
{
int
result
=
(
int
)
(
target
LiveOffsetMs
^
(
targetLive
OffsetMs
>>>
32
));
result
=
31
*
result
+
(
int
)
(
min
LiveOffsetMs
^
(
minLive
OffsetMs
>>>
32
));
result
=
31
*
result
+
(
int
)
(
max
LiveOffsetMs
^
(
maxLive
OffsetMs
>>>
32
));
int
result
=
(
int
)
(
target
OffsetMs
^
(
target
OffsetMs
>>>
32
));
result
=
31
*
result
+
(
int
)
(
min
OffsetMs
^
(
min
OffsetMs
>>>
32
));
result
=
31
*
result
+
(
int
)
(
max
OffsetMs
^
(
max
OffsetMs
>>>
32
));
result
=
31
*
result
+
(
minPlaybackSpeed
!=
0
?
Float
.
floatToIntBits
(
minPlaybackSpeed
)
:
0
);
result
=
31
*
result
+
(
maxPlaybackSpeed
!=
0
?
Float
.
floatToIntBits
(
maxPlaybackSpeed
)
:
0
);
return
result
;
...
...
library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java
View file @
c17d1091
...
...
@@ -312,7 +312,7 @@ public class MediaItemTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
URI_STRING
).
setLiveTargetOffsetMs
(
10_000
).
build
();
assertThat
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
10_000
);
assertThat
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
10_000
);
}
@Test
...
...
@@ -336,7 +336,7 @@ public class MediaItemTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
URI_STRING
).
setLiveMinOffsetMs
(
1234
).
build
();
assertThat
(
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
1234
);
assertThat
(
mediaItem
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
1234
);
}
@Test
...
...
@@ -344,7 +344,7 @@ public class MediaItemTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
URI_STRING
).
setLiveMaxOffsetMs
(
1234
).
build
();
assertThat
(
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
1234
);
assertThat
(
mediaItem
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
1234
);
}
@Test
...
...
library/core/src/main/java/com/google/android/exoplayer2/DefaultLivePlaybackSpeedControl.java
View file @
c17d1091
...
...
@@ -295,9 +295,9 @@ public final class DefaultLivePlaybackSpeedControl implements LivePlaybackSpeedC
@Override
public
void
setLiveConfiguration
(
LiveConfiguration
liveConfiguration
)
{
mediaConfigurationTargetLiveOffsetUs
=
C
.
msToUs
(
liveConfiguration
.
target
Live
OffsetMs
);
minTargetLiveOffsetUs
=
C
.
msToUs
(
liveConfiguration
.
min
Live
OffsetMs
);
maxTargetLiveOffsetUs
=
C
.
msToUs
(
liveConfiguration
.
max
Live
OffsetMs
);
mediaConfigurationTargetLiveOffsetUs
=
C
.
msToUs
(
liveConfiguration
.
targetOffsetMs
);
minTargetLiveOffsetUs
=
C
.
msToUs
(
liveConfiguration
.
minOffsetMs
);
maxTargetLiveOffsetUs
=
C
.
msToUs
(
liveConfiguration
.
maxOffsetMs
);
minPlaybackSpeed
=
liveConfiguration
.
minPlaybackSpeed
!=
C
.
RATE_UNSET
?
liveConfiguration
.
minPlaybackSpeed
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
View file @
c17d1091
...
...
@@ -317,23 +317,23 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
mediaSourceFactory
.
setLoadErrorHandlingPolicy
(
loadErrorHandlingPolicy
);
// Make sure to retain the very same media item instance, if no value needs to be overridden.
if
((
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
==
C
.
TIME_UNSET
if
((
mediaItem
.
liveConfiguration
.
targetOffsetMs
==
C
.
TIME_UNSET
&&
liveTargetOffsetMs
!=
C
.
TIME_UNSET
)
||
(
mediaItem
.
liveConfiguration
.
minPlaybackSpeed
==
C
.
RATE_UNSET
&&
liveMinSpeed
!=
C
.
RATE_UNSET
)
||
(
mediaItem
.
liveConfiguration
.
maxPlaybackSpeed
==
C
.
RATE_UNSET
&&
liveMaxSpeed
!=
C
.
RATE_UNSET
)
||
(
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
==
C
.
TIME_UNSET
||
(
mediaItem
.
liveConfiguration
.
minOffsetMs
==
C
.
TIME_UNSET
&&
liveMinOffsetMs
!=
C
.
TIME_UNSET
)
||
(
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
==
C
.
TIME_UNSET
||
(
mediaItem
.
liveConfiguration
.
maxOffsetMs
==
C
.
TIME_UNSET
&&
liveMaxOffsetMs
!=
C
.
TIME_UNSET
))
{
mediaItem
=
mediaItem
.
buildUpon
()
.
setLiveTargetOffsetMs
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
==
C
.
TIME_UNSET
mediaItem
.
liveConfiguration
.
targetOffsetMs
==
C
.
TIME_UNSET
?
liveTargetOffsetMs
:
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
:
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
.
setLiveMinPlaybackSpeed
(
mediaItem
.
liveConfiguration
.
minPlaybackSpeed
==
C
.
RATE_UNSET
?
liveMinSpeed
...
...
@@ -343,13 +343,13 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
?
liveMaxSpeed
:
mediaItem
.
liveConfiguration
.
maxPlaybackSpeed
)
.
setLiveMinOffsetMs
(
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
==
C
.
TIME_UNSET
mediaItem
.
liveConfiguration
.
minOffsetMs
==
C
.
TIME_UNSET
?
liveMinOffsetMs
:
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
)
:
mediaItem
.
liveConfiguration
.
minOffsetMs
)
.
setLiveMaxOffsetMs
(
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
==
C
.
TIME_UNSET
mediaItem
.
liveConfiguration
.
maxOffsetMs
==
C
.
TIME_UNSET
?
liveMaxOffsetMs
:
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
)
:
mediaItem
.
liveConfiguration
.
maxOffsetMs
)
.
build
();
}
MediaSource
mediaSource
=
mediaSourceFactory
.
createMediaSource
(
mediaItem
);
...
...
library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.java
View file @
c17d1091
...
...
@@ -245,9 +245,9 @@ public final class DefaultMediaSourceFactoryTest {
MediaItem
mediaItemFromSource
=
mediaSource
.
getMediaItem
();
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
}
...
...
@@ -266,9 +266,9 @@ public final class DefaultMediaSourceFactoryTest {
MediaItem
mediaItemFromSource
=
mediaSource
.
getMediaItem
();
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
20
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
2222
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
4444
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
20
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
2222
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
4444
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(.
1
f
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
2.0f
);
}
...
...
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
View file @
c17d1091
...
...
@@ -306,7 +306,7 @@ public final class DashMediaSource extends BaseMediaSource {
}
boolean
hasUri
=
mediaItem
.
playbackProperties
!=
null
;
boolean
hasTag
=
hasUri
&&
mediaItem
.
playbackProperties
.
tag
!=
null
;
boolean
hasTargetLiveOffset
=
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
!=
C
.
TIME_UNSET
;
boolean
hasTargetLiveOffset
=
mediaItem
.
liveConfiguration
.
targetOffsetMs
!=
C
.
TIME_UNSET
;
mediaItem
=
mediaItem
.
buildUpon
()
...
...
@@ -315,7 +315,7 @@ public final class DashMediaSource extends BaseMediaSource {
.
setTag
(
hasTag
?
mediaItem
.
playbackProperties
.
tag
:
tag
)
.
setLiveTargetOffsetMs
(
hasTargetLiveOffset
?
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
?
mediaItem
.
liveConfiguration
.
targetOffsetMs
:
targetLiveOffsetOverrideMs
)
.
setStreamKeys
(
streamKeys
)
.
build
();
...
...
@@ -370,7 +370,7 @@ public final class DashMediaSource extends BaseMediaSource {
boolean
needsStreamKeys
=
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
()
&&
!
streamKeys
.
isEmpty
();
boolean
needsTargetLiveOffset
=
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
==
C
.
TIME_UNSET
mediaItem
.
liveConfiguration
.
targetOffsetMs
==
C
.
TIME_UNSET
&&
targetLiveOffsetOverrideMs
!=
C
.
TIME_UNSET
;
if
(
needsTag
||
needsStreamKeys
||
needsTargetLiveOffset
)
{
MediaItem
.
Builder
builder
=
mediaItem
.
buildUpon
();
...
...
@@ -942,7 +942,7 @@ public final class DashMediaSource extends BaseMediaSource {
/* windowEndPeriodTimeUs= */
currentEndTimeUs
);
windowDefaultStartPositionUs
=
nowUnixTimeUs
-
C
.
msToUs
(
windowStartTimeMs
+
updatedMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
);
-
C
.
msToUs
(
windowStartTimeMs
+
updatedMediaItem
.
liveConfiguration
.
targetOffsetMs
);
long
minimumDefaultStartPositionUs
=
min
(
MIN_LIVE_DEFAULT_START_POSITION_US
,
windowDurationUs
/
2
);
if
(
windowDefaultStartPositionUs
<
minimumDefaultStartPositionUs
)
{
...
...
@@ -999,8 +999,8 @@ public final class DashMediaSource extends BaseMediaSource {
private
void
updateMediaItemLiveConfiguration
(
long
nowPeriodTimeUs
,
long
windowStartPeriodTimeUs
,
long
windowEndPeriodTimeUs
)
{
long
maxLiveOffsetMs
;
if
(
originalMediaItem
.
liveConfiguration
.
max
Live
OffsetMs
!=
C
.
TIME_UNSET
)
{
maxLiveOffsetMs
=
originalMediaItem
.
liveConfiguration
.
max
Live
OffsetMs
;
if
(
originalMediaItem
.
liveConfiguration
.
maxOffsetMs
!=
C
.
TIME_UNSET
)
{
maxLiveOffsetMs
=
originalMediaItem
.
liveConfiguration
.
maxOffsetMs
;
}
else
if
(
manifest
.
serviceDescription
!=
null
&&
manifest
.
serviceDescription
.
maxOffsetMs
!=
C
.
TIME_UNSET
)
{
maxLiveOffsetMs
=
manifest
.
serviceDescription
.
maxOffsetMs
;
...
...
@@ -1008,8 +1008,8 @@ public final class DashMediaSource extends BaseMediaSource {
maxLiveOffsetMs
=
C
.
usToMs
(
nowPeriodTimeUs
-
windowStartPeriodTimeUs
);
}
long
minLiveOffsetMs
;
if
(
originalMediaItem
.
liveConfiguration
.
min
Live
OffsetMs
!=
C
.
TIME_UNSET
)
{
minLiveOffsetMs
=
originalMediaItem
.
liveConfiguration
.
min
Live
OffsetMs
;
if
(
originalMediaItem
.
liveConfiguration
.
minOffsetMs
!=
C
.
TIME_UNSET
)
{
minLiveOffsetMs
=
originalMediaItem
.
liveConfiguration
.
minOffsetMs
;
}
else
if
(
manifest
.
serviceDescription
!=
null
&&
manifest
.
serviceDescription
.
minOffsetMs
!=
C
.
TIME_UNSET
)
{
minLiveOffsetMs
=
manifest
.
serviceDescription
.
minOffsetMs
;
...
...
@@ -1025,9 +1025,9 @@ public final class DashMediaSource extends BaseMediaSource {
}
}
long
targetOffsetMs
;
if
(
updatedMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
!=
C
.
TIME_UNSET
)
{
if
(
updatedMediaItem
.
liveConfiguration
.
targetOffsetMs
!=
C
.
TIME_UNSET
)
{
// Keep existing target offset even if the media configuration changes.
targetOffsetMs
=
updatedMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
;
targetOffsetMs
=
updatedMediaItem
.
liveConfiguration
.
targetOffsetMs
;
}
else
if
(
manifest
.
serviceDescription
!=
null
&&
manifest
.
serviceDescription
.
targetOffsetMs
!=
C
.
TIME_UNSET
)
{
targetOffsetMs
=
manifest
.
serviceDescription
.
targetOffsetMs
;
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaSourceTest.java
View file @
c17d1091
...
...
@@ -227,7 +227,7 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
2L
);
assertThat
(
dashMediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
2L
);
}
@Test
...
...
@@ -240,7 +240,7 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
2L
);
assertThat
(
dashMediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
2L
);
}
@Test
...
...
@@ -252,7 +252,7 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
2000L
);
assertThat
(
dashMediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
2000L
);
}
@Test
...
...
@@ -264,7 +264,7 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
mediaItem
).
getMediaItem
();
assertThat
(
dashMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
dashMediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
}
@Test
...
...
@@ -276,7 +276,7 @@ public final class DashMediaSourceTest {
MediaItem
dashMediaItem
=
factory
.
createMediaSource
(
MediaItem
.
fromUri
(
Uri
.
EMPTY
)).
getMediaItem
();
assertThat
(
dashMediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
dashMediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
C
.
TIME_UNSET
);
}
@Test
...
...
@@ -289,10 +289,10 @@ public final class DashMediaSourceTest {
MediaItem
mediaItemFromSource
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
)
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
)
.
isEqualTo
(
DashMediaSource
.
DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
0L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
58_000L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
0L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
58_000L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
}
...
...
@@ -308,9 +308,9 @@ public final class DashMediaSourceTest {
MediaItem
mediaItemFromSource
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
1234L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
0L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
58_000L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
1234L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
0L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
58_000L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
}
...
...
@@ -335,9 +335,9 @@ public final class DashMediaSourceTest {
MediaItem
mediaItemFromSource
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
876L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
500L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
20_000L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
876L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
500L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
20_000L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
23
f
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
42
f
);
}
...
...
@@ -355,9 +355,9 @@ public final class DashMediaSourceTest {
MediaItem
mediaItem
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
2_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
500L
);
assertThat
(
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
58_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
2_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
500L
);
assertThat
(
mediaItem
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
58_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
assertThat
(
mediaItem
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
C
.
RATE_UNSET
);
}
...
...
@@ -385,9 +385,9 @@ public final class DashMediaSourceTest {
MediaItem
mediaItemFromSource
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
876L
);
assertThat
(
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
200L
);
assertThat
(
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
999L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
876L
);
assertThat
(
mediaItem
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
200L
);
assertThat
(
mediaItem
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
999L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
23
f
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
42
f
);
}
...
...
@@ -403,9 +403,9 @@ public final class DashMediaSourceTest {
MediaItem
mediaItem
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
4_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
2_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
6_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
4_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
2_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
6_000L
);
assertThat
(
mediaItem
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
0.96f
);
assertThat
(
mediaItem
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
1.04f
);
}
...
...
@@ -430,9 +430,9 @@ public final class DashMediaSourceTest {
MediaItem
mediaItemFromSource
=
prepareAndWaitForTimelineRefresh
(
mediaSource
).
mediaItem
;
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
876L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
min
Live
OffsetMs
).
isEqualTo
(
100L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
max
Live
OffsetMs
).
isEqualTo
(
999L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
876L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minOffsetMs
).
isEqualTo
(
100L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxOffsetMs
).
isEqualTo
(
999L
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
minPlaybackSpeed
).
isEqualTo
(
23
f
);
assertThat
(
mediaItemFromSource
.
liveConfiguration
.
maxPlaybackSpeed
).
isEqualTo
(
42
f
);
}
...
...
@@ -448,7 +448,7 @@ public final class DashMediaSourceTest {
Window
window
=
prepareAndWaitForTimelineRefresh
(
mediaSource
);
// Expect the target live offset as defined in the manifest.
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
3000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
3000
);
// Expect the default position at the first segment start before the live edge.
assertThat
(
window
.
getDefaultPositionMs
()).
isEqualTo
(
2_000
);
}
...
...
@@ -466,7 +466,7 @@ public final class DashMediaSourceTest {
// Expect the default position at the first segment start below the minimum live start position.
assertThat
(
window
.
getDefaultPositionMs
()).
isEqualTo
(
4_000
);
// Expect the target live offset reaching from now time to the minimum live start position.
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
9000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
9000
);
}
@Test
...
...
@@ -483,7 +483,7 @@ public final class DashMediaSourceTest {
// Expect the default position at the start of the last segment.
assertThat
(
window
.
getDefaultPositionMs
()).
isEqualTo
(
12_000
);
// Expect the target live offset reaching from now time to the end of the window.
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
60_000
-
16_000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
60_000
-
16_000
);
}
private
static
Window
prepareAndWaitForTimelineRefresh
(
MediaSource
mediaSource
)
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
View file @
c17d1091
...
...
@@ -515,8 +515,8 @@ public final class HlsMediaSource extends BaseMediaSource
if
(
playlistTracker
.
isLive
())
{
long
liveEdgeOffsetUs
=
getLiveEdgeOffsetUs
(
playlist
);
long
targetLiveOffsetUs
=
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
!=
C
.
TIME_UNSET
?
C
.
msToUs
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
mediaItem
.
liveConfiguration
.
targetOffsetMs
!=
C
.
TIME_UNSET
?
C
.
msToUs
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
:
getTargetLiveOffsetUs
(
playlist
,
liveEdgeOffsetUs
);
// Ensure target live offset is within the live window and greater than the live edge offset.
targetLiveOffsetUs
=
...
...
@@ -583,7 +583,7 @@ public final class HlsMediaSource extends BaseMediaSource
long
minStartPositionUs
=
playlist
.
durationUs
+
liveEdgeOffsetUs
-
C
.
msToUs
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
);
-
C
.
msToUs
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
);
while
(
segmentIndex
>
0
&&
segments
.
get
(
segmentIndex
).
relativeStartTimeUs
>
minStartPositionUs
)
{
segmentIndex
--;
...
...
@@ -593,7 +593,7 @@ public final class HlsMediaSource extends BaseMediaSource
private
void
maybeUpdateMediaItem
(
long
targetLiveOffsetUs
)
{
long
targetLiveOffsetMs
=
C
.
usToMs
(
targetLiveOffsetUs
);
if
(
targetLiveOffsetMs
!=
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
{
if
(
targetLiveOffsetMs
!=
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
{
mediaItem
=
mediaItem
.
buildUpon
().
setLiveTargetOffsetMs
(
targetLiveOffsetMs
).
build
();
}
}
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsMediaSourceTest.java
View file @
c17d1091
...
...
@@ -183,7 +183,7 @@ public class HlsMediaSourceTest {
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
// The target live offset is picked from target duration (3 * 4 = 12 seconds) and then expressed
// in relation to the live edge (12 + 1 seconds).
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
13000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
13000
);
assertThat
(
window
.
defaultPositionUs
).
isEqualTo
(
4000000
);
}
...
...
@@ -219,7 +219,7 @@ public class HlsMediaSourceTest {
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
// The target live offset is picked from hold back and then expressed in relation to the live
// edge (+1 seconds).
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
13000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
13000
);
assertThat
(
window
.
defaultPositionUs
).
isEqualTo
(
4000000
);
}
...
...
@@ -257,7 +257,7 @@ public class HlsMediaSourceTest {
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
// The target live offset is picked from hold back and then expressed in relation to the live
// edge (+1 seconds).
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
13000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
13000
);
assertThat
(
window
.
defaultPositionUs
).
isEqualTo
(
4000000
);
}
...
...
@@ -288,7 +288,7 @@ public class HlsMediaSourceTest {
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
// The target live offset is picked from part hold back and then expressed in relation to the
// live edge (+1 seconds).
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
4000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
4000
);
assertThat
(
window
.
defaultPositionUs
).
isEqualTo
(
0
);
}
...
...
@@ -318,7 +318,7 @@ public class HlsMediaSourceTest {
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
// The target live offset is picked from the media item and not adjusted.
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
1000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
1000
);
assertThat
(
window
.
defaultPositionUs
).
isEqualTo
(
0
);
}
...
...
@@ -349,9 +349,9 @@ public class HlsMediaSourceTest {
Timeline
timeline
=
prepareAndWaitForTimeline
(
mediaSource
);
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
assertThat
(
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
assertThat
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
.
isGreaterThan
(
C
.
usToMs
(
window
.
durationUs
));
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
9000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
9000
);
}
@Test
...
...
@@ -385,7 +385,7 @@ public class HlsMediaSourceTest {
Timeline
.
Window
window
=
timeline
.
getWindow
(
0
,
new
Timeline
.
Window
());
// The target live offset is not adjusted to the live edge because the list does not have
// program date time.
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
).
isEqualTo
(
12000
);
assertThat
(
window
.
mediaItem
.
liveConfiguration
.
targetOffsetMs
).
isEqualTo
(
12000
);
assertThat
(
window
.
defaultPositionUs
).
isEqualTo
(
4000000
);
}
...
...
@@ -475,13 +475,13 @@ public class HlsMediaSourceTest {
runMainLooperUntil
(()
->
timelines
.
size
()
==
4
);
Timeline
.
Window
window
=
new
Timeline
.
Window
();
assertThat
(
timelines
.
get
(
0
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
assertThat
(
timelines
.
get
(
0
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
.
isEqualTo
(
12000
);
assertThat
(
timelines
.
get
(
1
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
assertThat
(
timelines
.
get
(
1
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
.
isEqualTo
(
12000
);
assertThat
(
timelines
.
get
(
2
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
assertThat
(
timelines
.
get
(
2
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
.
isEqualTo
(
8000
);
assertThat
(
timelines
.
get
(
3
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
target
Live
OffsetMs
)
assertThat
(
timelines
.
get
(
3
).
getWindow
(
0
,
window
).
mediaItem
.
liveConfiguration
.
targetOffsetMs
)
.
isEqualTo
(
8000
);
}
...
...
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