diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java index 93e58c6371..2c34a5a353 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java @@ -42,9 +42,11 @@ public final class HlsMediaPlaylist extends HlsPlaylist { * the media playlist does not define a media section for this segment. The same instance is * used for all segments that share an EXT-X-MAP tag. */ - @Nullable public final Segment initializationSegment; + public final @Nullable Segment initializationSegment; /** The duration of the segment in microseconds, as defined by #EXTINF. */ public final long durationUs; + /** The human readable title of the segment. */ + public final String title; /** * The number of #EXT-X-DISCONTINUITY tags in the playlist before the segment. */ @@ -57,12 +59,12 @@ public final class HlsMediaPlaylist extends HlsPlaylist { * The encryption identity key uri as defined by #EXT-X-KEY, or null if the segment does not use * full segment encryption with identity key. */ - public final String fullSegmentEncryptionKeyUri; + public final @Nullable String fullSegmentEncryptionKeyUri; /** * The encryption initialization vector as defined by #EXT-X-KEY, or null if the segment is not * encrypted. */ - public final String encryptionIV; + public final @Nullable String encryptionIV; /** * The segment's byte range offset, as defined by #EXT-X-BYTERANGE. */ @@ -82,12 +84,24 @@ public final class HlsMediaPlaylist extends HlsPlaylist { * @param byterangeLength See {@link #byterangeLength}. */ public Segment(String uri, long byterangeOffset, long byterangeLength) { - this(uri, null, 0, -1, C.TIME_UNSET, null, null, byterangeOffset, byterangeLength, false); + this( + uri, + /* initializationSegment= */ null, + /* title= */ "", + /* durationUs= */ 0, + /* relativeDiscontinuitySequence= */ -1, + /* relativeStartTimeUs= */ C.TIME_UNSET, + /* fullSegmentEncryptionKeyUri= */ null, + /* encryptionIV= */ null, + byterangeOffset, + byterangeLength, + /* hasGapTag= */ false); } /** * @param url See {@link #url}. * @param initializationSegment See {@link #initializationSegment}. + * @param title See {@link #title}. * @param durationUs See {@link #durationUs}. * @param relativeDiscontinuitySequence See {@link #relativeDiscontinuitySequence}. * @param relativeStartTimeUs See {@link #relativeStartTimeUs}. @@ -99,17 +113,19 @@ public final class HlsMediaPlaylist extends HlsPlaylist { */ public Segment( String url, - Segment initializationSegment, + @Nullable Segment initializationSegment, + String title, long durationUs, int relativeDiscontinuitySequence, long relativeStartTimeUs, - String fullSegmentEncryptionKeyUri, - String encryptionIV, + @Nullable String fullSegmentEncryptionKeyUri, + @Nullable String encryptionIV, long byterangeOffset, long byterangeLength, boolean hasGapTag) { this.url = url; this.initializationSegment = initializationSegment; + this.title = title; this.durationUs = durationUs; this.relativeDiscontinuitySequence = relativeDiscontinuitySequence; this.relativeStartTimeUs = relativeStartTimeUs; diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java index 2a67108bf9..e24b91cfc1 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java @@ -16,6 +16,7 @@ package com.google.android.exoplayer2.source.hls.playlist; import android.net.Uri; +import android.support.annotation.Nullable; import android.util.Base64; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; @@ -41,6 +42,7 @@ import java.util.List; import java.util.Queue; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.checkerframework.checker.nullness.qual.PolyNull; /** * HLS playlists parsing logic. @@ -106,6 +108,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser tags = new ArrayList<>(); long segmentDurationUs = 0; + String segmentTitle = ""; boolean hasDiscontinuitySequence = false; int playlistDiscontinuitySequence = 0; int relativeDiscontinuitySequence = 0; @@ -416,6 +429,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser