Commit b408750a by aquilescanta Committed by Oliver Woodman

Propagate EXT-X-DATERANGE tags with media playlists

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155062718
parent 7773831d
...@@ -91,12 +91,14 @@ public final class HlsMediaPlaylist extends HlsPlaylist { ...@@ -91,12 +91,14 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
public final boolean hasProgramDateTime; public final boolean hasProgramDateTime;
public final Segment initializationSegment; public final Segment initializationSegment;
public final List<Segment> segments; public final List<Segment> segments;
public final List<String> dateRanges;
public final long durationUs; public final long durationUs;
public HlsMediaPlaylist(@PlaylistType int playlistType, String baseUri, long startOffsetUs, public HlsMediaPlaylist(@PlaylistType int playlistType, String baseUri, long startOffsetUs,
long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence, long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence,
int mediaSequence, int version, long targetDurationUs, boolean hasEndTag, int mediaSequence, int version, long targetDurationUs, boolean hasEndTag,
boolean hasProgramDateTime, Segment initializationSegment, List<Segment> segments) { boolean hasProgramDateTime, Segment initializationSegment, List<Segment> segments,
List<String> dateRanges) {
super(baseUri); super(baseUri);
this.playlistType = playlistType; this.playlistType = playlistType;
this.startTimeUs = startTimeUs; this.startTimeUs = startTimeUs;
...@@ -117,6 +119,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist { ...@@ -117,6 +119,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
} }
this.startOffsetUs = startOffsetUs == C.TIME_UNSET ? C.TIME_UNSET this.startOffsetUs = startOffsetUs == C.TIME_UNSET ? C.TIME_UNSET
: startOffsetUs >= 0 ? startOffsetUs : durationUs + startOffsetUs; : startOffsetUs >= 0 ? startOffsetUs : durationUs + startOffsetUs;
this.dateRanges = Collections.unmodifiableList(dateRanges);
} }
/** /**
...@@ -155,7 +158,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist { ...@@ -155,7 +158,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
public HlsMediaPlaylist copyWith(long startTimeUs, int discontinuitySequence) { public HlsMediaPlaylist copyWith(long startTimeUs, int discontinuitySequence) {
return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, startTimeUs, true, return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, startTimeUs, true,
discontinuitySequence, mediaSequence, version, targetDurationUs, hasEndTag, discontinuitySequence, mediaSequence, version, targetDurationUs, hasEndTag,
hasProgramDateTime, initializationSegment, segments); hasProgramDateTime, initializationSegment, segments, dateRanges);
} }
/** /**
...@@ -170,7 +173,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist { ...@@ -170,7 +173,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
} }
return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, startTimeUs, return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, startTimeUs,
hasDiscontinuitySequence, discontinuitySequence, mediaSequence, version, targetDurationUs, hasDiscontinuitySequence, discontinuitySequence, mediaSequence, version, targetDurationUs,
true, hasProgramDateTime, initializationSegment, segments); true, hasProgramDateTime, initializationSegment, segments, dateRanges);
} }
} }
...@@ -57,6 +57,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -57,6 +57,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
private static final String TAG_ENDLIST = "#EXT-X-ENDLIST"; private static final String TAG_ENDLIST = "#EXT-X-ENDLIST";
private static final String TAG_KEY = "#EXT-X-KEY"; private static final String TAG_KEY = "#EXT-X-KEY";
private static final String TAG_BYTERANGE = "#EXT-X-BYTERANGE"; private static final String TAG_BYTERANGE = "#EXT-X-BYTERANGE";
private static final String TAG_DATERANGE = "#EXT-X-DATERANGE";
private static final String TYPE_AUDIO = "AUDIO"; private static final String TYPE_AUDIO = "AUDIO";
private static final String TYPE_VIDEO = "VIDEO"; private static final String TYPE_VIDEO = "VIDEO";
...@@ -263,6 +264,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -263,6 +264,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
boolean hasEndTag = false; boolean hasEndTag = false;
Segment initializationSegment = null; Segment initializationSegment = null;
List<Segment> segments = new ArrayList<>(); List<Segment> segments = new ArrayList<>();
List<String> dateRanges = new ArrayList<>();
long segmentDurationUs = 0; long segmentDurationUs = 0;
boolean hasDiscontinuitySequence = false; boolean hasDiscontinuitySequence = false;
...@@ -343,6 +345,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -343,6 +345,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
C.msToUs(Util.parseXsDateTime(line.substring(line.indexOf(':') + 1))); C.msToUs(Util.parseXsDateTime(line.substring(line.indexOf(':') + 1)));
playlistStartTimeUs = programDatetimeUs - segmentStartTimeUs; playlistStartTimeUs = programDatetimeUs - segmentStartTimeUs;
} }
} else if (line.startsWith(TAG_DATERANGE)) {
dateRanges.add(line);
} else if (!line.startsWith("#")) { } else if (!line.startsWith("#")) {
String segmentEncryptionIV; String segmentEncryptionIV;
if (!isEncrypted) { if (!isEncrypted) {
...@@ -371,7 +375,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -371,7 +375,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
} }
return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, playlistStartTimeUs, return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, playlistStartTimeUs,
hasDiscontinuitySequence, playlistDiscontinuitySequence, mediaSequence, version, hasDiscontinuitySequence, playlistDiscontinuitySequence, mediaSequence, version,
targetDurationUs, hasEndTag, playlistStartTimeUs != 0, initializationSegment, segments); targetDurationUs, hasEndTag, playlistStartTimeUs != 0, initializationSegment, segments,
dateRanges);
} }
private static String parseStringAttr(String line, Pattern pattern) throws ParserException { private static String parseStringAttr(String line, Pattern pattern) throws ParserException {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment