Commit graph

178 commits

Author SHA1 Message Date
aquilescanta
28e117d25f Add support for #EXT-X-START tag
This overrides the start position relative to the window.

Issue:#1544

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144434903
2017-01-13 17:27:26 +00:00
eguven
060f2a5d6f Remove unnecessary parameter and local variables
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144427132
2017-01-13 17:27:25 +00:00
aquilescanta
4a6a8553e9 Check #EXTM3U header is present in HLS playlists
Issue:#2301

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144334062
2017-01-13 17:27:25 +00:00
olly
444811c010 Don't overflow when dealing with large segment numbers
Issue: #2311

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144182445
2017-01-13 17:03:41 +00:00
andrewlewis
bf65df1b35 Allow ClippingMediaPeriod to be used on its own.
ClippingMediaPeriod may be a useful component for other MediaSources too so
remove its dependency on ClippingMediaSource.

Also allow the clipping end point to be TIME_END_OF_SOURCE, in which case
the clipping window extends to the end of the wrapped period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=144056285
2017-01-10 10:51:49 +00:00
olly
ae2e84df35 Set HLS period duration when live stream ends
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143776633
2017-01-06 16:59:29 +00:00
andrewlewis
a77bc8d457 Close DataSources quietly.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143672900
2017-01-05 21:56:34 +00:00
olly
f735a86ebb Better handle inconsistent HLS timeline updates
Issue: #2249

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143555467
2017-01-04 23:07:58 +00:00
olly
44d6b1a271 Add some initial plumbing for DASH EMSG support
Issue: #2176

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143554094
2017-01-04 23:07:58 +00:00
olly
ae30fe496a Fix potential NPE if source is released without being prepared
Issue: #2264

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=143550088
2017-01-04 23:07:57 +00:00
eguven
39827fad27 Allow specifying a custom cacheKey to ExtractorMediaSource
Issue: #2201

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142772885
2017-01-04 23:04:07 +00:00
Oliver Woodman
0b141aeeee Revert "Improving handling of atoms with size less than header in FragmentedMp4Extractor."
This reverts commit 71186ef16e.
2017-01-04 22:32:28 +00:00
cblay
71186ef16e Improving handling of atoms with size less than header in FragmentedMp4Extractor.
These currently lead to cryptic ArrayIndexOutOfBoundsExceptions being thrown from System.arraycopy() so my proposal is to throw a more useful ParserException instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142087132
2017-01-04 22:26:58 +00:00
olly
ab88821614 Fix large timestamps for HLS playbacks
- If there's no program-date-time then this change is
  a no-op.
- If there is a program-date-time this change considers
  the period as having started at the epoch rather than
  at the start of the content. The window is then set
  to start at the start of the content. This is a little
  weird, but is required so that the period sample
  timestamps match the start of the period. Note that
  this also brings the handling of on-demand in line
  with how the live case is handled, meaning there wont
  be weird changes if a live stream changes into an
  on-demand one.

Issue: #2224

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142442719
2016-12-19 15:12:55 +00:00
olly
2c3ce7fee3 Fix playback of media with >1MB preparation data
Also clarify when getNextLoadPositionUs and continueLoading
can be called.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142124497
2016-12-16 16:21:16 +00:00
andrewlewis
f276eb2ce7 Add ClippingMediaSource.
ClippingMediaSource wraps a single period/window video-on-demand source and
exposes a specified time range within it.

Issue: #1988

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141991215
2016-12-14 14:23:38 +00:00
aquilescanta
8a7628cb26 Remove playlist adjustment on chunk loads
This is particularly problematic for subtitle tracks where adjustment
can be broken. Now, the primary url can change when clients ask for a
variant snapshot, instead of happening on chunk load as before.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141933689
2016-12-14 14:23:38 +00:00
andrewlewis
f45751872d Move track sample index updates out of getPosition(long).
This requires knowing the seek time in Extractor.seek, so that it's possible to
pick the latest synchronization sample at/before the seek time for each track
(rather than the earliest synchronization sample after the seek position).

Also remove the STATE_AFTER_SEEK state which should no longer be needed.

Issue: #2167

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141432598
2016-12-12 16:15:38 +00:00
aquilescanta
2fce364936 Ignore Splice Info in HLS TS media chunks
Issue:#2070

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141335458
2016-12-12 16:15:38 +00:00
aquilescanta
1cbc0fc678 Allow HlsPlaylistTracker to change the primaryHlsUrl
When the primary url is blacklisted (due to a 404, for example) or
the selected variant is different from primary url, allow the tracker
to change the url.

Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141291435
2016-12-12 16:15:38 +00:00
aquilescanta
a66b4a9bad Parse ID3 sample timestamp for HLS audio chunks
Pending improvement:

* Peek just the required priv frame. Avoid decoding all id3 information.
* Sniff the used container format instead of using the extension.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141181781
2016-12-06 20:06:37 +00:00
andrewlewis
01acc0e201 Remove unnecessary final.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141031900
2016-12-06 19:58:56 +00:00
eguven
7ea16a6ae2 Remove unused parameter
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140847027
2016-12-02 19:29:36 +00:00
andrewlewis
45bc4a0374 Pass player and isTopLevelSource to MediaSource.prepareSource.
These additions are useful for sources that need to track the playback position
and control playback.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140828310
2016-12-02 19:23:35 +00:00
aquilescanta
501f54a8a6 Add #EXT-X-PROGRAM-DATE-TIME support for HLS media playlists
Issue:#747

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140525595
2016-11-30 22:00:17 +00:00
aquilescanta
c3c176d93c Move HLS extractor construction to HlsMediaChunk
This allows ID3 PRIV timestamp extraction and Extractor Sniffing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140209568
2016-11-25 20:18:32 +00:00
andrewlewis
76c58a34d3 Clarify createPeriod javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140202942
2016-11-25 20:18:32 +00:00
aquilescanta
9c612f94c5 Chose timestamp adjustment master based on track selection
Select the timestamp master depending on track availability. If
a variant is being loaded, then that is the timestmap master.
Otherwise, if an audio track is being loaded, then the responsible
chunk source is the timestmap master. If no variant or audio
rendition is enabled, then a subtitle chunk source is selected as
timestamp master. This CL will become specially relevant once
ID3 PRIV timestamps are used for audio renditions.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140201385
2016-11-25 20:18:32 +00:00
aquilescanta
97a23ce572 Fix main thread playlist refreshes in HlsPlaylistTracker
The refresh handler in HlsPlaylistTracker was being instantiated in the
same thread as the MediaSource (i.e. Main thread).

Issue:#2108

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140197553
2016-11-25 20:18:32 +00:00
olly
62bdb1b93a Fix failure when a seek is performed with no enabled tracks
This issue affects ExtractorMediaSource only. We shouldn't
start loading in the case that we're prepared and have no
enabled tracks, since there's nothing that we need to load.
This was causing an assertion failure in startLoading.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140030650
2016-11-25 20:18:32 +00:00
olly
b3726cf761 Support DASH multi-segment fetches
Note that multi-segment fetching is only possible in the
case that segments in a representation are defined to have
the same Uri and adjacent ranges (this is very rarely true
for live streams, but is quite often true for on-demand).
In the case that merging is requested but not possible,
the implementation will request one at a time.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140012443
2016-11-25 20:18:32 +00:00
aquilescanta
6101450302 Merge initialization chunk into HlsMediaChunk
This will allow creating the extractor in the HlsMediaChunk.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139915713
2016-11-25 20:18:32 +00:00
aquilescanta
9ac7f64c84 Fix search to end of stream in HLS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139905590
2016-11-25 20:18:32 +00:00
olly
42fadfe083 Allow SsMediaSource to take an optional SsManifest
Also allow custom SsManifestParser injection.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139813660
2016-11-25 20:18:32 +00:00
olly
81ce6bba7a Allow DashMediaSource to take an optional DashManifest
Also allow custom DashManifestParser injection, to
support parsing of custom elements and attributes that
service providers may wish to include in their manifests
(e.g. #2058).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139813108
2016-11-25 20:18:32 +00:00
aquilescanta
cafe603694 Allow regressing media sequence numbers in HLS media playlists
This is techically not allowed by the spec[1] but might still occur in
certain scenarios. New playlists with older media sequence numbers are
ignored.

[1]: HLS draft version 20, section-6.2.1

Issue:#2059

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139564889
2016-11-18 12:54:03 +00:00
olly
d890c2f48f Fix infinite loop -> ANR at end of HLS playbacks
continueLoading shouldn't return true unless it's done
something. Always returning true if endOfStream was
causing CompositeSequenceableLoader.continueLoading to
loop forever.

It looks like the same issue exists in ChunkSampleStream
as well, although I can't seem to provoke DASH or SS
playbacks into doing anything bad as a result.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139559834
2016-11-18 12:53:24 +00:00
aquilescanta
a8a2ef4a24 Blacklist HLS media playlists that return 4xx error codes
Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139443476
2016-11-18 12:49:24 +00:00
aquilescanta
d6eb9cb79f Allow playlists of different size in HlsPlaylistTracker playlist adjustment
Issue:#2059

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139331670
2016-11-18 12:47:36 +00:00
aquilescanta
b1fe274df3 Replace java.text.ParseException for ExoPlayer's ParserException
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138628300
2016-11-10 21:15:20 +00:00
olly
7b0effc2d0 Project default start pos to fix VOD->Live transitions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138493584
2016-11-10 21:15:20 +00:00
cdrolle
a4935a9ba0 Added support for multiple RawCC (CEA-608/CEA-708) tracks in DASH.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138392065
2016-11-10 21:14:57 +00:00
aquilescanta
992cfdecc2 Feed timestamps from loaded chunks back to the playlist tracker
This is the first step towards allowing discontinuities in the
playlist tracking. Also changed durationSecs for durationUs in
MediaPlaylist.Segment.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138207732
2016-11-10 21:14:29 +00:00
zhihuichen
e2081f40fb move baseUrl from segments to representations: V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138136090
2016-11-10 21:14:29 +00:00
cdrolle
d9421f4fb9 Fixed issue when VOD-style period is present in a dynamic manifest
A VOD-style period in a dynamic manifest would result in a NullPointerException.
Also fix another issue in which an unrecognized mime type would also result in
NullPointerException.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138075137
2016-11-10 21:13:28 +00:00
aquilescanta
aaf38adc26 Add support for HLS live seeking
In order to expose the live window, it is necessary (unlike before) to refresh
the live playlists being played periodically so as to know where the user can
seek to. For this, the HlsPlaylistTracker is added, which is basically a map
from HlsUrl's to playlist. One of the playlists involved in the playback will
be chosen to define the live window. The playlist tracker it periodically.
The rest of the playilst will be loaded lazily. N.B: This means that for VOD,
playlists are not refreshed at all. There are three important features missing
in this CL(that will be added in later CLs):

* Blacklisting HlsUrls that point to resources that return 4xx response codes.
    As per [Internal: b/18948961].
* Allow loaded chunks to feed timestamps back to the tracker, to fix any
    drifting in live playlists.
* Dinamically choose the HlsUrl that points to the playlist that defines the
    live window.

Other features:
--------------

The tracker can also be used for keeping track of discontinuities. In the case
of single variant playlists, this is particularly useful. Might also work if
there is a that the live playlists are aligned (but this is more like working
around the issue, than actually solving it). For this, see [Internal: b/32166568]
and [Internal: b/28985320].

Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138054302
2016-11-10 20:54:03 +00:00
olly
7b3690a0a6 Fix onLoad* event media times for multi-period case
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137932100
2016-11-10 20:53:20 +00:00
olly
488c2d8270 Fixes for Issue #1962
- Use A/V tracks only for buffering position when available
  in ExtractorMediaPeriod.
- Fix layering of exo_simple_player_view so that subtitles
  are above album art. The test stream provided has both.
- Make album art in SimpleExoPlayer view respect the resize
  mode, like we do for video.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137698473
2016-10-31 19:49:54 +00:00
aquilescanta
daf7b948a1 Fix buffering state when selecting VTT track with no cues
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137697023
2016-10-31 19:49:54 +00:00
olly
2c54363204 Report track groups and selections through ExoPlayer
TrackSelector no longer has a listener. Instead, tracks
change events are reported through ExoPlayer.EventListener.
Applications interested in retrieving the selection info
should retrieve it directly from the TrackSelector by
calling an exposed getter.

Pretty sure the ref'd issue is fixed as a side effect of
this change.

Issue: #1942

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137183073
2016-10-27 12:27:55 +01:00