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
a6315597
authored
Sep 22, 2021
by
ibaker
Committed by
bachinger
Sep 23, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Use the new MediaItem.Builder#setLiveConfiguration method
PiperOrigin-RevId: 398215071
parent
fefa6cb8
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
141 additions
and
43 deletions
docs/live-streaming.md
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.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
docs/live-streaming.md
View file @
a6315597
...
...
@@ -106,7 +106,10 @@ SimpleExoPlayer player =
MediaItem mediaItem =
new MediaItem.Builder()
.setUri(mediaUri)
.setLiveMaxPlaybackSpeed(1.02f)
.setLiveConfiguration(
new MediaItem.LiveConfiguration.Builder()
.setMaxPlaybackSpeed(1.02f)
.build())
.build();
player.setMediaItem(mediaItem);
~~~
...
...
library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java
View file @
a6315597
...
...
@@ -9101,7 +9101,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
pause
();
...
...
@@ -9146,7 +9150,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
player
.
pause
();
player
.
seekTo
(
18_000
);
...
...
@@ -9187,7 +9195,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
player
.
pause
();
player
.
setMediaSource
(
new
FakeMediaSource
(
timeline
));
player
.
prepare
();
...
...
@@ -9230,7 +9242,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
Timeline
updatedTimeline
=
new
FakeTimeline
(
new
TimelineWindowDefinition
(
...
...
@@ -9244,7 +9260,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
+
50_000
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
4_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
4_000
).
build
())
.
build
()));
FakeMediaSource
fakeMediaSource
=
new
FakeMediaSource
(
initialTimeline
);
player
.
pause
();
player
.
setMediaSource
(
fakeMediaSource
);
...
...
@@ -9304,7 +9324,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
20
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
Player
.
Listener
mockListener
=
mock
(
Player
.
Listener
.
class
);
player
.
addListener
(
mockListener
);
player
.
pause
();
...
...
@@ -9353,7 +9377,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
player
.
pause
();
player
.
addMediaSource
(
new
FakeMediaSource
(
nonLiveTimeline
));
player
.
addMediaSource
(
new
FakeMediaSource
(
liveTimeline
));
...
...
@@ -9393,7 +9421,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
Timeline
liveTimeline2
=
new
FakeTimeline
(
new
TimelineWindowDefinition
(
...
...
@@ -9407,7 +9439,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
4_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
4_000
).
build
())
.
build
()));
player
.
pause
();
player
.
addMediaSource
(
new
FakeMediaSource
(
liveTimeline1
));
player
.
addMediaSource
(
new
FakeMediaSource
(
liveTimeline2
));
...
...
@@ -9451,7 +9487,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
9_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
9_000
).
build
())
.
build
()));
Timeline
liveTimeline2
=
new
FakeTimeline
(
new
TimelineWindowDefinition
(
...
...
@@ -9465,7 +9505,11 @@ public final class ExoPlayerTest {
/* defaultPositionUs= */
8
*
C
.
MICROS_PER_SECOND
,
/* windowOffsetInFirstPeriodUs= */
C
.
msToUs
(
windowStartUnixTimeMs
),
AdPlaybackState
.
NONE
,
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
4_000
).
build
()));
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
4_000
).
build
())
.
build
()));
player
.
pause
();
player
.
addMediaSource
(
new
FakeMediaSource
(
liveTimeline1
));
player
.
addMediaSource
(
new
FakeMediaSource
(
liveTimeline2
));
...
...
@@ -9492,7 +9536,11 @@ public final class ExoPlayerTest {
new
FakeClock
(
/* initialTimeMs= */
987_654_321L
,
/* isAutoAdvancing= */
true
);
ExoPlayer
player
=
new
TestExoPlayerBuilder
(
context
).
setClock
(
fakeClock
).
build
();
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
4_000
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
4_000
).
build
())
.
build
();
Timeline
liveTimeline
=
new
SinglePeriodTimeline
(
/* presentationStartTimeMs= */
C
.
TIME_UNSET
,
...
...
library/core/src/test/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactoryTest.java
View file @
a6315597
...
...
@@ -264,11 +264,14 @@ public final class DefaultMediaSourceFactoryTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
()
.
setUri
(
URI_MEDIA
+
"/file.mp4"
)
.
setLiveTargetOffsetMs
(
10
)
.
setLiveMinOffsetMs
(
1111
)
.
setLiveMinOffsetMs
(
3333
)
.
setLiveMinPlaybackSpeed
(
20.0f
)
.
setLiveMaxPlaybackSpeed
(
20.0f
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
()
.
setTargetOffsetMs
(
10
)
.
setMinOffsetMs
(
1111
)
.
setMinOffsetMs
(
3333
)
.
setMinPlaybackSpeed
(
20.0f
)
.
setMaxPlaybackSpeed
(
20.0f
)
.
build
())
.
build
();
MediaSource
mediaSource
=
defaultMediaSourceFactory
.
createMediaSource
(
mediaItem
);
...
...
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
View file @
a6315597
...
...
@@ -223,7 +223,8 @@ public final class DashMediaSource extends BaseMediaSource {
}
/**
* @deprecated Use {@link MediaItem.Builder#setLiveTargetOffsetMs(long)} to override the
* @deprecated Use {@link MediaItem.Builder#setLiveConfiguration(MediaItem.LiveConfiguration)}
* and {@link MediaItem.LiveConfiguration.Builder#setTargetOffsetMs(long)} to override the
* manifest, or {@link #setFallbackTargetLiveOffsetMs(long)} to provide a fallback value.
*/
@Deprecated
...
...
@@ -321,7 +322,12 @@ public final class DashMediaSource extends BaseMediaSource {
mediaItemBuilder
.
setTag
(
tag
);
}
if
(
mediaItem
.
liveConfiguration
.
targetOffsetMs
==
C
.
TIME_UNSET
)
{
mediaItemBuilder
.
setLiveTargetOffsetMs
(
targetLiveOffsetOverrideMs
);
mediaItemBuilder
.
setLiveConfiguration
(
mediaItem
.
liveConfiguration
.
buildUpon
()
.
setTargetOffsetMs
(
targetLiveOffsetOverrideMs
)
.
build
());
}
if
(
mediaItem
.
playbackProperties
==
null
||
mediaItem
.
playbackProperties
.
streamKeys
.
isEmpty
())
{
...
...
@@ -393,7 +399,12 @@ public final class DashMediaSource extends BaseMediaSource {
builder
.
setStreamKeys
(
streamKeys
);
}
if
(
needsTargetLiveOffset
)
{
builder
.
setLiveTargetOffsetMs
(
targetLiveOffsetOverrideMs
);
builder
.
setLiveConfiguration
(
mediaItem
.
liveConfiguration
.
buildUpon
()
.
setTargetOffsetMs
(
targetLiveOffsetOverrideMs
)
.
build
());
}
mediaItem
=
builder
.
build
();
}
...
...
library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaSourceTest.java
View file @
a6315597
...
...
@@ -187,7 +187,11 @@ public final class DashMediaSourceTest {
@Test
public
void
factorySetFallbackTargetLiveOffsetMs_withMediaLiveTargetOffsetMs_usesMediaOffset
()
{
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
2L
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
2L
).
build
())
.
build
();
DashMediaSource
.
Factory
factory
=
new
DashMediaSource
.
Factory
(
new
FileDataSource
.
Factory
())
.
setFallbackTargetLiveOffsetMs
(
1234L
);
...
...
@@ -200,7 +204,11 @@ public final class DashMediaSourceTest {
@Test
public
void
factorySetLivePresentationDelayMs_withMediaLiveTargetOffset_usesMediaOffset
()
{
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
Uri
.
EMPTY
).
setLiveTargetOffsetMs
(
2L
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
2L
).
build
())
.
build
();
DashMediaSource
.
Factory
factory
=
new
DashMediaSource
.
Factory
(
new
FileDataSource
.
Factory
())
.
setLivePresentationDelayMs
(
1234L
,
/* overridesManifest= */
true
);
...
...
@@ -290,11 +298,14 @@ public final class DashMediaSourceTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveTargetOffsetMs
(
876L
)
.
setLiveMinPlaybackSpeed
(
23
f
)
.
setLiveMaxPlaybackSpeed
(
42
f
)
.
setLiveMinOffsetMs
(
500L
)
.
setLiveMaxOffsetMs
(
20_000L
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
()
.
setTargetOffsetMs
(
876L
)
.
setMinPlaybackSpeed
(
23
f
)
.
setMaxPlaybackSpeed
(
42
f
)
.
setMinOffsetMs
(
500L
)
.
setMaxOffsetMs
(
20_000L
)
.
build
())
.
build
();
DashMediaSource
mediaSource
=
new
DashMediaSource
.
Factory
(
...
...
@@ -336,11 +347,14 @@ public final class DashMediaSourceTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveTargetOffsetMs
(
876L
)
.
setLiveMinPlaybackSpeed
(
23
f
)
.
setLiveMaxPlaybackSpeed
(
42
f
)
.
setLiveMinOffsetMs
(
200L
)
.
setLiveMaxOffsetMs
(
999L
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
()
.
setTargetOffsetMs
(
876L
)
.
setMinPlaybackSpeed
(
23
f
)
.
setMaxPlaybackSpeed
(
42
f
)
.
setMinOffsetMs
(
200L
)
.
setMaxOffsetMs
(
999L
)
.
build
())
.
build
();
DashMediaSource
mediaSource
=
new
DashMediaSource
.
Factory
(
...
...
@@ -385,11 +399,14 @@ public final class DashMediaSourceTest {
MediaItem
mediaItem
=
new
MediaItem
.
Builder
()
.
setUri
(
Uri
.
EMPTY
)
.
setLiveTargetOffsetMs
(
876L
)
.
setLiveMinPlaybackSpeed
(
23
f
)
.
setLiveMaxPlaybackSpeed
(
42
f
)
.
setLiveMinOffsetMs
(
100L
)
.
setLiveMaxOffsetMs
(
999L
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
()
.
setTargetOffsetMs
(
876L
)
.
setMinPlaybackSpeed
(
23
f
)
.
setMaxPlaybackSpeed
(
42
f
)
.
setMinOffsetMs
(
100L
)
.
setMaxOffsetMs
(
999L
)
.
build
())
.
build
();
DashMediaSource
mediaSource
=
new
DashMediaSource
.
Factory
(
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
View file @
a6315597
...
...
@@ -641,7 +641,7 @@ public final class HlsMediaSource extends BaseMediaSource
long
targetLiveOffsetMs
=
C
.
usToMs
(
targetLiveOffsetUs
);
if
(
targetLiveOffsetMs
!=
liveConfiguration
.
targetOffsetMs
)
{
liveConfiguration
=
mediaItem
.
buildUpon
().
setLiveTargetOffsetMs
(
targetLiveOffsetMs
).
build
().
liveConfiguration
;
liveConfiguration
.
buildUpon
().
setTargetOffsetMs
(
targetLiveOffsetMs
).
build
()
;
}
}
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsMediaSourceTest.java
View file @
a6315597
...
...
@@ -364,7 +364,11 @@ public class HlsMediaSourceTest {
SystemClock
.
setCurrentTimeMillis
(
Util
.
parseXsDateTime
(
"2020-01-01T00:00:17.0+00:00"
));
HlsMediaSource
.
Factory
factory
=
createHlsMediaSourceFactory
(
playlistUri
,
playlist
);
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
playlistUri
).
setLiveTargetOffsetMs
(
3000
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
playlistUri
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
3000
).
build
())
.
build
();
HlsMediaSource
mediaSource
=
factory
.
createMediaSource
(
mediaItem
);
Timeline
timeline
=
prepareAndWaitForTimeline
(
mediaSource
);
...
...
@@ -439,7 +443,11 @@ public class HlsMediaSourceTest {
SystemClock
.
setCurrentTimeMillis
(
Util
.
parseXsDateTime
(
"2020-01-01T00:00:17.0+00:00"
));
HlsMediaSource
.
Factory
factory
=
createHlsMediaSourceFactory
(
playlistUri
,
playlist
);
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
playlistUri
).
setLiveTargetOffsetMs
(
3000
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
playlistUri
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
3000
).
build
())
.
build
();
HlsMediaSource
mediaSource
=
factory
.
createMediaSource
(
mediaItem
);
Timeline
timeline
=
prepareAndWaitForTimeline
(
mediaSource
);
...
...
@@ -469,7 +477,11 @@ public class HlsMediaSourceTest {
SystemClock
.
setCurrentTimeMillis
(
Util
.
parseXsDateTime
(
"2020-01-01T00:00:05.0+00:00"
));
HlsMediaSource
.
Factory
factory
=
createHlsMediaSourceFactory
(
playlistUri
,
playlist
);
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
playlistUri
).
setLiveTargetOffsetMs
(
1000
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
playlistUri
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
1000
).
build
())
.
build
();
HlsMediaSource
mediaSource
=
factory
.
createMediaSource
(
mediaItem
);
Timeline
timeline
=
prepareAndWaitForTimeline
(
mediaSource
);
...
...
@@ -502,7 +514,11 @@ public class HlsMediaSourceTest {
SystemClock
.
setCurrentTimeMillis
(
Util
.
parseXsDateTime
(
"2020-01-01T00:00:09.0+00:00"
));
HlsMediaSource
.
Factory
factory
=
createHlsMediaSourceFactory
(
playlistUri
,
playlist
);
MediaItem
mediaItem
=
new
MediaItem
.
Builder
().
setUri
(
playlistUri
).
setLiveTargetOffsetMs
(
20_000
).
build
();
new
MediaItem
.
Builder
()
.
setUri
(
playlistUri
)
.
setLiveConfiguration
(
new
MediaItem
.
LiveConfiguration
.
Builder
().
setTargetOffsetMs
(
20_000
).
build
())
.
build
();
HlsMediaSource
mediaSource
=
factory
.
createMediaSource
(
mediaItem
);
Timeline
timeline
=
prepareAndWaitForTimeline
(
mediaSource
);
...
...
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