Commit Graph

1330 Commits

Author SHA1 Message Date
Joey Parrish 94f07dd410 Fix ratechange events w/ src= playback
The Player ratechange event is a filtered version of the video
ratechange event.  This is necessary because we manipulate
playbackRate as part of our buffering state management.

The UI uses this Player ratechange event to drive the playback rate UI
menu, but the event was not firing for src= playbacks (native HLS or
plain MP4s).

This fixes the ratechange event for src= playbacks, and also fixes a
small mistake in the MediaSource setup that could have resulted in the
ratechange event being triggered before playRateController_ was
created.

Closes #2488

Change-Id: If85e489d681cfbb1ae6141b490d82264e1d932bd
2020-04-07 23:36:07 +00:00
Sandra Lokshina fcc27b144a Hide overflow menu while ads are playing.
Change-Id: Ia77f0996c919e78b0a08b90e878c5615dcccf5bf
2020-04-07 18:32:13 +00:00
Sandra Lokshina ccc05ac14c Add ad manager tests.
Issue #2469

Change-Id: Ibf17caba5e99e1cd41f1da4b5cc472f815b10e2e
2020-04-03 10:54:54 -07:00
Sandra Lokshina 8107d1dfb3 Restore original ad manager factory after ad UI tests.
We suspect this is related to test failures on the ad tests CL.

Change-Id: I90265153a128eec926cfdf3eb61b078cb4d98ae5
2020-04-03 17:53:24 +00:00
Joey Parrish bf5e0e254b Fix SegmentIterator after evict
After evicting segments from a SegmentIndex, SegmentIterator should no
longer start at 0.  So instead of starting at 0, start at the earliest
position, which is returned by find(0).

Change-Id: I512ffb10a7f09f52930c5afbd783db063e9ebd66
2020-04-02 21:46:13 +00:00
Álvaro Velad Galván ad33625a11 Add non-standard DASH PlayReady UUID (#2474)
Resolves #2440
2020-04-01 09:54:42 -07:00
Joey Parrish f151f55da9 Fix nested TTML cues with non-ASCII characters
A regex in the TTML parser was looking for "word" characters (\w),
which is short-hand for non-whitespace ASCII characters, and excludes
Unicode characters and symbols from non-English languages.

There is a better option in Regex in some browsers, which is /\p{L}/u.
This is not supported universally yet, and defining an equivalent
regex constant using character codes is over 4kB of extra code.

It seems that the original author of that code meant "word" (\w) in
the sense of "non-whitespace" (\S), so we can just use \S instead.

This change also adds a regression test that doesn't depend on the
specifics of the regular expression used.

Closes #2478

Change-Id: I794258a797ba5d26a7bd8fc0a5244adc70c8a1ef
2020-04-01 16:08:48 +00:00
Jacob Trimble fda84c0343 Use waitForMovement in DRM tests.
This could help test failures on Windows since the video doesn't start
playing after the 5 seconds.  If it fails, we'll also get more
debug information for it.

Bug: 146050219
Change-Id: I1be5156350a591762022664feb05975470bbf92d
2020-03-27 15:56:58 +00:00
Sandra Lokshina f4a2b858d7 Refactor player out of SS ad manager.
Issue #2367

This also accidently fixes showing seek bar on ad end for
SS content.

Change-Id: I52241df9861f27d50976f0ce7309c7c14092463a
2020-03-26 17:13:26 +00:00
Joey Parrish e018aaaaba Fix potential memory leak in SegmentIndex
SegmentIndex has had a destroy() method for a long time, but it has
never been called.  Now that SegmentIndex has a timer which adds new
references for DASH SegmentTemplate live streams, it is more important
than ever to properly stop this active part of SegmentIndex.

This change replaces async destroy() with synchronous release() and
calls it from Player when the manifest is being disposed of.  This
will ensure that SegmentIndexes don't grow out of control after
content is unloaded.

This would not have affected v2.5, since we didn't have this
timer-driven growth of DASH SegmentTemplate live streams in that
release branch.

Related to #1339 (fixes issues introduced for period flattening)

Change-Id: I419a06a62eaa507d92132e20d4cc2d6e45c83ff2
2020-03-23 10:21:13 -07:00
Joey Parrish 1ab3f9c6db Remove position from SegmentReference
As part of Period-flattening, I'm trying to remove our dependence on
the "position" field of SegmentReference.  With that eliminated, we
can more easily concatenate Arrays of SegmentReferences without
modifying them.

 - Make SegmentIndex iterable
 - Add specialized seek() and current() methods to SegmentIterator
 - Remove position from SegmentReference
 - Make positions in SegmentIndex API stable without field in
   reference
 - Remove brittle hard-coded positions in tests (except SegmentIndex
   tests, where they would be hard to avoid in testing methods
   separately)
 - Use SegmentIterator in StreamingEngine to track the next segment
   between switches

Issue #892 (refactor StreamingEngine)
Issue #1339 (period flattening)

Change-Id: I666cc21249c34ee6cbc138a59109d9f1159fa127
2020-03-23 10:09:35 -07:00
Joey Parrish 6202b9372e Revert "Move next-segment tracking to SegmentIndex"
This reverts commit 235e4e11ad.

The effort to remove SegmentReference's position field will be handled
in a different way.

Issue #892 (refactor StreamingEngine)
Issue #1339 (period flattening)

Change-Id: I62b115137abc89f498b30467e574b0401dcad05d
2020-03-23 10:09:35 -07:00
Jacob Trimble 113884ee34 Fix UTCTiming tests.
This removes the tests added by #2412 since they didn't test what
was wanted.  This also fixes our existing tests to ensure they work
with autoCorrectDrift.  Lastly this adds a new test to ensure the
UTCTiming is ignored when autoCorrectDrift is true.

Change-Id: If511fca5d3f360cdf373229961b2a01fdbda31bb
2020-03-20 11:41:09 -07:00
Joey Parrish 817c2157a8 Fix test flake in very large MPD test
While fixing cherry-picks for v2.5.x, I found that the test for
parsing very large MPDs would fail on that branch because it referred
to segments that do not exist locally.  This changes the MPD to refer
to local segments which can be loaded, which is important on v2.5.x
where the load() call can fail if the first segment fails.

This tweak makes the test work universally on both branches.

Change-Id: I97284aa964034bf5768abdb97f06b2a1e371d865
2020-03-18 15:41:49 -07:00
Theodore Abshire d1dce29e89 Added 'doubleClickForFullscreen' config to UI.
This configuration, which is true by default, lets a user optionally
disable the "go fullscreen on double-click" functionality.
This allows a developer to fully disable fullscreen mode, if they so
wish, or to retain the fullscreen button but disable other methods of
entering fullscreen.

Issue #2459

Change-Id: I196602fc9843e0fd799c78703de60f864e906841
2020-03-16 17:03:53 +00:00
Álvaro Velad Galván 935040a3b5 Add ebutts:linePadding to ttml parser (#2443)
https://tech.ebu.ch/docs/tech/tech3380v1_0_1.pdf Section 2.1

Resolves #2407
2020-03-13 11:22:19 -07:00
michellezhuo b1d58ceafb Verify presentation delay with 1 decimal point
Fixes b/151237175

Change-Id: Ibdcbfa86290051a0a8242e9e485194af7d4af833
2020-03-12 22:35:05 +00:00
Theodore Abshire a8927828e8 Add search filters to the URL.
Closes #2422

Change-Id: I567ad6b0368badcf1e8e2535a640adc650f4daea
2020-03-12 12:03:09 -07:00
Sandra Lokshina 9a19821292 Add timeline ad UI tests.
Issue #2367.

Change-Id: I49042992f4462f35e48292e79a09fef779494faa
2020-03-11 18:52:16 +00:00
michellezhuo c82ff51d1f Add a presentationDelay config for HLS live
Closes #2373

Change-Id: I627bbd226ed9cab9bc476e2c2a3257d2e2dbc0e9
2020-03-11 18:41:15 +00:00
Theodore Abshire daa316643a Fix compiled release version of supportsChunkSize.
In the code for supportsChunkSize, we test to see if a given chunk
size is supported by array to string conversion by trying to perform an
operation on a Uint8Array of that size without throwing an error.
However, the result of that operation was only ever referenced inside an
assert. Because asserts are compiled out in release builds, the
result of that operation was not being used... and thus, the entire
call was being compiled out.
This changes the return value of the function to use the result of the
operation, thus preventing it from being compiled out.
This also adds a unit test that will detect this problem in the future.

Closes #2433

Change-Id: If3048531afc460beb16de0dda7f7fcbd5499fdaf
2020-03-11 18:17:31 +00:00
Joey Parrish 235e4e11ad Move next-segment tracking to SegmentIndex
As part of Period-flattening, I'm trying to reduce our dependence on
the "position" field of SegmentReference.  If it can be eliminated, we
can more easily concatenate Arrays of SegmentReferences without
modifying them.

SegmentIndex can now track the last reference you asked for and
iterate through the list of references.  This means we don't need the
"position" field of SegmentReference, which means we don't need to
know positions in advance or globally.  StreamingEngine will no longer
use position to request segments.

The old methods find(time):position and get(position):SegmentReference
have been replaced with seek(time), current(), and next(), all of
which return a SegmentReference and maintain an internal pointer to
the "current" reference.  Care has been taken to maintain that pointer
during the evict() and fit() operations.  Recent changes to merge()
made sure that the pointer does not need to change during that
operation.

All test updates are related to the SegmentIndex API change, not
changing expectations or behavior.

Issue #892 (refactor StreamingEngine)
Issue #1339 (period flattening)

Change-Id: I1682dcc2dd625c6e390711538e46d31e6eb6cea8
2020-03-11 18:14:14 +00:00
Joey Parrish 3cdb9c8e16 Simplify SegmentIndex merge
As part of Period-flattening, I'm trying to reduce our dependence on
the "position" field of SegmentReference.  If it can be eliminated, we
can more easily concatenate Arrays of SegmentReferences without
modifying them.

There has long been a comment at the top of SegmentIndex's merge
method stating that we only ever extend the references, but never
interleave them.  The code, however, is structured in such a way that
it could interleave them.  This could cause the offset of a given
SegmentReference in the Array to change, which would be counter to the
comment about only ever extending the list.

This change simplifies merge() so that it can only ever extend the
array of SegmentReferences.  This will guarantee that their offset
within the Array will not change during the merge operation.  This, in
turn, enables further SegmentIndex changes to move "next" segment
tracking out of StreamingEngine (where it is based on the "position"
field of SegmentReference) and into SegmentIndex (where it could be
based on offset into the Array of references).

It removes one test related to PR #838.  This test was about our
ability to update the position of the final segment in a list.  This
doesn't seem to make a lot of sense, and we're going to stop relying
on segment position anyway.

Issue #1339 (period-flattening)

Change-Id: I2067e2266cf2d02c0e6350d6b57d74f9ed1b27d3
2020-03-11 18:14:14 +00:00
Sandra Lokshina 30131c3d7c Add more ad UI tests, augment loc string for ad position.
Issue #2367.

Change-Id: I562ef9e6c6a84a4a113792b647a5c663bcd822bf
2020-03-11 16:47:31 +00:00
Sandra Lokshina 6adc977022 Add tests for ad UI (adUIContainer, skip ad button).
This change creates mocks and fakes for ad testing and adds
tests for the ad container and skip button. Skip button
tests found a bug - this CL also fixes it.

Issue #2367.

Change-Id: I36cb293f9611fbc8592bdc32e156f17a7a78e010
2020-03-09 16:33:10 +00:00
Tanya Gelahova d6de4e710d Add support of fontSize in percentages and cell resolution unit for TTML captions (#2442)
Closes #2403
2020-03-06 08:53:24 -08:00
michellezhuo 2223710ac9 Support multiple EXT-X-MAP tags
One playlist may contain multiple EXT-X-MAP tags, and each EXT-X-MAP tag
represents the initalization information for the segments after it,
until the next EXT-X-MAP tag or the end of the playlist.

Issue #1335
Closes #2397

Change-Id: Ibb0b4f5da6a48f0303d205cb6bd3abad278527fd
2020-03-04 18:03:00 +00:00
Joey Parrish 06a44fae8e Fix adaptation event tests in uncompiled mode
These tests failed an assertion because they did not respect the rules
for AbrManager.  In compiled mode, this went unnoticed because asserts
are removed in the compiled bundle.  But when running tests in
uncompiled mode, these would always fail the assertion and therefore
fail the test.

Change-Id: I44700d118f3f45ebcc955d9306deaca4815b902e
2020-03-03 14:42:48 -08:00
Tomohiro Matsuzawa (Tomo) 83e36006bb Fix the bug that UTCTiming is ignored even when autoCorrectDrift is off (#2412)
Closes #2411
2020-02-26 14:48:12 -08:00
Joey Parrish 28a5c421f3 Fix DRM test failures introduced by removal of deprecated features
Change-Id: Ic667a0487fa08460b9c3fb7a18176f2fcb068cc3
2020-02-25 15:20:30 -08:00
Jacob Trimble c49f24b31b Remove remaining deprecated features for v2.6.
Change-Id: I2199e3c960fe6319eb9ab342291dfd9a62d9090e
2020-02-24 15:57:05 -08:00
Joey Parrish 02b2b959fb Fix storage compatibility tests on legacy Edge
b/149646908

Change-Id: I224142beedfdc15cfb4631d44b23ea373210e751
2020-02-21 23:16:37 +00:00
Joey Parrish b95509aa73 Fix TextTrack integration tests on legacy Edge
b/149646908

Change-Id: Ic0c3b94f2660aab2539cf72720f06714a82e7ae2
2020-02-21 21:46:31 +00:00
Jacob Trimble bc45564721 Remove deprecated ability to pass factories to load.
Player.load and Storage.store used to accept the manifest parser factory
directly.  But now they should only accept the MIME type string.  This
removes the deprecated functionality in preparation for v2.6.

Change-Id: I1b4c5a4a9f0b6edbea909d18111ddc87a39da331
2020-02-20 23:44:51 +00:00
Jacob Trimble 3f63021a2f Avoid using "new" with factories.
Instead of having the "factories" use "new" to construct them, now they
will be plain functions.

Closes #1521

Change-Id: Ia6151ad679a78a5c6db128d43094c82add0af348
2020-02-19 09:57:51 -08:00
Jacob Trimble 9e975a2f6d Don't fire 'adaptation' event when not switching.
Closes #2392

Change-Id: Ib3af4fa465bc8502dfe751856eda1a27e038b304
2020-02-18 15:38:40 -08:00
Joey Parrish e07a965df2 Fix argument count on compiled default callback
This fixes the argument count on the compiled versions of our default
callbacks.  This makes sure we don't issue incorrect warnings about
the application's configured callbacks.

This was discovered in the compiled build of our own demo by observing
the warning logs about the wrong number of arguments in some of our
callbacks.

Change-Id: I401d54bdc706aee9a70fbf5db83fc5e7de5cb183
2020-02-18 18:00:52 +00:00
Álvaro Velad Galván dcf471d85c Calculate approximate segment size based on bandwidth (#2288) 2020-02-17 13:05:38 -08:00
Jacob Trimble c8043f3916 Allow configuring when to fetch prev segment.
We fetch the previous segment in Live streams to combat differences
between the manfiest times and the segment times.  Now this can be
configured so apps with correct manifests can avoid the extra segment
request.

Also, we'll update the buffering state when a segment appends so we
leave the buffering state sooner.

Issue #2291

Change-Id: Id12c8132dc11739e4c8d42cb1f08e6ae7da1a966
2020-02-15 01:52:05 +00:00
Joey Parrish b1e13fa658 Fix async tracks callback
PR #2387 introduced a bug. It awaited the track selection callback,
but that was done in a loop, the results of which were not awaited.
This would cause storage to continue before the complete list of
tracks was available.

Closes #2383

Change-Id: I18a429cf0f40b829020c520c622ffdae8b12622e
2020-02-14 15:13:03 -08:00
Joey Parrish 39eb6cfcbf Always log config errors
This makes the config-rejection logs always-on in compiled mode, to
help application developers notice problems during upgrade.

Found while fixing #2383

Change-Id: I131a1bf8197da394a743e9a121348178d38e5948
2020-02-14 15:13:03 -08:00
Joey Parrish e82b13b311 Fix acceptance of async functions in configuration
The config merging code was rejecting async functions, because the
.constructor field of a function is the "Function" constructor, but
the .constructor field of an async function is the "AsyncFunction"
constructor (not exposed as a global).  This led to the async function
being rejected because it was misdetected as a different type of
"object" than the default value.

The fix is to exclude functions from this constructor-based
type-checking.

Note that the compiler will turn async default values into synchronous
functions in the compiled build, so an async default will appear as a
synchronous function in the compiled build and an async function in
the uncompiled demo.

A synchronous function from the app will always be okay, even if the
library expects async, because "await" will still work.  But if the
library expects a synchronous function, the app should not supply an
async function, because that will return a Promise instead of the
expected type.

This adds a test to show that it is okay to pass a synchronous
function to an async config field, which is important for backward
compatibility as we make trackSelectionCallback async (#2383).
However, because the compiler causes us to lose the native async-ness
of our default values, we can't reject async for sync fields or write
a test for that scenario.

Found while fixing #2383

Change-Id: I62891441ce75bfc887ea13c24212a2ee78f90af4
2020-02-14 15:13:03 -08:00
Jacob Trimble 702dc360e0 Fix destroying UI in some tests.
These tests were creating two UI instances in the same container.  This
caused the second one to replace the first without destroying the first.
This caused test contamination since there could be extra CastProxy
instances.  This wouldn't always happen since the no-longer-referenced
objects would be garbage-collected eventually; but depending on timing,
the CastSender tests might fail.

Change-Id: I7f4a008f56224ee33bee15c5e0370a225a5fc033
2020-02-14 23:11:15 +00:00
Joey Parrish 0406bc0da9 Fix duplicate stream storage in offline content
Since v2.5.0, we have been storing duplicate streams for multi-period
offline content.  For example, instead of storing one stream per
period, a 3-period manifest would have 3 streams per period.  The
segment data would also be duplicated, leading to 3x the storage used
for a 3-period manifest.

This fixes the error for future content and ensures that the correct
number of variants are still shown when this broken content is loaded.

This change also tweaks the frameRate field in the existing database
dumps, which for some reason contained the wrong value for the
existing v1-v3 dumps.  This must have been a bug we fixed already.  To
make the expected results consistent across dumps, the frameRate value
in the old dumps has been updated.

Closes #2389

Change-Id: Ibf7db7543f25ad23cecd12efad1eb039630e381c
2020-02-14 19:59:12 +00:00
Joey Parrish 285156dbf5 Add tests for offline content conversion
This adds a test case for all offline database formats to show that
they correctly convert to the current internal manifest format.

Because the database dumps were made with a buggy version of Shaka
Player, the MIME types in the various periods were not consistent.
This corrects the MIME types and codecs in the database dumps to
video/webm and vp9.

Change-Id: I0cf7ddead8352030e87474de6fed15a3ac1bb553
2020-02-13 20:30:28 +00:00
Joey Parrish d16865b304 Add tests for v2 and v3 offline content
Before this, we only had tests in place for loading and converting the
v1 format for offline storage.  We had database dumps already for v2
and v3, but no tests exercising them.  This adds some basic tests and
fixes a bug in the loading of expiration times for v2 and v3,
equivalent to what we already had for v1.

Note that here, v1, v2, and v3 do not refer to major versions of Shaka
Player.  Instead, they refer to IndexedDB storage formats used in v2.x
versions of Shaka Player.

Change-Id: If32d1f1131b935eb191101463c4152317e711c5c
2020-02-13 20:30:28 +00:00
Jacob Trimble 78c13fe5cb Add additional logs for buffering and state change.
Issue #2291

Change-Id: Iffb80f9ae1844d2fe5a441bd810faa328f66e357
2020-02-12 23:00:21 +00:00
michellezhuo cfe1f89171 Add playback speed selection to UI
Closes #2362
Closes #1676

Change-Id: I10184dccab301be7382940e35e36d66dc7a5e2ad
2020-02-12 20:24:03 +00:00
Theodore Abshire 9cbbc40aaf Added trick play controls option to the demo.
Change-Id: Iaca03a5f4c917ee8d60224ba2c6fc65ccef130a1
2020-02-11 19:56:42 +00:00
michellezhuo bb420a2ba6 Remove test for writing-mode
Since IE 11 only supports this field partially and only with deprecated
css values, do not test it for now. We'll add it back once we end
support for IE 11.

Issue #2339
https://buganizer.corp.google.com/issues/146050219

Change-Id: I9458ea830027a312e5237c406de3ed2ecba62918
2020-02-11 06:42:59 +00:00