Skip to content

Commit 92877a6

Browse files
marcbaechingerroblav96
authored andcommitted
Merge pull request google#8764 from uvjustin:dev-v2
PiperOrigin-RevId: 367994410
1 parent 1d37e30 commit 92877a6

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

RELEASENOTES.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
codec input size
4343
([#8705](https://github.com/google/ExoPlayer/issues/8705)).
4444
* HLS:
45+
* Fix bug of ignoring `EXT-X-START` when setting the live target offset
46+
([#8764](https://github.com/google/ExoPlayer/pull/8764)).
4547
* Fix incorrect application of byte ranges to `EXT-X-MAP` tags
4648
([#8783](https://github.com/google/ExoPlayer/issues/8783)).
4749
* Fix issue that could cause playback to become stuck if corresponding
@@ -105,8 +107,7 @@
105107
* Update instructions and publishing configuration for releasing to Google's
106108
Maven repository instead of bintray/JCenter.
107109
* FFmpeg extension: Fix playback failure when switching to TrueHD tracks
108-
during playback
109-
([#8616](https://github.com/google/ExoPlayer/issues/8616)).
110+
during playback ([#8616](https://github.com/google/ExoPlayer/issues/8616)).
110111

111112
### 2.13.2 (2021-02-25)
112113

library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,9 @@ private static long getTargetLiveOffsetUs(HlsMediaPlaylist playlist, long liveEd
616616
HlsMediaPlaylist.ServerControl serverControl = playlist.serverControl;
617617
// Select part hold back only if the playlist has a part target duration.
618618
long offsetToEndOfPlaylistUs;
619-
if (serverControl.partHoldBackUs != C.TIME_UNSET
619+
if (playlist.startOffsetUs != C.TIME_UNSET) {
620+
offsetToEndOfPlaylistUs = playlist.durationUs - playlist.startOffsetUs;
621+
} else if (serverControl.partHoldBackUs != C.TIME_UNSET
620622
&& playlist.partTargetDurationUs != C.TIME_UNSET) {
621623
offsetToEndOfPlaylistUs = serverControl.partHoldBackUs;
622624
} else if (serverControl.holdBackUs != C.TIME_UNSET) {

library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsMediaSourceTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,44 @@ public void loadPlaylist_holdBackInPlaylist_targetLiveOffsetFromHoldBack()
292292
assertThat(window.defaultPositionUs).isEqualTo(0);
293293
}
294294

295+
@Test
296+
public void loadPlaylist_withPlaylistStartTime_targetLiveOffsetFromStartTime()
297+
throws TimeoutException, ParserException {
298+
String playlistUri = "fake://foo.bar/media0/playlist.m3u8";
299+
// The playlist has a duration of 16 seconds, and part hold back, hold back and start time
300+
// defined.
301+
String playlist =
302+
"#EXTM3U\n"
303+
+ "#EXT-X-PROGRAM-DATE-TIME:2020-01-01T00:00:00.0+00:00\n"
304+
+ "#EXT-X-TARGETDURATION:4\n"
305+
+ "#EXT-X-VERSION:3\n"
306+
+ "#EXT-X-START:TIME-OFFSET=-15"
307+
+ "#EXT-X-MEDIA-SEQUENCE:0\n"
308+
+ "#EXTINF:4.00000,\n"
309+
+ "fileSequence0.ts\n"
310+
+ "#EXTINF:4.00000,\n"
311+
+ "fileSequence1.ts\n"
312+
+ "#EXTINF:4.00000,\n"
313+
+ "fileSequence2.ts\n"
314+
+ "#EXTINF:4.00000,\n"
315+
+ "fileSequence3.ts\n"
316+
+ "#EXT-X-PART-INF:PART-TARGET=0.5\n"
317+
+ "#EXT-X-SERVER-CONTROL:HOLD-BACK=12,PART-HOLD-BACK=3";
318+
// The playlist finishes 1 second before the current time.
319+
SystemClock.setCurrentTimeMillis(Util.parseXsDateTime("2020-01-01T00:00:17.0+00:00"));
320+
HlsMediaSource.Factory factory = createHlsMediaSourceFactory(playlistUri, playlist);
321+
MediaItem mediaItem = MediaItem.fromUri(playlistUri);
322+
HlsMediaSource mediaSource = factory.createMediaSource(mediaItem);
323+
324+
Timeline timeline = prepareAndWaitForTimeline(mediaSource);
325+
326+
Timeline.Window window = timeline.getWindow(0, new Timeline.Window());
327+
// The target live offset is picked from start time and then expressed in relation to the live
328+
// edge (+1 seconds).
329+
assertThat(window.liveConfiguration.targetOffsetMs).isEqualTo(16000);
330+
assertThat(window.defaultPositionUs).isEqualTo(0);
331+
}
332+
295333
@Test
296334
public void loadPlaylist_targetLiveOffsetInMediaItem_targetLiveOffsetPickedFromMediaItem()
297335
throws TimeoutException, ParserException {

0 commit comments

Comments
 (0)