Commit Graph

1330 Commits

Author SHA1 Message Date
Jacob Trimble 450d8a60c4 Fix check for captions in appendBuffer.
An empty list is still truthy, so the if statement should check for a
non-empty list instead.  This ensures we don't try to append captions
when we play audio-only content.

Fixes #2187

Change-Id: I589a5508878ab28ad1ac69211f331ea829fa8b28
2019-10-28 20:52:09 +00:00
Morten Vestergaard Hansen deed10f37d Ignore MIME parameters in Content-Type check (#2215)
Fixes #1946
2019-10-28 11:28:51 -07:00
Álvaro Velad Galván 585c725d09 Allow disable the audio parsing/decoding/.. in DASH/HLS with a config (#2196)
Resolves #2195
2019-10-22 15:00:36 +02:00
Sandra Lokshina 7afac89bc2 Restructure AdManager to be owned by Player, not UI.
This will allow Ad functionality to be available for apps
with custom UI.

Change-Id: I3911cb6d764b7aef94166b5f6de3a0a7fa8bb8d9
2019-10-18 18:42:13 +00:00
Shaka Player BuildBot 3f712c2652 Merge remote-tracking branch 'github/master' 2019-10-17 14:54:24 -07:00
Theodore Abshire db9a0eebec Throw if ttml parsing outputs <parsererror>.
Previously, if no XML was produced, or if it failed to have a <tt> element,
we assumed that parsing had failed. This caught some failures, but not
every possible failure; there are some partial failures that still return
valid XML. These sorts of errors are signaled by the output containing a
<parsererror> tag; this CL makes us also return an error in this case.
It also corrects the documentation for XML parsing errors, which was
incorrect; it seems that we had been confusing INVALID_XML and
DASH_INVALID_XML for documentation.

Issue #2157

Change-Id: I79716c9d2ff90ed9672eef8e54dd4019d8ca109b
2019-10-17 21:53:58 +00:00
Álvaro Velad Galván 5eaca0aebd Offline license support for manifests without inline init data (#2164)
Closes #1531
2019-10-17 14:53:34 -07:00
Theodore Abshire 9f7652e7ad Modify ttml parser to handle decimal percents.
Something I noticed while working on issue #2157; their text tracks
contained percent values with decimals in them (for example "4.17%"),
which was something the percentage-parsing regex we were using did
not handle.

Change-Id: I90f4a223f0a335057a92ae606e7298eefaa0b4aa
2019-10-11 19:59:01 +00:00
michellezhuo d520324f57 [Fix] Check initDataTransform with default implementation
Closes #2136

Change-Id: I6c98ceb48d21a26b2a1c4bc7516ee9d7279728bf
2019-10-10 14:27:24 -07:00
Satheesh Velmurugan 22a0d3e85c Include event ID in findSimilarRegion_() check (#2175)
Include event ID in findSimilarRegion_() check so that events with same
presentationTime and duration but different ID are treated as separate events.

Closes #2077
2019-10-09 09:32:59 -07:00
michellezhuo 1ada5e7574 [Hls] Move MPEG TS Timestamp rollover to Vtt Text Parser
Change-Id: Id840f8201d9d31f00fa38c88f632ff9e515e07a6
2019-10-08 23:39:52 +00:00
Joey Parrish 9e92167910 Treat URL schemes as case-insensitive
According to RFC 3986, URL schemes should be case-insensitive.  Our
scheme plugin map is registered with exclusively-lowercase scheme
names, so we should convert the input scheme to lowercase before
looking up the plugin.

Closes #2173

Change-Id: I78218c18d3df154aabd101a9ef5fd3156d0c57a8
2019-10-04 10:32:58 -07:00
michellezhuo ae6e67e136 [Hls] Add unit test for hls getStartTime_() optimization
Change-Id: I85177bc6f7af9479bcbb524030eea7ae81deb7ec
2019-10-02 10:49:40 -07:00
Jacob Trimble 495e215bee Don't fire stall handler multiple times.
When we are in the "same" stall, we shouldn't handle the stall multiple
times.  If we do, the video will step forward slowly over time, which
isn't desirable; especially on slower platforms where a seek would
restart the time it takes to start playing again.

Change-Id: I11a1811f9ecf754484d3530f4dc047cf95b007a4
2019-10-01 10:10:33 -07:00
michellezhuo 9d66e3bb09 [Hls] Avoid duplicate calls to get segment start time for VOD
For VOD, the first segment of every Media Playlist in every Variant
Stream must start at the same media timestamp. Thus, we can get the
start time once and store the value, and all the streams can use the
value directly. For live, we assume for the same.
This change reduces calling getStartTime_() from 15 times to once for
Angel One, and also fixes the text segment timestamp issue.
Also removed associated methods that no longer needed.

Closes #1558
Closes #1563

Change-Id: I0e95ab93ea2b13758128f11019b262bc53dbcd38
2019-09-30 15:43:57 -07:00
Jacob Trimble c014d445a4 Fix Period transitions with embedded captions.
We would incorrectly initialize the embedded captions multiple times
during a Period transition, which caused duplicate cues to be given to
the displayer.  We also wouldn't handle the case when switching between
embedded captions and external text during a Period transition.  This
fixes both cases and adds tests for them.

This also avoids passing an empty cue list to the displayer.

Fixes #2076

Change-Id: I89add3eb86ad8d93644bba14eabd11f98d57bc5e
2019-09-23 22:54:00 +00:00
Theodore Abshire 54a9f72cd2 Added more mock functions to the demo tests.
The demo tests previously had fake versions of some functions and
classes from third-party libraries. However, it turns out there were
a few things that were not being provided.
Specifically, this adds fakes for what we use of dialogPolyfill,
MDL's componentHandler, and the methods on Awesomplete.

b/140930726

Change-Id: I4f283d48850b4fe127976840b3f9037a089b1274
2019-09-12 18:54:27 +00:00
Joey Parrish 9e3745f953 Fix suppression of ClearKey errors with src=
Because src= content lacks codec information, ClearKey setup fails.
However, because there was no DrmInfo prior to the ClearKey settings
being applied, the variable hadDrmInfo was false, which led to a
suppression of the resulting DRM error.

Instead, we should count ClearKey settings toward hadDrmInfo.  So now,
ClearKey settings are applied before we calculate hadDrmInfo.

Closes #2139

Change-Id: I14d5bfe63fd2ce1a461ae7ef8c2fee7f42bb1b3e
2019-09-12 10:40:19 -07:00
Jacob Trimble cbcfba031d Avoid having two top-level describe() blocks.
This moves some of the tests around to have each file use only one
top-level describe() block.  This removes some Player integration tests
that are already tested elsewhere.

There are two cases where there are two top-level describe() blocks
left: the segment reference and http plugin tests.

Change-Id: Iab7365919cfba739d4710184f079b6d2638192b6
2019-09-12 15:50:43 +00:00
Theodore Abshire 83ed3559c1 Moved the config field checks into actual tests.
Also added a cleanup procedure for the demo, for use in tests.

Change-Id: Ic26a8c7b012e66cdd88c09eb8d478ceeb6743ab4
2019-09-11 22:11:09 +00:00
Jacob Trimble fa32335f6e Make new UI tests faster.
The event was being raised synchronously, so it wasn't getting caught
by the waiter.  This caused each test to take 5 seconds while it waits
for the timeout.  Now the tests take <100ms.

Change-Id: Ia62423a22cff6eb6098fded43b914ae379b07a88
2019-09-11 21:42:20 +00:00
fadomire 2c0d824a1c Fix support for empty TTML data (#1960)
When using DOMParser parseFromString with an empty string, it returns an errored XML document.  The next part of the code is then executed and throws an unnecessary error.

This adds a special case for an empty string.
2019-09-11 14:35:58 -07:00
Jacob Trimble dedd96530e Don't generate compiled assets in some tests.
These tests don't use the compiled assets, and this line doesn't even
build the assets for the compiled library, it uses the uncompiled
library.

Change-Id: Iff5c74c7ef258a18c29a3011266ce459f9e5cf75
2019-09-10 21:53:21 +00:00
Jacob Trimble 0e1e1a0491 Fix multi-Period handling of key statuses.
Before we would only update the current Period when we got a key status
change; this caused us to fail playback for the second Period if the
streams were restricted.  Now we update all the Periods.

Closes #2135

Change-Id: I2238a90c1d367a1d898ec26e4318852cd26da4b7
2019-09-10 21:39:19 +00:00
Jacob Trimble 7764ff609f Don't put space before '=' in arg comment.
This standardizes how we handle the spacing in argument comments.  The
other way is much more common, so we standardized on that.  This add a
new linter rule to catch and automatically fix those issues.

Change-Id: I8ea54c47ae4d34cf8e1646e56c6ed8142b42afbe
2019-09-06 13:49:10 -07:00
Jacob Trimble c0e7a9b62a Use callbacks for ManifestGenerator.
This allows us to avoid suppressing the indentation rules and ensures
we have correct indentation.  It also makes it harder to make mistakes
since the variables are only accessible within the callback and you
can't accidentally contaminate another object with an incorrect call.

Closes #1692

Change-Id: Ic38b5cd57a2587dfc8c115ba782656c15565b655
2019-09-04 22:51:12 +00:00
Jacob Trimble 87cf2df70b Fix transmuxer test with latest mux.js.
mux.js version 5.2.0 broke our test since we were expecting a non-empty
segment to be returned.  Since it should work fine if we append an
empty MP4 segment, we should just allow it.  This changes the test to
not expect any specific value for the buffer.

Fixes: 140235880
Change-Id: I18ed4347c05553e7abcb967beb684d8ad1a2a187
2019-08-29 18:34:00 +00:00
Sandra Lokshina 827e5d813f Support setting source through HTML
Issue #2088.

Change-Id: Ib0ee45e4b5e6b0f6bcdd8b76f26ddd0cfa972a03
2019-08-28 18:34:51 +00:00
Jacob Trimble 50938a02a4 Remove throws directives.
These are intermittently used and cannot be verified.  Most of our
methods can throw a shaka.util.Error, so having it doesn't really add
anything.  Plus, if we change a function to throw, we'd need to update
all their callers to ensure they have an accurate description of what
they throw; otherwise we can't trust the directive.

Change-Id: I520bd0fc4c33443e967bf5b103ca5aa9e3274884
2019-08-28 17:00:04 +00:00
Jacob Trimble 17684c6c35 Refactor "try" blocks in MediaSourceEngine.
- Avoid nested try block in enqueueBlockingOperation_.
- Simplify running next operation.
  - Ensure QuotaExceeded error is handled correctly.
- Use "throw" instead of Promise.reject.

Change-Id: I0d9d95290baafedd6bbadc158ba826836c9f7d10
2019-08-28 16:54:36 +00:00
Álvaro Velad Galván 5a5864c653 Get PlayReady PSSH from <mspr:pro> in DASH (#2106)
Creates "pssh" init data based on the <mspr:pro> element in the DASH manifest.

Closes #2058
2019-08-23 08:46:56 -07:00
Jacob Trimble bf5547b78c Refactor ArrayBuffer usage in tests.
Change-Id: I27e898a7d3c2d706e265abfc4b9bde88b67f3256
2019-08-21 20:44:36 +00:00
Jacob Trimble 887f2e614d Make Uint8ArrayUtils accept BufferSource.
Change-Id: Ia22b4535f4a6cbc156022299d732b27602c677d3
2019-08-21 20:41:45 +00:00
Jacob Trimble 18b59c5294 Disallow using new Uint8Array with BufferSource.
Using "new Uint8Array" with a TypedArray creates a copy of the buffer;
this is unnecessarily expensive for large buffers.  This adds a rule
to disallow using it in favor of a new utility that correctly creates
a new "view" on the same buffer.

Note it is fine to pass an ArrayBuffer to "new Uint8Array" and it won't
copy; but there there are many cases where the type is BufferSource,
so it could be a TypedArray.  Unfortunately, there are many other cases
where we explicitly pass an ArrayBuffer; but the compiler rules don't
allow us to whitelist this case (since ArrayBuffer is part of
BufferSource).

Change-Id: I58696a85a9cbcc188c0b16919c9eeb63e56edca1
2019-08-21 20:40:59 +00:00
Jacob Trimble e2103d236a Fix resolution test on Chromecast.
We filter out tracks that aren't supported on the platform.  For
Chromecast, we filter out high resolution tracks and 6-channel audio
(MediaSource reports no support).  This caused our UI resolution test
to fail since the tracks no longer existed.

Change-Id: Ib56ab1ade09a491011d499587b355bcd3a5183da
Fixes: 139733198
2019-08-20 22:51:53 +00:00
Jacob Trimble ac4fdfd0cd Make the reader types more permissive of inputs.
Now the EbmlParser and DataViewReader types can accept BufferSource
objects to avoid the caller having to convert it at each callsite.

Change-Id: I527fbc638485214bfe976d7da89b79b6098033a8
2019-08-20 22:08:27 +00:00
Jacob Trimble a2bcf7278d Move some utilities to BufferUtils.
Change-Id: Ifb3c4348cc912640b99ff53f7cac59a63480c68e
2019-08-20 22:07:35 +00:00
Jacob Trimble 596c80a949 Refactor handling of ArrayBuffer.
This changes the network API to use BufferSource instead of ArrayBuffer,
which allows plugins to return a "view" on a buffer instead of the
whole buffer.  This also adds some utilities for changing between
views and buffers.

Lastly this forbids the use of the "buffer" property of TypedArrays
since it doesn't work with partial "views".  This audits and fixes the
usages of the "buffer" property to ensure correct usage.

It should be noted that both MSE and EME accept a BufferSource as input,
so we don't need to convert a "view" into an ArrayBuffer before passing
to it.

Change-Id: Iaa417773f8ce5304424e43c7372ce10ebf540d2a
2019-08-20 20:17:33 +00:00
Jacob Trimble 4fdf8f7a1c Allow running tests without Babel.
This greatly speeds up startup time when running tests on a modern
browser.  This change also fixes a bug in one of the tests that only
worked with Babel running.

Change-Id: I1493ef30388c5043dcdf8350bec7817ab5d28d55
2019-08-20 20:10:02 +00:00
Jacob Trimble f9a031b086 Fix high playback rate test.
This tests wasn't working properly before since the 'onBuffering'
callback wasn't given to StreamingEngine.  This test was broken on
Edge, but at some point got fixed (or Edge fixed it's behavior).

Fixes #1743

Change-Id: I0af48207f5e8ad1c2e5007967a093f243e1837c9
2019-08-19 17:44:22 +00:00
Jacob Trimble d44430e66e Fix duplicate resolution entries in UI menu.
Closes #2085

Change-Id: Idfdcd0cf89f43bd6a624afbb88e504d7653c9ae3
2019-08-16 18:32:28 +00:00
Joey Parrish f4536acb7e Fix missing tracks, race on time during startup
During startup, there was a race between the video element's ready
state and seeking to the requested start position.  If the video
became ready before the seek to the start position, there could
briefly be 0 tracks.  Reproducing this required a first period start
> 0 and a start position > 0, such that a lookup of the "current"
period during this brief window would return null.

The problem was more likely to be seen on Chromecast, where the time
between load() and the completion of a seek was much larger than on
desktops.

The bug was caused by Playhead, which both seeks to the start position
and manages the concept of "current time", returning the start
position during startup and the video element's position thereafter.

This fixes the race, making sure that startup is not considered
complete by Playhead until the initial seek is over.  This adds an
appropriate regression test and simulated content that can reproduce
the conditions in the original bug report.

Fixes b/138941217
Fixes #2045

Change-Id: Ie8a57283468d88697619349a29e37a804586e5ef
2019-08-14 18:01:56 +00:00
Jacob Trimble d7fc19ab31 Allow filtering out failed HLS text tracks.
This adds a separate configuration value for this because (a) the HLS
parser can't access the streaming configuration and (b) this behavior
is different in that the streams are removed instead of just not playing
them.

Closes #2065

Change-Id: Ic9b1e0d40b161cd4ba0eb6d7c922882112034626
2019-08-12 18:16:28 +00:00
Jacob Trimble d1498f4968 Don't add Control event listeners multiple times.
Because configure() is called multiple times, we used to add some of
the event handlers multiple times.  For fullscreen, this caused us to
try to toggle fullscreen multiple times.  This changes to only add the
main event listeners one time and the DOM-specific ones have been moved
to be added in the configure() call.

This also moves the fullscreen toggle to the try so we can propagate
any errors from it.  Lastly, this adds an "error" listener to the
tests to fail the test.

Closes #2054
Issue #2089

Change-Id: Ic78417ce52cae1c53133b5a4217004bb91ebcc4f
2019-08-12 18:14:59 +00:00
michellezhuo 1d417ff5ed HLS Refactor: Flatten createPeriod_() logic
Our previous approach:
For every variant tag, find the associated media tags(with the same
group id), create stream info for each media tag, and then create stream
info for variant tag based on that, and create variants.
This approach has duplicate calls for the media tags with the same group
id to create stream infos.

New approach:
1. Get codecs from variant tags
2. Create stream info from each media tag (with the codecs from variant
tags)
3. Create stream info for each variant tag, and then create variants.
This creates stream info for each media tag once, and avoids duplicate
calls to guess the codecs.

Issue #1558
Closes #2066

Change-Id: Icdf3133b1b15d1baf60624ff449e0a61fdb78d8a
2019-08-07 19:28:32 +00:00
Jacob Trimble 438d599804 Parse Accessibility tag into text "kind".
Closes #2060

Change-Id: I916bbaf3357e9cdfbcfbfbafbd6dfc99890d7ebd
2019-08-05 10:27:59 -07:00
Joey Parrish 625938e2f9 Revert offline PSSH support for manifest that are missing inline init data
This reverts commit 6e5a0797de, #2042.

The PR as it landed broke some test cases and functionality for storing persistent licenses, and it doesn't seem to work even for its intended use case.
2019-08-02 16:56:24 -07:00
Joey Parrish 7fe97b841b Move fields to SegmentReference
To prepare for flattening out the manifest structure to remove
periods, this change moves initSegmentReference and
presentationTimeOffset fields into the SegmentReference object.  This
way, the segments on either side of a period transition or HLS
discontinuity can have different offsets or init segments, eventually
allowing us to create a single array of SegmentReferences for
multi-period content.

Issue #1339

Change-Id: Ic7eff0483789644881247ecf8044c5fb6a48f0e6
2019-08-01 11:04:36 -07:00
michellezhuo 524652f949 Fix hls live test
The variant tag's AUDIO attribute value should match the media tag's group-id value.

Change-Id: Ib942425ea1bdf37b4ff5f5a69158fc7ef5368b45
2019-07-30 13:03:22 -07:00
Ante Wall 6e5a0797de feature: Offline PSSH support for manifest that are missing inline init data (#2042)
* fix: Reference issue with SegmentReference createUris

* test: Added Segment GetUris Test for timeline

* feat: Get PSSH from segements if not initdata exists

* feat: Get PSSH from segements if not initdata exists

* fix: JSDoc comments and moved drmEngine update to storage

* fix: Remove comments

* fix: Remove unused import

* fix: Lint erros and dedup initData code

* fix: remove no init data test and add check for use persistent license
2019-07-26 11:01:05 -07:00