Propagate EXT-X-DATERANGE tags with media playlists

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=155062718
This commit is contained in:
aquilescanta 2017-05-04 03:24:19 -07:00 committed by Oliver Woodman
parent 7773831d88
commit b408750aa9
2 changed files with 12 additions and 4 deletions

View File

@ -91,12 +91,14 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
public final boolean hasProgramDateTime;
public final Segment initializationSegment;
public final List<Segment> segments;
public final List<String> dateRanges;
public final long durationUs;
public HlsMediaPlaylist(@PlaylistType int playlistType, String baseUri, long startOffsetUs,
long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence,
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);
this.playlistType = playlistType;
this.startTimeUs = startTimeUs;
@ -117,6 +119,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
}
this.startOffsetUs = startOffsetUs == C.TIME_UNSET ? C.TIME_UNSET
: startOffsetUs >= 0 ? startOffsetUs : durationUs + startOffsetUs;
this.dateRanges = Collections.unmodifiableList(dateRanges);
}
/**
@ -155,7 +158,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
public HlsMediaPlaylist copyWith(long startTimeUs, int discontinuitySequence) {
return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, startTimeUs, true,
discontinuitySequence, mediaSequence, version, targetDurationUs, hasEndTag,
hasProgramDateTime, initializationSegment, segments);
hasProgramDateTime, initializationSegment, segments, dateRanges);
}
/**
@ -170,7 +173,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
}
return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, startTimeUs,
hasDiscontinuitySequence, discontinuitySequence, mediaSequence, version, targetDurationUs,
true, hasProgramDateTime, initializationSegment, segments);
true, hasProgramDateTime, initializationSegment, segments, dateRanges);
}
}

View File

@ -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_KEY = "#EXT-X-KEY";
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_VIDEO = "VIDEO";
@ -263,6 +264,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
boolean hasEndTag = false;
Segment initializationSegment = null;
List<Segment> segments = new ArrayList<>();
List<String> dateRanges = new ArrayList<>();
long segmentDurationUs = 0;
boolean hasDiscontinuitySequence = false;
@ -343,6 +345,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
C.msToUs(Util.parseXsDateTime(line.substring(line.indexOf(':') + 1)));
playlistStartTimeUs = programDatetimeUs - segmentStartTimeUs;
}
} else if (line.startsWith(TAG_DATERANGE)) {
dateRanges.add(line);
} else if (!line.startsWith("#")) {
String segmentEncryptionIV;
if (!isEncrypted) {
@ -371,7 +375,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
}
return new HlsMediaPlaylist(playlistType, baseUri, startOffsetUs, playlistStartTimeUs,
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 {