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
- 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
This has always been broken in V2, but the issue is now also
visible for the very first period in the timeline because we
offset if by 60s. Previously the issue would only have been
visible from the start of the second period.
Issue: #2208
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142252702
Create a MediaCodecVideoTrackRenderer.shouldDropFrame function that can be overriden by a child class. The YouTube override prevents a frame drop if we haven't rendered anything in the last 35 ms.
The YouTube override is off at the moment, I plan to use a server side flag to do a slow and controlled experiment.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142190774
Cue has been modified to optionally accept a fill color and a toggle specifying when to use the fill color. When the fill color toggle is set, then SubtitlePainter will use the fill color value instead of the color specified by the device's Accessibility settings. Cea708Decoder has also been modified to propagate that value, as well as cleaned up (in terms of documentation) to prepare it for inclusion in the open-source project.
There is also a new Cea708Cue, extending Cue, which holds the Cue's priority, which is used to sort potentially overlapping cues/windows.
Note that I've left the @ClosedSource annotation and logging in this CL. I intend to start testing the 608 and 708 functionality in the Fiber app to ensure that it works as expected on a wide-range of channels (as opposed to the single channel in ExoPlayer Demo) before removing these.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142173264
It's a nicer place for it to live once it starts being passed
around more widely (e.g. through the video renderer, for
tunneling)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142158460
Although the underlying platform AudioTrack is capable of
writing the AV sync header from M onward, I've opted not
to use the functionality since it appears to allocate an
unnecessary (and large) number of ByteBuffers. We can swap
over from O if this is addressed.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142138988
Also clarify when getNextLoadPositionUs and continueLoading
can be called.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=142124497
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
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
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
Define what element is returned if inclusive is true and there are multiple
elements equal to the input value.
Clarify/fix javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141891741
Not sure what I think about this, but we're getting quite
a lot of issues reported where streams play fine but capabilities
indicate they wont. It's probably best just to cross our fingers
and hope for the best in such cases, as was the case in V1 when
using ExtractorSampleSource.
Issue: #2157
Issue: #2034
Issue: #2007
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141758070
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
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
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
This is a first step toward supporting tunneled playback
Issue: #1688
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141167501
- Fix bug where we'd try and call replaceStream having already
notified the renderer that the current stream is final. This
could occur if a period was added to the end of the playlist.
- If the current period being played is removed and a new period
to play cannot be resolved, assume we've gone off the end of
the playlist and transition to the ended state. This allows
the current source to be re-used (unlike the previous behavior
of considering it an error). Treat valid seeks that cannot be
resolved due to concurrent timeline update similarly.
- Add seek sanity check back to ExoPlayerImpl. Meh. It's probably
best to keep this, since it stops the exposed window index
being invalid w.r.t the exposed timeline.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141167151
- Infer likely left/center/right alignment for pop-on captions.
This makes the rendering much better in practice, particularly
when the captions were intended to be center aligned.
- Fix line anchoring.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141156222
CEA-608 specifies a "safe-area" in which the captions should be rendered. This change adjusts all of the cue positions so they are within that safe area. It also fixes a minor issue in which roll up captions would drift towards the last row if a preamble address code had the "next row toggle" bit set.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141077433
Seeks are permitted when there's no timeline, and in this
case playback necessarily fails on the playback thread when
the timeline becomes known. Pushing failure to the same
place when the timeline is known means there's only one
failure path for this case. A later CL will likely introduce
an InvalidSeekPositionException for this case.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=141037708
This is implemented in the same way as in MediaCodecRenderer.
Move codec != null guard into feedInputBuffer to handle the case of an input
format change with no dequeued buffers where the codec can't be reinitialized
immediately.
Issue: #2111
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140864942
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
Prevented readFile() setting "changed" boolean to true every time. It's set only if encryption key is set but the index file isn't encrypted.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140714173
If a period has no enabled tracks it is considered to be fully buffered, even
if its duration is unknown. This would cause the offset of the next loading
period to be set based on the unset duration of the preceding period, in turn
causing the from of the player to expose a position based on an unset value.
Only load the next period when the current one has a known duration. If a
period has no enabled tracks and an unknown duration this causes the player to
play the period indefinitely.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140613858
When CEA-608 is embedded in MP4 each packet consists of
cc_data_1 and cc_data_2 only. The marker_bits, cc_valid
and cc_type are implicit. As a result playback of CEA-608
embedded in MP4 broke when we started passing the extra
byte for the TS case (and adjusted the decoder to assume
the byte was present).
This change introduces a special mimeType for the case
where the byte is implicit (!). An alternative option
was to insert the extra byte every 2 bytes in the MP4
extractor, but this is really quite fiddly to get right.
Also made the loops in the 608/708 decoders robust against
input of the wrong length.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140609304
Encryption key in index file is read by DataInputStream.read() which may return less bytes than required. Replaced it with readFully() which should read full length of data.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140597693
Leaving disabled by default for now, but we may want to consider
enabling it by default. Note that in V1 for ExtractorSampleSource
the behaviour was equivalent to this option being enabled, since
we didn't perform capabilities checks. For DASH/SS/HLS the V1
behaviour was equivalent to this option being disabled.
The type in PlayerActivity has been changed just to make it
easier to add a line that calls setParameters.
Issue: #2034
Issue: #2007
Issue: #2078
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140477568
I can't see how this would ever make a difference, but there's no
point in returning true. Either we've really reached EOS (in which
case outputStreamEnded will be true and the next drainOutputBuffer
will be turned into a no-op) or we've re-initialized the codec (in
which case there wont be anything to drain since we wont have fed
anything to the codec yet).
This change should also prevent the hypothetical NPE described in
issue #2096, although we're unsure how that NPE would occur unless
MediaCodecRenderer has been extended in an unusual way.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140338581
This allows ID3 PRIV timestamp extraction and Extractor Sniffing.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140209568
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
Note that we still have null timelines in ExoPlayerImplInternal.
This is deliberate; and is likely necessary to distinguish between
the no-timeline-yet and timeline-is-empty cases (we want to try
and process a pending seek for the latter, but not the former).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140200980
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
- Allow extension and overriding of renderer creation.
Several developers have asked for this, so that they
can use their own renderers (typically extensions to
the core ones) without losing the ability to use
SimpleExoPlayer.
- Add option to not attempt extension renderer creation,
for efficiency.
- Align build variants for internal and external demo
apps. This is slightly unfortunate, but convergence
seems necessary for useExtensionRenderers.
- Fix DASH playback tests to use the debug video
renderer.
Issue #2102
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140140915
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
This behavior is defined in ISO-13818-1, section 2.4.3.3(continuity_counter).
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140029161
- Fix handling of the currently playing period being
removed. This didn't do the right thing at all.
- Relax rule on seekToPeriodPosition re-using an
existing holder.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140014791
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