4323 Commits

Author SHA1 Message Date
Oliver Woodman
ff43df1e89 Remove versions from IMA demo manifest that are now specified via gradle 2018-03-13 23:48:55 +00:00
Oliver Woodman
bd71a60f48 Remove stray test 2018-03-13 23:44:52 +00:00
aquilescanta
5706105b7c Recreate the cast media queue whenever the timeline is cleared
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188871914
2018-03-13 15:45:00 +00:00
olly
f9b70c2374 Bump version to 2.7.1 and update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188514063
2018-03-13 12:18:53 +00:00
olly
bdc5b5624d Centralize version and target sdk constants
We had these specified directly in AndroidManifest.xml due to
our internal build setup. This change makes our internal build
re-write AndroidManifest.xml to dynamically insert the required
values, meaning they no longer need specifying in each manifest.

Bonus 1: Internally built demo apps now include the CL number at
which they're built in the version name :).

Bonus 2: Removes lint warning that complains min/target SDK
values in the manifest are redundant.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188489115
2018-03-13 12:17:00 +00:00
olly
29839ab6a6 Fix min api check in RobolectricUtil
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188716201
2018-03-13 11:54:12 +00:00
olly
f44a96f184 Remove "r" from instructions for extension modules
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188038757
2018-03-07 18:40:39 +00:00
hoangtc
f91e6349fd Migrate ExoPlayer Gradle build files.
- Change 'compile' configuration (deprecared) to using 'implementation'
and 'api' configurations instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=187311778
2018-03-07 18:40:16 +00:00
tonihei
4519c31c58 Move extension tests to Robolectric.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=187021822
2018-03-07 18:37:46 +00:00
Aditya Anand
7c7711c355 replace 'compile' with 'implementation' 2018-03-07 18:32:26 +00:00
andrewlewis
91c4490249 Work around stalled AudioTrack up to API 28
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188173078
2018-03-07 18:31:47 +00:00
andrewlewis
f71b087fe4 Force rendering a frame every 100 ms
Also remove logic for tracking the next output buffer in LibvpxVideoRenderer, as
this allowed many consecutive frames to be rendered that were actually late
after dropping to keyframe. It looks better to show frames at a consistent
100 ms rate.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188144739
2018-03-07 18:31:40 +00:00
bachinger
7a386d9179 Add separate interface RatingCallback to handle user ratings.
To support Google Assistant media apps need to support the action
ACTION_SET_RATING. Before this change developers have to use a QueueEditor for
this which does not have any other mandatory actions required for Assistant.
With this change developers can implement the rating action with the
PlaybackPreparer which they need to implement anyway to support Assistant.

https://developer.android.com/guide/topics/media-apps/interacting-with-assistant.html#transport_controls

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188056722
2018-03-07 18:31:33 +00:00
tonihei
0160b87c43 Fix divergence of timeline between ExoPlayerImpl and ExoPlayerImplInternal.
The playback state in ExoPlayerImpl and ExoPlayerImplInternal is usually kept
in sync. Only the timeline was so far not updated in the same way with the
internal player using a null timeline while ExoPlayerImpl keeps the previous
timeline.

This change removes the need to keep a null timeline which allows to update
the internal timeline in the same way as the external one. This fixes problems
when retrying a failed playback multiple times.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188034988
2018-03-07 18:30:49 +00:00
tonihei
b7d2ae1457 Fix wrong start position in resetInternal.
The start position was set to the old start position instead of the current
playback position. We need to set the start position to the current playback
position to ensure a repreperation with the same media starts from the last
playback position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188025439
2018-03-07 18:30:42 +00:00
olly
b10f033229 Derive duration from sample table if missing from track header
Issue: #3926

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188020756
2018-03-07 18:30:31 +00:00
olly
110d6e4fdf Propagate failures handling messages on the playback thread
This restores functionality that was lost when we added
support for general timed message delivery.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=187866807
2018-03-07 18:29:47 +00:00
andrewlewis
d8d3bd7b3f Make the period and initial window positions match for all HLS streams
Before this change, HlsMediaSource timelines had a period starting at the epoch.
For VOD streams the window position in the period was the program date time.

This change makes period and initial window positions match. For live streams
the window position advances as segments are removed, so its position in the
period is the difference between the initial program date time and the program
date time of the latest playlist.

This also makes it possible to insert ads in VOD HLS content with program date
time, as the period and window are now aligned.

Issue: #3865

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=187590948
2018-03-07 18:28:51 +00:00
andrewlewis
452e4debcc Fix ImaAdsMediaSource isTopLevelSource
AdsMediaSource must be top-level. Currently the (deprecated) ImaAdsMediaSource
can't be used because it prepares its contained AdsMediaSource as a child
source.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=186990882
2018-03-07 18:24:14 +00:00
tonihei
052de3c677
Update ISSUE_TEMPLATE 2018-03-01 10:32:27 +00:00
ojw28
eb9c67fbc5
Merge pull request #3882 from google/dev-v2-r2.7.0
r2.7.0
2018-02-22 11:48:01 +00:00
Oliver Woodman
166c4ba795 Remove dev release notes from 2.7.0 2018-02-22 11:43:02 +00:00
Oliver Woodman
1f6607a9aa Merge branch 'release-v2' into dev-v2-r2.7.0 2018-02-22 11:39:57 +00:00
Oliver Woodman
6054ba418f Fix bad Javadoc 2018-02-22 11:14:03 +00:00
Oliver Woodman
1a5d985e2a Remove stray translations 2018-02-22 10:24:11 +00:00
Oliver Woodman
2cff596162 Allow audio position to jump on first input buffer
Allow the position to jump on receiving the first presentable input buffer,
if and only if the buffer timestamp differs significantly from what was
expected. This prevents a stuck buffering case for streams that are thought
to start at t=0, but actually start at t=large_value.
2018-02-22 10:05:16 +00:00
olly
f69cc191ab Drop EMSG atoms before MOOV
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=186454715
2018-02-21 23:42:24 +00:00
olly
93a40d1048 Fix bad @see Javadoc in CastPlayer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=186305613
2018-02-20 16:31:13 +00:00
Oliver Woodman
5e6a2e57af Fix issue template 2018-02-20 14:36:33 +00:00
olly
c851ee9388 Fix robolectric tests when running with gradle
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=186291489
2018-02-20 14:36:26 +00:00
Oliver Woodman
d7a467c6be Remove unnecessary strings for 2.7.0 2018-02-20 13:39:48 +00:00
olly
db1f9d0a0f Bump to 2.7.0 and prepare release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=186200840
2018-02-20 11:27:11 +00:00
andrewlewis
da27e7d22c Fix content progress updates and position faking
Occasionally the player could transition from playing content to playing an ad
after IMA called playAd. The discontinuity triggered faking the content
position, and the fake position was passed to IMA when content resumed causing
the wrong ad group to be loaded. Fix this by only faking the position if the
player transitions before playAd.

Also fix the calculation of the expected ad group index for a postroll ad, and
wait for the player to transition back from ad to content before passing a
content progress update.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185994229
2018-02-20 11:24:56 +00:00
andrewlewis
20dc5dc096 Catch exceptions in all IMA callbacks
If an exception is thrown in an IMA callback it crashes the process with lots of
logging from WebView (including several stack traces, etc.). This change wraps
ImaAdsLoader code that might throw, skips any remaining ads (as the errors are
not recoverable, in general) and notifies a new load error callback so that the
application can implement its own handling. The intention is to make the loader
robust to unexpected requests from IMA and avoid crashes.

Also handle IMA loading an ad in an ad group that has no available ads. In rare
cases IMA will try to load an ad for which an error was previously notified, so
this drops those load requests allowing playback of the content to continue.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185985850
2018-02-20 11:24:56 +00:00
aquilescanta
b36db1a87e Add little endian and 14-bit mode support for DtsReader
Issue:#3340

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185973510
2018-02-20 11:24:56 +00:00
tonihei
454ec5a2d7 Add window sequence number to MediaPeriodId.
All media periods are part of a queue of windows buffered and played by
ExoPlayer. When repeating windows, the current MediaPeriodId is insufficient
to distinguish between the repetitions of the same period. This makes it hard
to see to which media period load events belong to, and it is also difficult to
determine whether two media periods belong to the same logical window or
whether they are part of different repetitions of the same window.

Therefore this change adds a unique sequence number to each window in the
sequence of windows and this sequence number is saved as part of the
MediaPeriodId.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185829509
2018-02-20 11:24:56 +00:00
andrewlewis
fe2b01c57e Fix content progress reporting if there is no preroll
If there was no preroll and the pending content position was set before the
first midroll, the pending content position was never cleared so loading the ad
was never triggered.

Only set a pending content position if we know that we need to trigger playing
an ad for the current position and IMA will poll for an ad (because there is a
midroll ad group). Clearing the pending content position happens when IMA pauses
content to play the ad.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185818315
2018-02-20 11:24:56 +00:00
andrewlewis
1c140603d4 Fix handling of ad group load errors
IMA sometimes delivers an ad group load error just after the time of the ad
group, which is problematic now that we set the expected ad group index based on
the last returned content progress.

Only update the expected ad group index once we are within a fixed preloading
threshold of the next ad.

Also fix updating the ad group to use the new ad count, and check for ad group
load errors when we have no expected ad group defensively.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185803086
2018-02-20 11:24:56 +00:00
tonihei
bc792c3202 Broaden the surface switching workaround to other Moto C+ variants.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185681751
2018-02-20 11:24:56 +00:00
andrewlewis
95f298f5a4 Fix handling of ad tags with only preroll and postroll ads
Content progress is only polled if there are midroll ad groups. If the ad tag
had only preroll/postroll ads, the pending content position was not provided to
IMA, which meant that the postroll ad could never play.

Only set the pending content position if there are midroll ads.

Issue: #3715

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185680803
2018-02-20 11:24:56 +00:00
aquilescanta
4276a199ba Add initial support for EXT-X-GAP
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185676652
2018-02-20 11:24:56 +00:00
eguven
0ae56cc117 Fix SmoothStreaming manifest url for downloading
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185526653
2018-02-20 11:02:59 +00:00
olly
93e6813f76 Use stable order for subtitle buffers with identical timestamps
Issue: #3782

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185673731
2018-02-20 10:51:19 +00:00
aquilescanta
8dad8fde78 Fix CeaUtil's invalid SeiMessage skipping
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185673454
2018-02-20 10:51:19 +00:00
aquilescanta
ed527437b7 Make ID3 GEOB frames parsing more robust
Issue:#3792

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185668919
2018-02-20 10:51:19 +00:00
andrewlewis
5bd744000c Handle VAST_LINEAR_ASSET_MISMATCH
This error marks the current ad group as unplayable.

Issue: #3801

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185663472
2018-02-20 10:51:19 +00:00
tonihei
1d7e8efbdf Add Meizu M5C, Lenovo K4 Note, and Sony Xperia E5 to surface workaround.
Also added comments for all existing devices for easier reference.

Issue:#3835
Issue:#3236

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185661900
2018-02-20 10:51:19 +00:00
andrewlewis
4ca755a344 Skip ads for which the media failed to prepare
Also make ad group skipping more robust. After calling onError for an ad, IMA
will sometimes trigger an ad group load error, so this needs to be handled in a
way that allows some ads to be loaded already for the ad group.

This change also fixes calculation of the expected ad index to take into account
whether the position is being faked to trigger loading an ad or is the actual
player position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185655844
2018-02-20 10:51:19 +00:00
andrewlewis
7b5bdd3c44 Release Extractors on the loading thread
Releasing the player released the internal playback thread once renderers were
released. Releasing a MediaPeriod queued a Loader.ReleaseTask on the loading
thread which would post back to the playback thread. If the playback thread had
been quit by the time this happened, the release task wouldn't be run.

Release on the loading thread instead of the playback thread. This avoids
needing to block releasing the player until the loading threads have ended, and
ensures that release tasks will run eventually. As part of this change,
ExtractorMediaPeriod's call to Extractor.release will now run on the loading
thread (which means that all Extractor methods are called on that thread) and
other cleanup in ReleaseCallback will run on the loading thread instead of the
playback thread.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185651320
2018-02-20 10:51:19 +00:00
olly
99e5a3c9b4 Add Y611 to setOutputSurfaceWorkaround
Issue: #3724

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=185548632
2018-02-20 10:51:19 +00:00