On an edge case, player may get stuck when the renderers are ready but the buffer doesn't get full enough because of a fatal error in data source. An example state can be created by starting a live DASH stream and switching between normal and slow network connections.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129084824
An override applies across periods provided they expose the
same track groups according to .equals, but the formats in
the override are then compared against the period's formats
according to ==. Use .equals consistently to fix.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081591
For self-initializing segments, DefaultTrackOutput receives
a null format and then the actual format. This broke the
deduplication logic in InfoQueue.format, since there were
two transitions: FormatX->Null and Null->FormatX. This CL
allows deduplication to succeed in this case.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081583
The codec cannot be reconfigured if the format rotation
changes, or if the format dimensions exceed the current
decoder's configured maximum dimensions.
Issue #1707
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129004187
This wont help much until the buttons to get the dialogs
to display are focusable! Use of MediaController seems to
make that tricky (to be continued...).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128989328
When seeking to the default position in a period, the containing source may
actually return a position in another period. Multi-period live sources can do
this to seek the player to the live edge.
ExoPlayerImplInternal uses the same functionality when the playback position
reaches the end of a period to determine what period/position to play next.
This means that when playback transitions to a multi-period live source from
some other source (playing a concatenation of those two sources), the player
will play the live edge rather than the beginning of the earliest period.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128984355
Useful functionality promoted to core library:
1. Management of SurfaceHolder.Callback lifecycle
promoted to SimpleExoPlayer
2. Ability to determine whether audio/video tracks
exist but are all unsupported promoted to
MappingTrackSelector.TrackInfo
3. Read external storage permissions check promoted
to Util
4. SubtitleView given ability to act directly as a
TextRenderer.Output to remove layer of indirection
5. SubtitleView given ability to configure itself to
user's platform wide caption styling
6. KeyCompatibleMediaController promoted to library's
UI package.
Relocation of boring stuff:
1. ID3 frame logging moved to EventLogger.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128714230
This change merges the duties of FormatEvaluator into
TrackSelection classes, so that both the static and
dynamic parts of track selection are implemented in a
single place.
New feature: Demo app now allows you to enable random
adaptation in the track selection dialog.
Notes:
- It should be quite easy to allow application side
track blacklisting in addition to source side, as an
extension to this. That would effectively allow
applications to do seamless/deferred track selection
by creating a TrackSelection with all tracks enabled,
and then toggling the blacklist flags to select the
ones they want to be active.
- It should be trivial to implement format blacklisting
for DASH and SS as an extension to this. Will do in a
follow up CL.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128707517
- Invoked --> Called
- Gets --> Returns
- "True if X. False otherwise." --> "Whether X."
- Removed some @returns where the Javadoc is in "Returns X" form
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128678638
This is in preparation for allowing MediaSources to skip over periods when one
period ends, which is needed for starting to play a multi-period live stream
that is concatenated on to another period at the live edge.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128674659
- Suppress spurious resource type warnings.
- Make AS happy by making private method non-final.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128584391
As per the spec of MediaPeriod.getDurationUs, when a live
stream ends we need to start returning the correct final
duration.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128471183
We were forgetting to reset renderers during track
selections where muxed media is used.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128391816
It's only "needed" for HLS, and this requirement will
go away soon. It's safe to remove the flag ahead of
this because a TrackSelector can/should not attempt to
adapt between multiple audio/text tracks.
Also remove unnecessary restrictions on TrackGroups
being non-empty and only of known types.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128376601
- Remove null checks (never happens).
- Use "const".equals(Util.CONST) where possible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128351654
The classes these tests are written for have changed
so much we'll have to write them again. We can refer
to V1 if we want to look at what the old tests did, so
there's no need to keep this file in the V2 tree at
the moment.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128189076
- TrackSelection now exposes the selected formats, ordered
by decreasing bandwidth. This removes the need for DASH,
SS and HLS to do the sorting individually.
- The change also removes the need to reconstruct TrackSelection
instances with a different group index in various places
(e.g. MergingMediaPeriod).
- This is also a step toward potentially packaging the
FormatEvaluator inside of the TrackSelection (TBD).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128159064
According to the spec, there is no mandatory relation between segments'
sequence numbers of different variants. This CL ignores sequence numbers
when switching variants:
* In vod, the switching playback position is obtained by adding the
duration of previous segments.
* In live playback this is not possible. It is assumed that the
different live media playlists do not drift apart too much, so
the playback position is obtained by subtracting the duration
in reverse order.
In later CLs, the described mechanisms will become the fallback methods
by replacing them with the use of EXT-X-PROGRAM-DATE-TIME information
or more reliable sources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128072663