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

## Class HlsDownloader

- java.lang.Object
- - com.google.android.exoplayer2.offline.SegmentDownloader<HlsPlaylist>
  - - com.google.android.exoplayer2.source.hls.offline.HlsDownloader

- All Implemented Interfaces:
    `Downloader`

      public final class HlsDownloader
      extends SegmentDownloader<HlsPlaylist>

  A downloader for HLS streams.

  Example usage:

       SimpleCache cache = new SimpleCache(downloadFolder, new NoOpCacheEvictor(), databaseProvider);
       CacheDataSource.Factory cacheDataSourceFactory =
           new CacheDataSource.Factory()
               .setCache(cache)
               .setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory());
       // Create a downloader for the first variant in a multivariant playlist.
       HlsDownloader hlsDownloader =
           new HlsDownloader(
               new MediaItem.Builder()
                   .setUri(playlistUri)
                   .setStreamKeys(
                       Collections.singletonList(
                           new StreamKey(HlsMultivariantPlaylist.GROUP_INDEX_VARIANT, 0)))
                   .build(),
               Collections.singletonList();
       // Perform the download.
       hlsDownloader.download(progressListener);
       // Use the downloaded data for playback.
       HlsMediaSource mediaSource =
           new HlsMediaSource.Factory(cacheDataSourceFactory).createMediaSource(mediaItem);

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class com.google.android.exoplayer2.offline.SegmentDownloader

      `SegmentDownloader.Segment`

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.offline.Downloader

      `Downloader.ProgressListener`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `HlsDownloader​(MediaItem mediaItem, CacheDataSource.Factory cacheDataSourceFactory)` | Creates a new instance.
    `HlsDownloader​(MediaItem mediaItem, CacheDataSource.Factory cacheDataSourceFactory, Executor executor)` | Creates a new instance.
    `HlsDownloader​(MediaItem mediaItem, ParsingLoadable.Parser<HlsPlaylist> manifestParser, CacheDataSource.Factory cacheDataSourceFactory, Executor executor)` | Creates a new instance.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected List<SegmentDownloader.Segment>` | `getSegments​(DataSource dataSource, HlsPlaylist manifest, boolean removing)` | Returns a list of all downloadable `SegmentDownloader.Segment`s for a given manifest.

    - ### Methods inherited from class com.google.android.exoplayer2.offline.SegmentDownloader

      `cancel, download, execute, getCompressibleDataSpec, getManifest, remove`

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

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

- - ### Constructor Detail

    - #### HlsDownloader

          public HlsDownloader​(MediaItem mediaItem,
                               CacheDataSource.Factory cacheDataSourceFactory)

      Creates a new instance.
      Parameters:
        `mediaItem` - The `MediaItem` to be downloaded.
        `cacheDataSourceFactory` - A `CacheDataSource.Factory` for the cache into which the download will be written.

    - #### HlsDownloader

          public HlsDownloader​(MediaItem mediaItem,
                               CacheDataSource.Factory cacheDataSourceFactory,
                               Executor executor)

      Creates a new instance.
      Parameters:
        `mediaItem` - The `MediaItem` to be downloaded.
        `cacheDataSourceFactory` - A `CacheDataSource.Factory` for the cache into which the download will be written.
        `executor` - An `Executor` used to make requests for the media being downloaded. Providing an `Executor` that uses multiple threads will speed up the download by allowing parts of it to be executed in parallel.

    - #### HlsDownloader

          public HlsDownloader​(MediaItem mediaItem,
                               ParsingLoadable.Parser<HlsPlaylist> manifestParser,
                               CacheDataSource.Factory cacheDataSourceFactory,
                               Executor executor)

      Creates a new instance.
      Parameters:
        `mediaItem` - The `MediaItem` to be downloaded.
        `manifestParser` - A parser for HLS playlists.
        `cacheDataSourceFactory` - A `CacheDataSource.Factory` for the cache into which the download will be written.
        `executor` - An `Executor` used to make requests for the media being downloaded. Providing an `Executor` that uses multiple threads will speed up the download by allowing parts of it to be executed in parallel.

  - ### Method Detail

    - #### getSegments

          protected List<SegmentDownloader.Segment> getSegments​(DataSource dataSource,
                                                                HlsPlaylist manifest,
                                                                boolean removing)
                                                         throws IOException,
                                                                InterruptedException

      Description copied from class: `SegmentDownloader`
      Returns a list of all downloadable `SegmentDownloader.Segment`s for a given manifest. Any required data should be loaded using `SegmentDownloader.getManifest(com.google.android.exoplayer2.upstream.DataSource, com.google.android.exoplayer2.upstream.DataSpec, boolean)` or `SegmentDownloader.execute(com.google.android.exoplayer2.util.RunnableFutureTask<T, ?>, boolean)`.
      Specified by:
        `getSegments` in class `SegmentDownloader<HlsPlaylist>`
      Parameters:
        `dataSource` - The `DataSource` through which to load any required data.
        `manifest` - The manifest containing the segments.
        `removing` - Whether the segments are being obtained as part of a removal. If true then a partial segment list is returned in the case that a load error prevents all segments from being listed. If false then an `IOException` will be thrown in this case.
      Returns:
        The list of downloadable `SegmentDownloader.Segment`s.
      Throws:
        `IOException` - Thrown if `allowPartialIndex` is false and an execution error occurs, or if the media is not in a form that allows for its segments to be listed.
        `InterruptedException`