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
- This should be a no-op change
- Inline attemptRestart
- Clean up processing of pending seeks
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139804630
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
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
ReusableBufferedOutputStream is a subclass of BufferedOutputStream with a reset(OutputStream) that allows an instance to be re-used with another underlying output stream.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139505999
I'll have a more thorough refactor of some of this class
fairly soon!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139451693
Use BufferedOutputStream and BufferedInputStream while writing / reading.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139446039
This removes duplication from SimpleDecoderAudioRenderer and
MediaCodecAudioRenderer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139187254
Clean up AtomicFile and make it return a custom FileOutputStream
for writing which handles IOException automatically during write
operations.
It also syncs the file descriptor and deletes the backup file on
close() call. This fixes the order of flush and close operations
when the fileoutputstream is wrapped by another OutputStream.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138779187
This can be used by the app for showing arbitrary UI on top of the player (for
example, UI elements associated with an ad).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138610733
These variables are never read, since the underlying control
view reads them directly from the attrs.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138528246
This fixes VOD->Live transitions, with the caveat that
the Live portion still ends up further behind the live
edge than intended. This will be fixed in a following
change.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138407066
This change fixes the race condition where the internal
timeline is different to the externally visible timeline
when a seek is performed. We now resolve the seek position
using the externally visible timeline, then adjust the
period index as required for the internal timeline. If the
period is missing we follow similar logic for the existing
case where the playing period is removed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138402076
This CL adds a SpliceInfoDecoder for the most common SCTE35 commands for splcing.
So far, it only includes TransportStreams, but porting it to HLS and DASH should be
fairly easy.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138389807
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
handlePeriodPrepared
->setPlayingPeriodHolder
->enableRenderers
passes rendererPositionUs to renderer.enable(), but
this value is not set correctly.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138176114
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
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
- 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
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
Unlike with PesReaders, sections don't have a standard way
of providing timestmaps or even generating tracks. We need
to pass this information so that readers decide what to do
with it.
Issue:#726
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137162494
This allows the user to create section readers(usually) for reserved pids,
like SDT, EIT, CAT, etc.
Issue:#726
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137150853
SectionPayloadReaders are provided to a SectionReader to
get whole sections(crc checked). This allows the injection
of custom section readers. E.G: SCTE35 messages.
Issue:#726
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136816612
In this CL:
* PesReader moves out of TsExtractor and becomes public.
* ElementaryStreamReaderFactory becomes TsPayloadReaderFactory and is
moved to TsPayloadReader.
* The TsPayloadReaderFactory is in charge of wrapping any
ElementaryStreamReaders with a PesReader.
Incoming:
* Extract SectionReader supperclass (analog to PesReader, but for
sections) from Pat and Pmt readers.
* Add a ScteReader, wrapped by a section reader, and include it in
the DefaultTsPayloadReaderFactory.
Issue:#726
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136707706
pesPayloadReader can be null here because DefaultStreamReader.init() can return null on unknown streamId. If we have a junk transport stream in our content an exception will be thrown.
*** Reason for rollback ***
Flag doesn't enforce what it says it enforces, due to redirects
*** Original change description ***
Add REQUIRE_HTTPS flag
Note that it's not possible for the library to enforce that
the flag is adhered to, since it's possible for applications
to inject custom implementations of DataSource (there's no
requirement they even extend HttpDataSource for network
requesting implementations). It's possible for applications
to replace pretty much anything in the library, so there's
no other place we could put the flag where we could make
this guarantee. Hence this is a best-effort that will work
when...
***
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136583459
This is a problem when two invocations of getNextChunk that retrieve
chunks (i.e. not playlists) occur too apart in time. In that case
the last loaded chunk has a media sequence that is behind the current
playlist.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136501291
Note that it's not possible for the library to enforce that
the flag is adhered to, since it's possible for applications
to inject custom implementations of DataSource (there's no
requirement they even extend HttpDataSource for network
requesting implementations). It's possible for applications
to replace pretty much anything in the library, so there's
no other place we could put the flag where we could make
this guarantee. Hence this is a best-effort that will work
when using HttpDataSource implementations that we provide.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136500947
Use sha1 of content uri if a custom cache key or content id isn't provided.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136351830
One issue with the previous implementation was that
isUnsynchronized would not be set back to false if
previously set to true and if the next header has
majorVersion >= 4. In general, having the decoder be
stateless is clearer (and thread safe, albeit that
this property is not required).
1. HttpMediaDrmCallback.executeProvisionRequest needs to specify
an empty byte[], else we do a GET instead of a POST.
2. Content-Type should not be set when making the provision
request, since there's no body.
3. DataSource implementations must correctly handle a non-null
body with zero length. CronetDataSource was not handling this
case. DefaultHttpDataSource was, but made a code modification
to make it a little clearer. OkHttpDataSource seems to handle
the case correctly, and it doens't look like the code can be
made clearer.
Issue #1925
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136042641
Note that actually handling CEA-708 is not yet implemented,
and so this is a no-op change from a behavior point of view.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136038439
The method track(int id) currently has different behaviours across
implementations. This CL maps ids to track outputs, which means
that successive calls with the same id will return the same
TrackOutput instance. Also fixes TsExtractor inconsistent behavior
after a seek.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136026721
A blocking call is necessary where we want to guarantee that
the player wont access the surface after the method call has
returned. We currently only do this for the case:
Surface->Null
But we should also do it for the case:
SurfaceA->SurfaceB
Since the caller may reasonably do something like destroy
SurfaceA immediately after it's been replaced.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135921296
This allows the injectable reader factory to be a stateless factory, allows
the seeking to be consistent and will allow multiple CC channel support later
on.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135909712
- Fix issue in ExoPlayerImpl where the timeline was null'd
but onTimelineChanged was not fired.
- Add the ability to not reset the timeline. This is useful
for retries where you know the timeline will be the same
as it was previously.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135797577
playingPeriodHolder can be null in the case that the first
period is still being prepared. We need to make sure we
release the period that's being prepared in such cases,
which is loadingPeriodHolder.
Issue: #1914
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135793472