Package com.google.android.exoplayer2.source.hls.playlist

## Class HlsMediaPlaylist

- java.lang.Object
- - com.google.android.exoplayer2.source.hls.playlist.HlsPlaylist
  - - com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist

- All Implemented Interfaces:
    `FilterableManifest<HlsPlaylist>`

      public final class HlsMediaPlaylist
      extends HlsPlaylist

  Represents an HLS media playlist.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `HlsMediaPlaylist.Part` | A media part.
    `static interface` | `HlsMediaPlaylist.PlaylistType` | Type of the playlist, as defined by #EXT-X-PLAYLIST-TYPE.
    `static class` | `HlsMediaPlaylist.RenditionReport` | A rendition report for an alternative rendition defined in another media playlist.
    `static class` | `HlsMediaPlaylist.Segment` | Media segment reference.
    `static class` | `HlsMediaPlaylist.SegmentBase` | The base for a `HlsMediaPlaylist.Segment` or a `HlsMediaPlaylist.Part` required for playback.
    `static class` | `HlsMediaPlaylist.ServerControl` | Server control attributes.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `int` | `discontinuitySequence` | The discontinuity sequence number of the first media segment in the playlist, as defined by #EXT-X-DISCONTINUITY-SEQUENCE.
    `long` | `durationUs` | The total duration of the playlist in microseconds.
    `boolean` | `hasDiscontinuitySequence` | Whether the playlist contains the #EXT-X-DISCONTINUITY-SEQUENCE tag.
    `boolean` | `hasEndTag` | Whether the playlist contains the #EXT-X-ENDLIST tag.
    `boolean` | `hasPositiveStartOffset` | Whether the `startOffsetUs` was explicitly defined by #EXT-X-START as a positive value or zero.
    `boolean` | `hasProgramDateTime` | Whether the playlist contains a #EXT-X-PROGRAM-DATE-TIME tag.
    `long` | `mediaSequence` | The media sequence number of the first media segment in the playlist, as defined by #EXT-X-MEDIA-SEQUENCE.
    `long` | `partTargetDurationUs` | The target duration for segment parts, as defined by #EXT-X-PART-INF, or `C.TIME_UNSET` if undefined.
    `static int` | `PLAYLIST_TYPE_EVENT` |
    `static int` | `PLAYLIST_TYPE_UNKNOWN` |
    `static int` | `PLAYLIST_TYPE_VOD` |
    `int` | `playlistType` | The type of the playlist.
    `boolean` | `preciseStart` | Whether the start position should be precise, as defined by #EXT-X-START.
    `DrmInitData` | `protectionSchemes` | Contains the CDM protection schemes used by segments in this playlist.
    `Map<Uri,​HlsMediaPlaylist.RenditionReport>` | `renditionReports` | The rendition reports of alternative rendition playlists.
    `List<HlsMediaPlaylist.Segment>` | `segments` | The list of segments in the playlist.
    `HlsMediaPlaylist.ServerControl` | `serverControl` | The attributes of the #EXT-X-SERVER-CONTROL header.
    `long` | `startOffsetUs` | The start offset in microseconds from the beginning of the playlist, as defined by #EXT-X-START, or `C.TIME_UNSET` if undefined.
    `long` | `startTimeUs` | If `hasProgramDateTime` is true, contains the datetime as microseconds since epoch.
    `long` | `targetDurationUs` | The target duration in microseconds, as defined by #EXT-X-TARGETDURATION.
    `List<HlsMediaPlaylist.Part>` | `trailingParts` | The list of parts at the end of the playlist for which the segment is not in the playlist yet.
    `int` | `version` | The compatibility version, as defined by #EXT-X-VERSION.

    - ### Fields inherited from class com.google.android.exoplayer2.source.hls.playlist.HlsPlaylist

      `baseUri, hasIndependentSegments, tags`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `HlsMediaPlaylist​(int playlistType, String baseUri, List<String> tags, long startOffsetUs, boolean preciseStart, long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence, long mediaSequence, int version, long targetDurationUs, long partTargetDurationUs, boolean hasIndependentSegments, boolean hasEndTag, boolean hasProgramDateTime, DrmInitData protectionSchemes, List<HlsMediaPlaylist.Segment> segments, List<HlsMediaPlaylist.Part> trailingParts, HlsMediaPlaylist.ServerControl serverControl, Map<Uri,​HlsMediaPlaylist.RenditionReport> renditionReports)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `HlsMediaPlaylist` | `copy​(List<StreamKey> streamKeys)` | Returns a copy of the manifest including only the streams specified by the given keys.
    `HlsMediaPlaylist` | `copyWith​(long startTimeUs, int discontinuitySequence)` | Returns a playlist identical to this one except for the start time, the discontinuity sequence and `hasDiscontinuitySequence` values.
    `HlsMediaPlaylist` | `copyWithEndTag()` | Returns a playlist identical to this one except that an end tag is added.
    `long` | `getEndTimeUs()` | Returns the result of adding the duration of the playlist to its start time.
    `boolean` | `isNewerThan​(HlsMediaPlaylist other)` | Returns whether this playlist is newer than `other`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### PLAYLIST_TYPE_UNKNOWN

          public static final int PLAYLIST_TYPE_UNKNOWN

      See Also:
        Constant Field Values

    - #### PLAYLIST_TYPE_VOD

          public static final int PLAYLIST_TYPE_VOD

      See Also:
        Constant Field Values

    - #### PLAYLIST_TYPE_EVENT

          public static final int PLAYLIST_TYPE_EVENT

      See Also:
        Constant Field Values

    - #### playlistType

          @PlaylistType
          public final int playlistType

      The type of the playlist. See `HlsMediaPlaylist.PlaylistType`.

    - #### startOffsetUs

          public final long startOffsetUs

      The start offset in microseconds from the beginning of the playlist, as defined by #EXT-X-START, or `C.TIME_UNSET` if undefined. The value is guaranteed to be between 0 and `durationUs`, inclusive.

    - #### hasPositiveStartOffset

          public final boolean hasPositiveStartOffset

      Whether the `startOffsetUs` was explicitly defined by #EXT-X-START as a positive value or zero.

    - #### preciseStart

          public final boolean preciseStart

      Whether the start position should be precise, as defined by #EXT-X-START.

    - #### startTimeUs

          public final long startTimeUs

      If `hasProgramDateTime` is true, contains the datetime as microseconds since epoch. Otherwise, contains the aggregated duration of removed segments up to this snapshot of the playlist.

    - #### hasDiscontinuitySequence

          public final boolean hasDiscontinuitySequence

      Whether the playlist contains the #EXT-X-DISCONTINUITY-SEQUENCE tag.

    - #### discontinuitySequence

          public final int discontinuitySequence

      The discontinuity sequence number of the first media segment in the playlist, as defined by #EXT-X-DISCONTINUITY-SEQUENCE.

    - #### mediaSequence

          public final long mediaSequence

      The media sequence number of the first media segment in the playlist, as defined by #EXT-X-MEDIA-SEQUENCE.

    - #### version

          public final int version

      The compatibility version, as defined by #EXT-X-VERSION.

    - #### targetDurationUs

          public final long targetDurationUs

      The target duration in microseconds, as defined by #EXT-X-TARGETDURATION.

    - #### partTargetDurationUs

          public final long partTargetDurationUs

      The target duration for segment parts, as defined by #EXT-X-PART-INF, or `C.TIME_UNSET` if undefined.

    - #### hasEndTag

          public final boolean hasEndTag

      Whether the playlist contains the #EXT-X-ENDLIST tag.

    - #### hasProgramDateTime

          public final boolean hasProgramDateTime

      Whether the playlist contains a #EXT-X-PROGRAM-DATE-TIME tag.

    - #### protectionSchemes

          @Nullable
          public final DrmInitData protectionSchemes

      Contains the CDM protection schemes used by segments in this playlist. Does not contain any key acquisition data. Null if none of the segments in the playlist is CDM-encrypted.

    - #### segments

          public final List<HlsMediaPlaylist.Segment> segments

      The list of segments in the playlist.

    - #### trailingParts

          public final List<HlsMediaPlaylist.Part> trailingParts

      The list of parts at the end of the playlist for which the segment is not in the playlist yet.

    - #### renditionReports

          public final Map<Uri,​HlsMediaPlaylist.RenditionReport> renditionReports

      The rendition reports of alternative rendition playlists.

    - #### durationUs

          public final long durationUs

      The total duration of the playlist in microseconds.

    - #### serverControl

          public final HlsMediaPlaylist.ServerControl serverControl

      The attributes of the #EXT-X-SERVER-CONTROL header.

  - ### Constructor Detail

    - #### HlsMediaPlaylist

          public HlsMediaPlaylist​(@PlaylistType
                                  int playlistType,
                                  String baseUri,
                                  List<String> tags,
                                  long startOffsetUs,
                                  boolean preciseStart,
                                  long startTimeUs,
                                  boolean hasDiscontinuitySequence,
                                  int discontinuitySequence,
                                  long mediaSequence,
                                  int version,
                                  long targetDurationUs,
                                  long partTargetDurationUs,
                                  boolean hasIndependentSegments,
                                  boolean hasEndTag,
                                  boolean hasProgramDateTime,
                                  @Nullable
                                  DrmInitData protectionSchemes,
                                  List<HlsMediaPlaylist.Segment> segments,
                                  List<HlsMediaPlaylist.Part> trailingParts,
                                  HlsMediaPlaylist.ServerControl serverControl,
                                  Map<Uri,​HlsMediaPlaylist.RenditionReport> renditionReports)

      Parameters:
        `playlistType` - See `playlistType`.
        `baseUri` - See `HlsPlaylist.baseUri`.
        `tags` - See `HlsPlaylist.tags`.
        `startOffsetUs` - See `startOffsetUs`.
        `startTimeUs` - See `startTimeUs`.
        `hasDiscontinuitySequence` - See `hasDiscontinuitySequence`.
        `discontinuitySequence` - See `discontinuitySequence`.
        `mediaSequence` - See `mediaSequence`.
        `version` - See `version`.
        `targetDurationUs` - See `targetDurationUs`.
        `hasIndependentSegments` - See `HlsPlaylist.hasIndependentSegments`.
        `hasEndTag` - See `hasEndTag`.
        `hasProgramDateTime` - See `hasProgramDateTime`.
        `protectionSchemes` - See `protectionSchemes`.
        `segments` - See `segments`.
        `trailingParts` - See `trailingParts`.
        `serverControl` - See `serverControl`
        `renditionReports` - See `renditionReports`.

  - ### Method Detail

    - #### copy

          public HlsMediaPlaylist copy​(List<StreamKey> streamKeys)

      Description copied from interface: `FilterableManifest`
      Returns a copy of the manifest including only the streams specified by the given keys. If the manifest is unchanged then the instance may return itself.
      Parameters:
        `streamKeys` - A non-empty list of stream keys.
      Returns:
        The filtered manifest.

    - #### isNewerThan

          public boolean isNewerThan​(@Nullable
                                     HlsMediaPlaylist other)

      Returns whether this playlist is newer than `other`.
      Parameters:
        `other` - The playlist to compare.
      Returns:
        Whether this playlist is newer than `other`.

    - #### getEndTimeUs

          public long getEndTimeUs()

      Returns the result of adding the duration of the playlist to its start time.

    - #### copyWith

          public HlsMediaPlaylist copyWith​(long startTimeUs,
                                           int discontinuitySequence)

      Returns a playlist identical to this one except for the start time, the discontinuity sequence and `hasDiscontinuitySequence` values. The first two are set to the specified values, `hasDiscontinuitySequence` is set to true.
      Parameters:
        `startTimeUs` - The start time for the returned playlist.
        `discontinuitySequence` - The discontinuity sequence for the returned playlist.
      Returns:
        An identical playlist including the provided discontinuity and timing information.

    - #### copyWithEndTag

          public HlsMediaPlaylist copyWithEndTag()

      Returns a playlist identical to this one except that an end tag is added. If an end tag is already present then the playlist will return itself.