Skip to content

Commit

Permalink
Use the new MediaItem.Builder#setLiveConfiguration method
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 398215071
  • Loading branch information
icbaker authored and marcbaechinger committed Sep 23, 2021
1 parent fefa6cb commit a631559
Show file tree
Hide file tree
Showing 7 changed files with 141 additions and 43 deletions.
5 changes: 4 additions & 1 deletion docs/live-streaming.md
Original file line number Diff line number Diff line change
Expand Up @@ -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);
~~~
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9101,7 +9101,11 @@ public void targetLiveOffsetInMedia_adjustsLiveOffsetToTargetOffset() throws Exc
/* 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();
Expand Down Expand Up @@ -9146,7 +9150,11 @@ public void targetLiveOffsetInMedia_withInitialSeek_adjustsLiveOffsetToInitialSe
/* 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);
Expand Down Expand Up @@ -9187,7 +9195,11 @@ public void targetLiveOffsetInMedia_withUserSeek_adjustsLiveOffsetToSeek() throw
/* 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();
Expand Down Expand Up @@ -9230,7 +9242,11 @@ public void targetLiveOffsetInMedia_withTimelineUpdate_adjustsLiveOffsetToLatest
/* 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(
Expand All @@ -9244,7 +9260,11 @@ public void targetLiveOffsetInMedia_withTimelineUpdate_adjustsLiveOffsetToLatest
/* 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);
Expand Down Expand Up @@ -9304,7 +9324,11 @@ public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParame
/* 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();
Expand Down Expand Up @@ -9353,7 +9377,11 @@ public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParame
/* 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));
Expand Down Expand Up @@ -9393,7 +9421,11 @@ public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParame
/* 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(
Expand All @@ -9407,7 +9439,11 @@ public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParame
/* 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));
Expand Down Expand Up @@ -9451,7 +9487,11 @@ public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParame
/* 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(
Expand All @@ -9465,7 +9505,11 @@ public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParame
/* 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));
Expand All @@ -9492,7 +9536,11 @@ public void targetLiveOffsetInMedia_unknownWindowStartTime_doesNotAdjustLiveOffs
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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,11 +264,14 @@ public void createMediaSource_withMediaItemLiveProperties_overridesFactoryLivePr
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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,8 @@ public Factory setLoadErrorHandlingPolicy(
}

/**
* @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
Expand Down Expand Up @@ -321,7 +322,12 @@ public DashMediaSource createMediaSource(DashManifest manifest, MediaItem mediaI
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()) {
Expand Down Expand Up @@ -393,7 +399,12 @@ public DashMediaSource createMediaSource(MediaItem mediaItem) {
builder.setStreamKeys(streamKeys);
}
if (needsTargetLiveOffset) {
builder.setLiveTargetOffsetMs(targetLiveOffsetOverrideMs);
builder.setLiveConfiguration(
mediaItem
.liveConfiguration
.buildUpon()
.setTargetOffsetMs(targetLiveOffsetOverrideMs)
.build());
}
mediaItem = builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,11 @@ public void replaceManifestUri_doesNotChangeMediaItem() {
@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);
Expand All @@ -200,7 +204,11 @@ public void factorySetFallbackTargetLiveOffsetMs_withMediaLiveTargetOffsetMs_use
@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);
Expand Down Expand Up @@ -290,11 +298,14 @@ public void prepare_withoutLiveConfiguration_withMediaItemLiveProperties_usesMed
MediaItem mediaItem =
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setLiveTargetOffsetMs(876L)
.setLiveMinPlaybackSpeed(23f)
.setLiveMaxPlaybackSpeed(42f)
.setLiveMinOffsetMs(500L)
.setLiveMaxOffsetMs(20_000L)
.setLiveConfiguration(
new MediaItem.LiveConfiguration.Builder()
.setTargetOffsetMs(876L)
.setMinPlaybackSpeed(23f)
.setMaxPlaybackSpeed(42f)
.setMinOffsetMs(500L)
.setMaxOffsetMs(20_000L)
.build())
.build();
DashMediaSource mediaSource =
new DashMediaSource.Factory(
Expand Down Expand Up @@ -336,11 +347,14 @@ public void prepare_withSuggestedPresentationDelayAndMinBufferTime_usesManifestV
MediaItem mediaItem =
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setLiveTargetOffsetMs(876L)
.setLiveMinPlaybackSpeed(23f)
.setLiveMaxPlaybackSpeed(42f)
.setLiveMinOffsetMs(200L)
.setLiveMaxOffsetMs(999L)
.setLiveConfiguration(
new MediaItem.LiveConfiguration.Builder()
.setTargetOffsetMs(876L)
.setMinPlaybackSpeed(23f)
.setMaxPlaybackSpeed(42f)
.setMinOffsetMs(200L)
.setMaxOffsetMs(999L)
.build())
.build();
DashMediaSource mediaSource =
new DashMediaSource.Factory(
Expand Down Expand Up @@ -385,11 +399,14 @@ public void prepare_withCompleteServiceDescription_withMediaItemLiveProperties_u
MediaItem mediaItem =
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setLiveTargetOffsetMs(876L)
.setLiveMinPlaybackSpeed(23f)
.setLiveMaxPlaybackSpeed(42f)
.setLiveMinOffsetMs(100L)
.setLiveMaxOffsetMs(999L)
.setLiveConfiguration(
new MediaItem.LiveConfiguration.Builder()
.setTargetOffsetMs(876L)
.setMinPlaybackSpeed(23f)
.setMaxPlaybackSpeed(42f)
.setMinOffsetMs(100L)
.setMaxOffsetMs(999L)
.build())
.build();
DashMediaSource mediaSource =
new DashMediaSource.Factory(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,7 @@ private void maybeUpdateLiveConfiguration(long targetLiveOffsetUs) {
long targetLiveOffsetMs = C.usToMs(targetLiveOffsetUs);
if (targetLiveOffsetMs != liveConfiguration.targetOffsetMs) {
liveConfiguration =
mediaItem.buildUpon().setLiveTargetOffsetMs(targetLiveOffsetMs).build().liveConfiguration;
liveConfiguration.buildUpon().setTargetOffsetMs(targetLiveOffsetMs).build();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,11 @@ public void loadLivePlaylist_withNonPreciseStartTime_targetLiveOffsetFromStartTi
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);
Expand Down Expand Up @@ -439,7 +443,11 @@ public void loadLivePlaylist_withPreciseStartTimeAndUserDefinedLiveOffset_starts
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);
Expand Down Expand Up @@ -469,7 +477,11 @@ public void loadLivePlaylist_targetLiveOffsetInMediaItem_targetLiveOffsetPickedF
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);
Expand Down Expand Up @@ -502,7 +514,11 @@ public void loadLivePlaylist_targetLiveOffsetInMediaItem_targetLiveOffsetPickedF
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);
Expand Down

0 comments on commit a631559

Please sign in to comment.