1. Make LeanbackPlayerAdapter use a ControlDispatcher. This
allows apps to suppress control events in some circumstances,
and is in-line with our mobile controls.
2. Misc simplifications and cleanup to LeanbackPlayerAdapter.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166852816
Also workaround the non-repeatable queue and fix other minor issues.
Issue:#2283
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166848894
This functionality is most likely needed by UI modules which currently need
to obtain the timeline, the current repeat and shuffle modes and are only then
able to query the next/previous window index using this information.
Adding these methods simplifies these cumbersome requests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166181202
This parameter is used by methods such as getNextWindowIndex
and getPreviousWindowIndex to determine the playback order.
Additionally, there are method to query the first and last
window index given the shuffle mode.
None of the timeline implementations nor the ExoPlayer
implementation supports shuffling so far.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166170229
Changes to the player's shuffle mode are forwarded to the media session.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166057425
And implement a basic version of the methods in all implementations.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166041342
- Have a single inner class for all listeners. This is inline
with what we do elsewhere in the library.
- Avoid repeated getCallback() calls within methods.
- Seek to default position from ended state, rather than 0.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165603927
This CL adds the fundamental pieces for ExoPlayer/Cast integration and includes a
demo app to showcase this functionality. However, media queues should be supported
in the first release of this extension.
Issue:#2283
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165576892
It's needed in multiple places. MediaSessionConnector uses it
today. Our leanback connector will also use it. Maybe
SimpleExoPlayerView should use one too, to show the message to
the user when an error occurs.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164720020
Also mark all ads as played when the postroll plays, in the case the
player is backgrounded then resumed and the user seeks back.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164262738
I think they're excessively sized also, but changing that
is a little more risky. And we should look at investigating
the input buffer size for all our decoder extensions,
rather than just this one.
Issue: #3120
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164234087
Multiple timelines work as a wrapper around another timeline and forward
most of the method calls to the wrapped timeline. Added a base class meant to
be overridden which handles all the boiler-plate forwarding.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164117264
The manifest value is always overridden in gradle builds,
so this is for internal builds only. The value should be
the same (i.e. 25!).
Also fix IMA build to force the right support library
version, attempt 2!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=164103183
- Fix Ogg extractor to work without sniffing.
- Fix extractors to handle seek() before init().
- Add tests for both issues.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163992343
- Publish IMA extension
- Force IMA to use the correct version of the support library
- Add missing sr translations for repeat mode strings
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163705883
Also don't detach any attached player in release() to prevent a possible
NullPointerException if ImaAdsLoader.release() runs first, then the MediaSource
is released and detaches the player. This is safe because if the loader was
attached it's guaranteed to be detached.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163673750
SKIPPED can't be handled as CONTENT_RESUME_REQUESTED because after skipping an
ad there may be further ads to play in its ad group.
Remove workaround for handling unexpected playAd without stopAd, as the player
can instead recover when IMA sends CONTENT_RESUME_REQUESTED. This in turn fixes
handling of the case where playAd is called twice but IMA expects only the
first ad to play, when skipping a particular ad. (Add an ad tag where this
occurs to internal samples.)
Check whether a currently playing ad has been marked as played in
ExoPlayerImplInternal, and handle this case as a seek. This ensures that any
loaded ad periods are discarded in the case of CONTENT_RESUME_REQUESTED.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162610621
- Drop minimum version to new RTMP min version
- Publish the extension
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162477200
Store playWhenReady when playAd is called, and restore it if necessary when the
content resumes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162471616
This is the first step towards facilitating Cast integration to ExoPlayer.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162366198
Remove assertions in pauseAd()/playAd(), which can fail if events are delivered
after detaching the player, and log warnings instead.
Use whether IMA has sent CONTENT_PAUSE_REQUESTED/CONTENT_RESUME_REQUESTED to
determine whether we pause/resume the AdsManager, matching the IMA
documentation.
Also clean up use of player.isPlayingAd vs playingAd.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162364751
The FakeClock allows to simulate timing behaviour including sleep time
for test cases.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162345258
This is possible to do without passing the player instance to
custom action providers through their constructors, given we
no longer have a MuteActionProvider. Passing the player through
the constructors generalizes better to such cases, however, so
feels like the right thing to do.
It's also possible to use generics and keep passing the player
instance via the CustomActionProvider methods, but this adds
some unnecessary complexity.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162333043
Note: Wont work quite yet; we need to actually do a
release for the instructions to become effective.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=162220939
We want to experiment with a direct executor to avoid thread hops between the
network thread and the response handling thread. This change is needed to do
so.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161812382
adsLoader.contentComplete was called twice which led to postrolls not seeing
the STARTED event.
Also make the onPositionDiscontinuity handler easier to follow by renaming
variables, and remove the adGroupIndex field.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161537765
Once background and resuming is supported, the ads loader will be kept when the
player is destroyed and recreated. Move the state relating to the structure of
ads and what ads have been loaded/played out of the media source and into the
loader so the information is not lost when the source is released, in
preparation for supporting background and resuming.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161503571
(GitHub issue #3038)
Module prefix was missing for library-core module.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=161366375
This cleans up test the TestUtil class that in large parts consisted of
assertions for Extractor tests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160829066
These changes are in part related to handling playback of mixed clear
and encrypted content, where we might want to use a secure decoder
throughout, but only have drm init data and only care about the state
of the DrmSession during playback of encrypted parts.
- requiresSecureDecoderComponent became unnecessary when we added
ExoMediaCrypto, which provides a layer in which requiresSecureDecoderComponent
can be overridden.
- Relaxed requirements for obtaining the MediaCrypto. It's helpful
to allow retrieval in the error state, since it can be used to
instantiate a decoder and play clear samples.
- Deferred throwing of errors in renderer implementations. As long as
we can get a MediaCrypto, we should init the codec. We can also
play clear samples without failing if playClearSamplesWithoutKeys is
true, regardless of the errors state.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160536365
This also adds support for seeking in periods with midroll ads.
Remove Timeline.Period.isAd.
Issue: #2617
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160510702
With this change, it becomes possible to depend on ExoPlayer
locally in settings.gradle by doing:
gradle.ext.exoplayerRoot = 'path/to/exoplayer/root'
apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')
You can optionally add a prefix onto ExoPlayer's module names
by adding:
gradle.ext.exoplayerModulePrefix = 'prefix'
Issue: #2851
Issue: #2974
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160277967
It's currently difficult to use ExoPlayer modules in other gradle
projects because they rely on constants and dependencies defined
in our own top level gradle file. This change moves the constants
into a separate file referenced directly from each module. It also
removes the need for the top level gradle file to declare a
dependency on com.novoda:bintray-release. This is now only needed
if "exoplayerPublishEnabled = true" is specified.
Issue: #2851
Issue: #2974
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160272072
This will allow MediaSources to provide MediaPeriods that correspond to ad
breaks in a timeline period rather than content for a timeline period, in a
future change.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160267841
In the latest NDK version (r15) compilation fails because 'memset' isn't defined. Included cstring header.
Issue: #2977
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160139022
continueLoading may be called during preparation, but this is not
handled correctly in the case where a deferred period doesn't
have a source yet.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158696539
1. Remove tools:replace in manifest files. This attribute is only needed to establish priority when two manifests are merged and have the same attribute with different values.
As this is not happening here, the attributes can be removed.
2. Some BUILD files also define a deprecated manifest merge strategy different from the android default merge strategy. For consistency these are set to "android'.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=158075128
In addition, the class now accepts available Cronet instances and returns the
source of the current CronetEngine.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156185701