499 Commits

Author SHA1 Message Date
olly
2623b4b382 Pre-resolve HlsUrl urls
This is to make it possible to use equality of HlsUrl.url fields
to determine whether two HlsUrls point at the same media playlist.
This doesn't work currently because it's possible to mix absolute
and relative urls, which will not be equal until after the relative
url is resolved against the playlist baseUrl.

Issue: #5596
Issue: #2600
PiperOrigin-RevId: 240966503
2019-03-29 16:51:27 +00:00
olly
0810fe9159 Remove "variant" terminology from HlsChunkSource
HlsChunkSource may also be downloading segments from demuxed
renditions, which are not variants.

PiperOrigin-RevId: 240625139
2019-03-29 16:49:41 +00:00
olly
65bab95f72 Add video and closed caption renditions to HlsMasterPlaylist
Still skipping any renditions that have a null URL, which means that
closedCaptions in particular is always empty. This restriction will
be removed in a subsequent change, which will also remove muxedAudioFormat
and muxedAudioCaptions from HlsMasterPlaylist and instead derive them
from the Variant and Rendition information in HlsMediaPeriod.

Issue: #5596
Issue: #2600
PiperOrigin-RevId: 240623500
2019-03-29 16:49:26 +00:00
olly
e3a8429ee2 More faithfully parse content of HLS master playlists
- Split HlsUrl into Rendition and Variant
- Add Rendition/Variant specific information to the new types

Issue: #5596
PiperOrigin-RevId: 240419763
2019-03-29 16:48:09 +00:00
olly
30d66f5031 Rollback of be69d5b747
Issue: #5596

This arguably made a worse problem than it solved, and also I think subtly broken HLS
downloads by changing which renditions HlsMasterPlaylist.copy would retain in some
cases. Reverting as a mini step toward removing smart logic from the HLS playlist parser.

*** Original commit ***

Expand check for muxed audio media tags to include uris that match variants

Issue:#5313

***

PiperOrigin-RevId: 240348969
2019-03-26 15:37:24 +00:00
olly
07e3509dd9 Support providing all keys via EXT-X-SESSION-KEY tags
PiperOrigin-RevId: 240333415
2019-03-26 13:18:48 +00:00
olly
e4b49477ec Some nullability cleanup for HLS playlists
PiperOrigin-RevId: 240318686
2019-03-26 13:17:52 +00:00
Toni
5da4c67c8a Merge pull request #5303 from DolbyLaboratories:dev-v2-ac4
PiperOrigin-RevId: 239957730
2019-03-26 10:40:18 +00:00
olly
77d597de5f Parse CHARACTERISTICS attribute for EXT-X-MEDIA tags
PiperOrigin-RevId: 239844963
2019-03-22 19:57:01 +00:00
Oliver Woodman
a86a9137be Merge pull request #5578 from szaboa:dev-v2-5529
PiperOrigin-RevId: 239398940
2019-03-20 23:28:28 +00:00
tonihei
8e80acd18f Use androidx.test and extensions.
This replaces the deprecated usages of RobolectricTestRunner and
RuntimeEnvironent and fully migrates the tests to androidx.

PiperOrigin-RevId: 238011667
2019-03-15 04:53:12 +00:00
Arnold Szabo
d7c2519a5d Fixes according to the code review 2019-03-07 00:09:11 +02:00
aquilescanta
eea1ce3e0a Fix channel count propagation on HLS traditional preparation
PiperOrigin-RevId: 235189983
2019-03-06 16:54:08 +00:00
aquilescanta
6682580ad7 Extract HlsMediaChunk#feedDataToExtractor method
Deduplicates the call to Extractor#read and sorrounding logic.

PiperOrigin-RevId: 235165499
2019-03-06 16:53:15 +00:00
Arnold Szabo
854419962a Merge role and accessibility fields into RoleFlags 2019-03-05 23:38:49 +02:00
Arnold Szabo
58d746ecaa Add IntDef for role and accessibility descriptor's value, parse these also for video / audio tracks 2019-03-03 20:26:31 +02:00
Arnold Szabo
06ed877845 Pass role and accessibility descriptor values from adaptation set to format 2019-02-27 23:53:52 +02:00
aquilescanta
6b4c48a329 Replace initLoadCompleted with initDataLoadRequired
PiperOrigin-RevId: 234966936
2019-02-21 11:56:10 +00:00
aquilescanta
e502672b89 Encapsulate the key cache in HlsChunkSource
PiperOrigin-RevId: 234773649
2019-02-20 13:57:01 +00:00
aquilescanta
16f41dbaab Fix HlsSampleStream#read non-fatal lack of mapping
HlsSampleStream#read should return end of stream when
there is no mapping for the sample stream, instead of
nothing read. This allows the player to transition to
ended.

Issue:#5524
PiperOrigin-RevId: 234764027
2019-02-20 13:56:26 +00:00
aquilescanta
28434cff4c Support customization of the PlaylistStuckException waiting period
Issue:#5487
PiperOrigin-RevId: 234586819
2019-02-19 15:56:35 +00:00
aquilescanta
a174af0d70 Remove deprecated HLS-related constructors
PiperOrigin-RevId: 234586744
2019-02-19 15:56:17 +00:00
olly
0622afe170 Migrate to androidx
Issue: #5489
PiperOrigin-RevId: 234507428

Add missing annotation dependency

Issue: #5489
PiperOrigin-RevId: 234566177
2019-02-19 13:22:54 +00:00
aquilescanta
0ceff589b3 HLS Bugfix: Avoid loading initialization segment when reusing extractor
This bug affects any playlist that uses initialization segments. In practice,
almost exclusively fragmented mp4 segmented playlists are affected.

The bottom line is that extractors are chosen for reuse after the
initialization segment connection is open. However, reused extractors
do not need re-parsing the init segment, so loading the initialization is
wasteful.

PiperOrigin-RevId: 234479467
2019-02-18 17:40:48 +00:00
aquilescanta
8982da4b75 Support encrypted initialization segment
Defined in RFC 8216 Section 4.3.2.5.

Issue:#5441
PiperOrigin-RevId: 234114119
2019-02-18 17:40:48 +00:00
aquilescanta
12ed18c74c Add encryption information to initialization segments
PiperOrigin-RevId: 233953493
2019-02-18 17:40:48 +00:00
aquilescanta
04e6061498 Reduce the number of parameters required to create an HlsMediaChunk
PiperOrigin-RevId: 233765839
2019-02-18 17:40:48 +00:00
tonihei
edabbd52d0 Update Robolectric and Truth.
PiperOrigin-RevId: 233612344
2019-02-18 15:59:32 +00:00
olly
8401097ead Upgrade gradle plugin and friends
PiperOrigin-RevId: 233390513
2019-02-18 15:57:55 +00:00
aquilescanta
36da5fb511 Group audio renditions by name
Allows the player to adapt between audio renditions with different
names.

PiperOrigin-RevId: 233052105
2019-02-18 15:56:59 +00:00
aquilescanta
fc2a99a688 Generalize selectedVariantIndices in preparation for non-main adaptation
After this change, multiple HlsSampleStreamWrappers may contain an apdaptive
track group.

PiperOrigin-RevId: 232507292
2019-02-06 15:45:54 +00:00
tonihei
ef8335fc50 Ensure normalized language code is used everywhere and update documentation.
Issue:#2867
PiperOrigin-RevId: 231385677
2019-01-29 16:45:32 +00:00
tonihei
71d77d7fa0 Remove DownloadHelper subclasses and use static methods instead.
The subclasses only call specific constructor combinations and can easily
replaced by static methods.

PiperOrigin-RevId: 231385606
2019-01-29 16:45:10 +00:00
tonihei
0a8ae74217 Update DownloadHelper to use MediaSource and MediaPeriod directly.
This requires to prepare the media source and the periods in a small helper similar
to the metadata retriever. It also gets rid of the need to have abstract protected
methods to load the manifest, to extract the track groups and to convert to stream keys,
as this can now be handled by the media period.

PiperOrigin-RevId: 231385590
2019-01-29 16:44:56 +00:00
tonihei
32b40502fc Add HlsMediaPeriod getStreamKeys implementation and tests.
PiperOrigin-RevId: 231385563
2019-01-29 16:44:46 +00:00
tonihei
6a52cd7445 Ensure HlsMediaPeriod works with playlists without variants.
Currently, we remove all variants if none of the stream keys contains any
variants. This causes HlsMediaPeriod to throw exceptions as it expects at least
one variant.

Change it to support master playlists without variants.

PiperOrigin-RevId: 231385547
2019-01-29 16:44:36 +00:00
aquilescanta
6dde1e67d3 Parse CHANNELS attribute from EXT-X-MEDIA
PiperOrigin-RevId: 230743198
2019-01-29 16:42:18 +00:00
aquilescanta
9d19a7a4b6 Move parseSelectionFlags with the rest of the parse{attribute} methods
PiperOrigin-RevId: 230734189
2019-01-29 16:42:07 +00:00
tonihei
22413b8037 Add start position to MediaSource.createPeriod.
That's the same position set in MediaPeriod.prepare (where it may be removed
in the future).

Having the position at an earlier point is necessary to fix an
issue with lazy preparation in ConcatenatingMediaSource where the prepare
position was assumed to be known but MediaPeriod.prepare hasn't been called
yet.

Issue:#5350
PiperOrigin-RevId: 229756637
2019-01-17 17:26:24 +00:00
aquilescanta
be69d5b747 Expand check for muxed audio media tags to include uris that match variants
Issue:#5313
PiperOrigin-RevId: 228155222
2019-01-08 07:38:21 +00:00
tonihei
e8a7cb2546 Remove player and isTopLevelSource parameters from MediaSource.prepare.
They are not longer needed anywhere, are error-prone (because of threading
requirements), and complicate testing and using MediaSources without a player.

PiperOrigin-RevId: 227871157
2019-01-08 07:38:00 +00:00
ybai001
ae40208d92 Add AC-4 format support
* Add AC-4 MIME type definition
 * Add AC-4 format support in Mp4Extractor and TsExtractor
 * Add AC-4 Extractor
 * Add AC-4 playback support in MPEG-4, MPEG-DASH, TS and HLS
2018-12-26 16:53:37 +08:00
tonihei
173ddd6ee7 Add simplified adaptive media source stream key filter to factory classes.
This change only simplifies the API by using the ManifestParser internally.

PiperOrigin-RevId: 225516193
2018-12-14 15:42:36 +00:00
tonihei
c03b7e32e2 Remove TrackKey and its remaining usages.
This is no longer needed as the public API uses TrackSelection as the way to specify
selected tracks.

PiperOrigin-RevId: 225158867
2018-12-14 15:40:36 +00:00
tonihei
6a6b211233 Update DownloadHelper constructors and their usage in the demo app.
PiperOrigin-RevId: 224797598
2018-12-10 18:17:52 +00:00
Oliver Woodman
556dd7e9e0 Merge pull request #5187 from BrainCrumbz:feat/get-tag
PiperOrigin-RevId: 224166374
2018-12-05 17:49:07 +00:00
olly
22a8aa311b Clean up requesting non-media segments in downloader implementations
- Enable GZIP for media playlist + encryption key chunk requests in
  HLS, as we do during playback
- Pass around DataSpecs rather than Uris. This will be needed for if
  we add manifest cacheKey support (which seems like a good idea for
  completeness, if nothing else)

PiperOrigin-RevId: 224057139
2018-12-05 17:48:45 +00:00
tonihei
8a566fb330 Converge DownloadHelper implementations.
Moving most of the logic to the base DownloaderHelper helps to implement track
selection for downloading in a single place instead of multiple places.

PiperOrigin-RevId: 223964869
2018-12-05 17:48:18 +00:00
GiuseppePiscopo
b278b02816 chore(MediaSource): move getTag after removeEventListener 2018-12-03 18:21:37 +01:00
GiuseppePiscopo
8a359bb1fb feat(MediaSource): client code can get the tag of a MediaSource 2018-12-03 15:17:36 +01:00