If they're omitted, it's reasonable to assume it's because
they were uninteresting (i.e. sample data always tightly
packed at the start of the mdat). This is an issue for some
SmoothStreaming streams.
We actually already play such streams successfully, but
that's only due to another bug to be fixed in a following CL.
The same is true for V1, but given the low impact nature,
the fix will be V2 only.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131191975
If currentTrackBundle is updated at the start of the
block and then something goes wrong in the middle (e.g.
one of the skipFully calls) then the extractor wont
resume from the correct place.
This would be caught by our extractor tests if we had
a test sample that requires skipping to the sample data.
I'll try and construct one of those.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131191174
- The -1 needs to be a 0. My bad.
- Create AAC CSD if not defined in manifest, like in V1.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131190995
Also tweak how the null checks happen in a few DataSource
implementations (should be no-op changes, but allow you
to look at close() and be happy it does the right thing
without having to loop at the open() implementations).
Issue: #1759
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131172427
There's still some internal to clean up to do, and in particular
it remains a TODO to be able to handle seek calls before the
timeline is set (for this CL, such calls are dropped). This change
does however finalize the API.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131171318
Fix the calculation of the seek window for multi-period DASH.
Snap the default initial position back to the start of its segment, to ensure
that the first sample provided when transitioning to a DASH live source is a
key-frame.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131052912
- Remove playingPeriodEndPositionUs. It doesn't look like it's
required.
- Rename time variables to make it clearer what they are.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131027164
Window is potentially confusing with Android's Window class.
Once Window is renamed, it makes sense to rename Timeline too.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130938392
Also inline a few methods/classes where they can be made
private and therefore be removed from the public API.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130935090
Mainly, this allows the extractor to expose multiple audio tracks.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130928152
- Use a single constant for unset/unknown times across
all time bases. Note also that this moves away from
use of -1 for unset/unknown times in ms, which was a
bad choice (it might conflict with real times, such
as a time representing being just behind the start
of a live window).
- Add a few other unset constants, and use them.
- Fix some hardcoding of -1 where existing constants
should have been used.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130775594
- Remove getNewPlayingPeriodIndex from MediaSource
- Remove all absolute references to period indices from
Window. Their existence prevents ConcatenatingMediaSource
from being able to efficiently handle children with
large numbers of entries (e.g. a cursor backed source),
since it would copy all windows into its merged timeline.
- Fix ExoPlayerImplInternal to attempt a restart in the
case that the loading (but not yet prepared) period is
removed, in absence of a playing period.
- Implement logic for finding the "next" period in the old
timeline when attempting a retry.
Removing some of the nasty US<->MS conversions left as a
virtual TODO.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130659973
Period transitions can either be to new windows (in which case the default
position for the new window should be loaded) or to the next period of the
current window (in which case the the new period should be played from zero).
Fix the logic for calculating the new period index to load to implement this.
In processManifest, periodsById may contain periods that have been removed from
the manifest, which are still being used by the player (it releases periods on
receiving the source info refresh after processManifest returns). Ignore
periods that have been removed from the manifest when calling updateManifest.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130626441
- This change marks the methods that will be removed, and
renames the Window methods to remove "Window" from their
names.
- The Window methods need to be made to work (rather than
throw exceptions) when the timeline isn't set. Once that
gets done in a subsequent CL, the deprecated methods will
be removed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130612979
- This change also enables seeking in live windows in the
ExoPlayer demo app.
- The added playlist doesn't transition properly by itself,
but for manual transitions it works correctly, and
demonstrates seeking into a default position.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130515880
- Add missing callback call.
- Allow injection of live edge offset.
- Refine calculation of live window size to correctly
handle just-started streams where the DVR window
hasn't yet grown to full size.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130412465
Also allow use of suggestedPresentationDelay taken from the
manifest, and enable this by default.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130409924
SinglePeriodTimelines can all use the same identifier, as their identifier is
wrapped in a pair with the (fixed) source index when they are concatenated with
other sources' timelines.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130386297
This is a 1:1 mapping. This change formalises the fact,
and makes it possible to easily query the mapping.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130375111
This was always a bit of a hack; for Play Movies. It may well
no longer be necessary, and if not I'd like to think of a nicer
or more general way of doing it. We can always bring it back
if needed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130373433
- This avoids the need to have to use the timeline to
calculate a window duration, which can be awkward.
- Window now represents a window of availability with
an isSeekable flag, rather than a window of
seekability.
- Promoted Timeline and Window to top package; they're
pretty important :).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130278509
It's no longer safe to convert END_OF_SOURCE -> duration on
the main therad, since the Timeline from which the duration
is obtained is posted to the main thread, where-as the
buffered position is passed by updating a volatile. Hence
an update to the latter might become visible to the main
thread before the corresponding Timeline.
This change moves the conversion to the playback thread.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130265893
This is in preparation for making it so that periods aren't reused.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130113382
- For audio/video, we should report the minimum largest
queued timestamp. This ensures that buffering continues
rather than stops in the case of bad sample interleaving.
- If there are "sparse" tracks then they should be ignored
for this calculation, otherwise the buffered position can
end up getting stuck at some small value (e.g. if there's
a text track containing a single sample with a small
timestamp).
- In the edge case that there are only "sparse" tracks, we
probably want to take the maximum largest queued time
instead.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130094266
*** Reason for rollback ***
Referential equality was probably the right thing to do, since using .equals
breaks track selection in the case that a source exposes two or more tracks
whose formats are equal. We should fix the way overrides work instead.
*** Original change description ***
Fix multi-period transitions with track selection overrides
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=130083840