Commit Graph

165 Commits

Author SHA1 Message Date
Jacob Trimble e966945f61 Convert DASH tests to ES6.
Issue #1157

Change-Id: Iee2c8daede491e832bc2fd790a6d6b15fb019619
2019-05-30 21:52:13 +00:00
Jacob Trimble f130dffcef Enable eslint indentation rule.
This is a fully automated change.  The linter will fail because the
extra indentation caused line-length errors.  These won't be fixed
automatically.  They are fixed in a follow-up to make this one fully
automated.

Change-Id: I4d8cf9c998985add2bcd24a81c8d65495668c4f3
2019-05-13 22:31:09 +00:00
Jacob Trimble 0dd64074b9 Only allow one statement per line.
With the new style rule, we cannot have two statements on the same line.
So we can no longer have an "if" on a single line and we cannot have
an arrow function with a body on the same line as when it is used.
This is mostly a manual change.

Change-Id: I2285202dd5ecbad764308bc725e6d317ff2ee7f0
2019-05-13 22:11:50 +00:00
Jacob Trimble 984bb6f340 Fix ManifestGenerator indentation.
We use custom indentation for the ManifestGenerator to make the repeated
calls easier to read.  This disables the coming linter rule for these
blocks of code.  This also goes through and unifies the formatting.  The
indentation should be 4 spaces from the left side.

Change-Id: I687e69cea39bded1e9e06bffdcc888970b383fa2
2019-05-13 22:11:37 +00:00
Jacob Trimble f225c047f6 Reorder eslint rules and add some more.
This reorders the rules so they mostly are ordered the same as the
eslint documentation.  The exception is the few at the top, most of
which should be removed.  This also removes some rules that appear in
the recommended or the Google set.  Lastly this adds some more rules:

- Require parenthesis when using "new".
- Disallow confusing regex (e.g. /=/).
- Disallow some confusing coercions (e.g. +foo).
- Disallow some Unicode characters in a regex.
- Disallow using "async" in a Promise constructor.

Change-Id: I597b472bdaee5b4cb92354f057e7ae6aeb96eefa
2019-05-09 22:14:18 +00:00
Jacob Trimble 47daf49f31 Use arrow functions for callbacks.
This is an automated change to convert use of "function" functions
to arrow functions.  This doesn't change all uses of bind() that
could be converted.  This also doesn't remove all "function" functions.

Change-Id: I40ac7d086bcef947a1be083359c8fd1d4499a9c3
2019-05-09 16:40:46 +00:00
Jacob Trimble c81389741f Prefer const over let.
A coming update to the Google eslint config will require using "const"
over "let".  This makes that one change to isolate the big changes.

Change-Id: I7d0974c3ae15c53cc45a6b07bf9f6586e2d34aca
2019-05-08 09:22:10 -07:00
Joey Parrish c0c203cf2d Fix compiler errors found by a newer compiler
Change-Id: I83d81bcdc955331dc7afcc25c45802e77b7b7c02
2019-05-03 18:43:35 +00:00
Álvaro Velad Galván 65e9957647 Make manifest redirections sticky for updates (#1880)
Closes #1367
2019-04-15 12:15:44 -07:00
Joey Parrish 02350fbe66 Fix config-based clock sync for IPR content
The configured clock sync URI was only being used for true live
streams, but there are cases where it is needed for in-progress
recordings, as well.  This came up while working with a partner on
issues with CEA caption support.

Related to b/70902665

Change-Id: Ie7199dec3177a7ed014d9d0d9aaeb9f1bb1dbeac
2019-02-13 02:45:16 +00:00
Jacob Trimble c3ce160217 Consolidate default configs in tests.
Instead of duplicating the default configuration values in each test,
this now uses the default configuration methods.

Change-Id: Ifd2ab349db7903a2acb0d06fed4bd0ccd5050b35
2018-12-27 18:00:55 +00:00
Tyler Daines 3c8241f3c7 Add license url parsing (#1644)
This adds parsing license URLs to the DASH parser so the URL can be embedded in the manifest.

Fixes #484
2018-12-13 10:58:27 -08:00
Michelle Zhuo fd91f6ab73 Fix relative location urls
Fixes #1668

Change-Id: Ib9e1a19254f1829795bd69cc930d21f33e136980
2018-12-07 20:01:10 +00:00
Michelle Zhuo b9a806d071 Add test cases for CEA closed captions
Issue #1404

Change-Id: I35e679ef985ac5cef1f8d8673192845cae29b114
2018-11-08 15:13:51 -08:00
Michelle Zhuo f2b9e3fdf1 Add support for CEA with no channel and language info for Dash
When the dash content has CEA closed captions signal but no detail
information about channel number and language, we show the default
caption information.

Issue #1404

Change-Id: Ie6ca77739a043d24832efc5a28d4ba708dc4b17f
2018-11-08 22:19:01 +00:00
Sandra Lokshina 34408b9c26 Notify min segment start time when creating stream.
Fixes #1601

Change-Id: I132f05a23129fca944e955cbf8a347e735724b37
2018-11-07 15:11:33 -08:00
Michelle Zhuo 19a38ed6b5 CEA closed captions for Dash
Adding support for CEA closed captions embedded in video streams for
Dash.
1. Dash parser reads and parses closed captions' channel and language
information.
2. Player creates text streams for the closed captions.
3. Media Source Engine calls mux.js Caption Parser API to get the closed
captions embedded in the video streams.
4. Text Engine stores the closed captions, and text displayer shows the
captions.

TODO:
1. Add test cases, will send out another CL.
2. Change closed captions support for hls to the similar way we handle
dash closed captions, will send out another CL.
3. Handle dash content that's missing language indication from the manifest.

Issue: #1404
Change-Id: Ibae8f69623c13561415ec860107d7f5bc86e19e9
2018-11-06 09:53:18 -08:00
Jacob Trimble 140105b0a2 Optimize processXlinks.
- Only traverse children once.
- Avoid traversing into SegmentTimeline, which is usually large and
  won't contain xlinks.

Issue #1640

Change-Id: I8a7a05d580740f9a9953b0a8aec89a06cc7e33f2
2018-10-24 11:38:36 -07:00
fadomire 99ebc693f2 Add config field to ignore manifest minBufferTime #1547 (#1581)
Add the config field manifest.dash.ignoreMinBufferTime, which will default to false. If true, the DASH parser will ignore minBufferTime in the manifest, such that streaming.rebufferingGoal is the only factor in play.

Closes #1547
2018-09-21 12:51:33 -07:00
Michelle Zhuo 5de57c0725 Revert "Change closed captions to an array"
This reverts commit 59920fa80b.
Issue #1404

Change-Id: I90cf8a274949c15779f0193783076ab687fcb9fb
2018-09-12 13:15:49 -07:00
Michelle Zhuo 59920fa80b Change closed captions to an array
Changed the ClosedCaptions field in Stream from an object to an
array of ClosedCaption objects, so that it can be iterated through
and accessed easier.

Issue: #1404.
Change-Id: I67980cf4d5b5746785ba29f95718970fe89056f4
2018-08-31 17:10:36 -07:00
Joey Parrish ca3119dfba Correct segment timestamps in PresentationTimeline
Before, segment timestamps were used in PresentationTimeline without
regard for the period start.  This means they were not truly relative
to the presentation, but to the period.

The "isFirstPeriod" argument was also broken.  It was meant to be true
for segments from the first period *ever*, but was passed true for the
first period *in the latest manifest update*.  So data calculated from
that was bogus for live streams.

Now, notifySegments() is supplied with a period start time, so that
segment references can be combined with the period start to give
presentation timestamps.  This fixes a major issue with the original
fix for #999.

Closes #999

Change-Id: Id0fe450f3ce4f90a2387d7103c75eb88f0c69c72
2018-08-20 19:10:02 +00:00
Joey Parrish a9691991fb Fix errors from bad merge
A recent change (I3c58b6043f7fe294dd642bdada8d2451caec9b55) was
broken after rebase.  This fixes the compiler and test errors.

Change-Id: I570968893659a9dbfc45bfb7c0cea54e7e461f2c
2018-08-17 15:42:25 -07:00
Michelle Zhuo 5ef31d4bab Add closedCaptions field to stream
Dash and Hls manifests have tags and values to indicate that the content
may have CEA608/708 closed captions embedded in the video content.
Adding a closedCaptions field in Stream to represent that, and adding
parsing closed captions tag for DASH parser.

Reference:
HLS: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.4.2
DASH: https://dashif.org/wp-content/uploads/2018/04/DASH-IF-IOP-v4.2-clean.pdf

Issue: #1404.

Change-Id: I3c58b6043f7fe294dd642bdada8d2451caec9b55
2018-08-17 21:20:09 +00:00
Jacob Trimble 6c49ddcfd1 Restore addPartialStream method.
This method was removed during the Variants refactoring.  This method
uses jasmine's asymmetric matchers to only match some of the fields.
This is important for tests so they only test the relevant fields.

This also removes implicit reuse of stream IDs.  Stream IDs must be
unique and there is a new method for cases where the intent is to
use duplicate streams.

Change-Id: I185df5f0beb018169ff537abb952ee4ebbf49be6
2018-08-16 22:51:59 +00:00
Aaron Vaage 376c5001c3 Correct FakeNetworkingEngine Missed Call
It looks like a rebase caused a function change to get skipped.
This change updates the function call.

Change-Id: Ibcf7df2eb7da6935cf4d179cadee8b35a15b15ba
2018-08-09 15:40:29 -07:00
Aaron Vaage 78142719eb Make FakeNetworkingEngine Functions Similar
Went through all the functions in FakeNetworkingEngine used to
register responses and made them all follow the same language.

Change-Id: I0f197254fa40e1d97985a3070b3cda3bbff70df2
2018-08-09 21:17:23 +00:00
Joey Parrish 2aacdd25c9 Expose DASH Representation IDs in new field
The DASH parser will now expose Representation IDs via new fields in
the Stream and Track objects.  The "id" field will continue to be a
unique, auto-generated numerical ID, and will be supplemented by a
nullable string containing whatever was originally in the manifest.

The HLS parser will now expose the NAME attribute in the originalId
field as well.

Bug: 112087288

Change-Id: I6b8107d27780fb97ab18de767f7abdc6c7110fe7
2018-08-09 17:08:42 +00:00
Joey Parrish 7a1c662b8a Tolerate drift in DASH live streams
This calculates the DASH live edge from explicit segment descriptions
when we have them.  The net effect is that availabilityStartTime will
only be used with SegmentTemplate+duration, in which we have no
explicit segment times.

With this, a DASH live stream experiencing encoder drift can still be
played so long as we know the segment times.  This makes playback of
DASH live streams work more like HLS live streams.

Please note that DASH live streams using SegmentTemplate+duration may
still suffer from encoder drift.

This change also:
  - Avoids DASH clock sync when availabilityStartTime is not used,
    which should reduce startup latency
  - Removes the simulation of a presentation start time for HLS live
  - Renames some variables and improves comments for clarity
  - Fixes some brittle tests that made bad assumptions or instrumented
    the wrong methods
  - Adds new tests that show the new behavior in PresentationTimeline

Closes #999

Change-Id: I21d7f3ccc81c9d9e218857a9b41882a7609ca36a
2018-08-07 18:34:16 +00:00
Joey Parrish ecd27fbf45 Move availabilityWindowOverride to manifest parsers
This reverts the implementation to an earlier draft state.  During
review of the first version, I recommended moving the implementation
to Player so that it would be independent of the manifest parsers.
That was bad advice on my part, because this overlooked updates made
by the parsers when live manifests are updated later.

Closes #1177
Closes #1307

Change-Id: I4611e00824dead83c6467da04a2a11afa892ace7
2018-07-20 12:43:49 -07:00
Theodore Abshire b37a450aed Add availabilityWindowOverride configuration.
This config lets you override the availability window of a live stream.
It is in config.manifest, and passed along on start.
This will let users configure the parser so that they can seek with HLS
live streams, for example.

Closes #1177
Closes #1307

Change-Id: Icd3c1d81c6b52ebdbb72137df42fc91cd73a0207
2018-07-16 17:13:53 +00:00
Patrick Cruikshank e312c3a40b Add new request type TIMING for clock sync requests (#1489)
Fixes #1488
2018-07-16 09:38:52 -07:00
Jacob Trimble 59355d3ce4 Don't change start time in SegmentIndex.fit().
Since we have gap jumping, we don't need to worry about a gap at the
beginning of the segment index.  By changing the start time of the
first segment, it makes merging complicated since the pre-fit and
post-fit times are different.  This difference can cause duplicate
entries in the index.

Issue #1464
Closes #1486

Change-Id: Ib3521e186cd8e256366a3c3e922e0764bd58bbd9
2018-07-10 22:33:06 +00:00
Joey Parrish fd0449d8f7 Re-enable some disabled style rules
This re-enables the following style rules:
  - "block-spacing"
  - "brace-style"
  - "comma-dangle"
  - "comma-spacing"
  - "new-cap"
  - "no-multi-spaces"
  - "no-multiple-empty-lines"
  - "one-var"
  - "padded-blocks"
  - "prefer-rest-params"

Change-Id: I15d616e8d5b88b273ded6128b4f9ad86bdb26bd1
2018-07-09 19:44:56 +00:00
Joey Parrish 64d72fe08c Skip text AdaptationSets with no segment info
See also google/shaka-packager#422

Closes #1484

Change-Id: I293468a39918a4a8487d15ec70b365eec3dd1ebc
2018-07-03 18:27:14 +00:00
Jacob Trimble 759eef9685 Change goo.gl links to bit.ly.
https://goo.gl is being turned-down, so we can't use it for new URLS.
So we have consistent short links, this converts them to be
https://bit.ly.

Change-Id: I07a86cba807b67157664893341f648023918d0de
2018-06-22 20:20:00 +00:00
Joey Parrish 95a55c7240 Avoid clearkey w/ DASH mp4protection scheme
When a DASH manifest has a ContentProtection element with the generic
"mp4protection" scheme, no particular key systems are specified.  When
this happens, we assume that any of the well-known key systems could
work.

Since a recent change (Ib74b0b7477cb47f80fda2e1184c86ab37771c105) to
the demo app, we are now providing the library a license server config
for clearkey, which enables DrmEngine to select the clearkey CDM for
any generic mp4protection content.  This causes playback failures when
the license server URI points to Widevine, PlayReady, or any other
real key system.

With this change, the demo can still be used to test explicit clearkey
DASH content which uses "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b", the
UUID for clearkey.  But we will no longer inappropriately select
clearkey for the generic "mp4protection" scheme.

Fixes: 110281315

Change-Id: Ie6ee4e08e749dd38852f0096df35d35f3d3b2cee
2018-06-21 23:31:07 +00:00
Theodore Abshire 1d2cdc84db Added async/await to some of Dash tests.
Also fixed some formatting in media tests.

Issue #1337
Change-Id: Ifc003e3cb8f4b7a9920a0d2a121089eea4cf1bcd
2018-06-12 08:56:50 -07:00
Jacob Trimble 866b0e18ef Fix non-default namespace names in DASH.
XML allows namespace names to be any string.  So instead of looking
for the literal name 'cenc:pssh', we should be looking for the 'pssh'
name in the correct namespace.

Closes #1438

Change-Id: I724db3b7f0e60b4233b0fc40b1ed57698c6ce9ce
2018-05-21 20:02:18 +00:00
Michelle Zhuo 535de4db84 Refactor: Remove underscore from parameter names
Change-Id: Ie9e6fb59763f454f245175f23c6444f919ba8135
2018-05-08 19:21:51 +00:00
Jacob Trimble ba0b72dc7e Use rolling average for delaying manifest updates.
If a single manifest update takes a long time, it should not hinder
future ones; but if there are repeated slow updates, we should delay
updates.  This uses an EWMA to keep a rolling average of update times.

Closes #1399
Issue #1408

Change-Id: I6a662ce51ba9c3e1e4a87b2418e35fc3948043c1
2018-04-13 16:43:14 +00:00
Sandra Lokshina 8065bd54a8 Change namespace from shakaExterns to shaka.externs
Change-Id: I16432351e2a266aa8fd175669aa27c44bfdffeae
2018-04-11 17:26:26 +00:00
Joey Parrish 79a6146b5f Revert change to Track and Stream structures
In the initial fix for #1013, we changed the name of the channelsCount
field in both the Track and Stream structures.  This would break
compatibility for applications.  So even though the new name was in
some ways preferable, we must revert the name to avoid more breaking
changes in v2.4.

Issue #1013

Change-Id: Ie8f3d211c42c8046039a3db9f0926c68ad1315d9
2018-04-10 23:45:53 +00:00
Michelle Zhuo a09ae24b85 Add audio channels count configuration
Added a preferred audio channel count to configuration, default set
to 2.
Choose the codec with the largest number of audio channels less than
or equal to the configured number of output channels. If this is not
possible, choose the smallest number of channels.

Closes #1013.
Issue #1071.

Change-Id: I6c6a956e33637cf34bd4bd79af563dc10a595e94
2018-04-06 20:51:28 +00:00
Joey Parrish 25971503fa Don't update DASH faster than a device can manage
For slow embedded devices, such as the v1 Chromecast, updating the
DASH manifest takes far too long.  The result is that we can sometimes
repeatedly fall out of the seek range when playing near the left edge
of a live stream.

Until we can dig into and optimize the DASH parser, we will detect
and adapt to slow parsing by updating the manifest less often.

This is done based on how long updating actually takes, and does not
hard-code either the platforms that need this workaround, nor the
frequency of updates they can handle.

Bug: 75276747

Change-Id: I6565192b4ce6935ee8416ea4843fee851f4bd990
2018-03-28 22:48:07 +00:00
Jacob Trimble 938da032b5 Allow non-decimal formats in SegmentTemplate.
Fixes: 75988239
Change-Id: I023a1bd003662c6d651eb870b4aba025dc687327
2018-03-21 22:41:26 +00:00
Jacob Trimble 064089152b Remove spacing around object definitions.
This is an automated fix to be inline with Google style guides, this
was created with eslint's --fix option.

Change-Id: I860eecbc8152603e730aa17a1393f16d26b3b6fc
2018-02-21 13:35:00 -08:00
Jacob Trimble 624acc66b8 Add curly braces to all blocks.
Google style guide requires adding curly braces to all block statements
even if it is only has one line.  This fixes it by using eslint's
--fix flag followed by running clang-format to reformat the change.

Change-Id: Idc086c2aa8c02df5ef8b2140a11bfb9128eeb4bd
2018-02-21 11:23:34 -08:00
Jacob Trimble 29f39077dc Convert 'var' to 'let'/'const' (2 of 9).
This is part of a change to convert all usages of 'var' with either
'let' or 'const'.  This takes a conservative approach for 'const' where
it will only be used for aliases and storing the "original" values in
tests.

Change-Id: Iebba756b5d0e68c41292ecabda89503682d8d434
2018-02-14 00:38:06 +00:00
Jacob Trimble 554cffc95c Fix SegmentTemplate w/ duration.
We incorrectly added the presentationTimeOffset to the segment times as
a fix for #1164.  The correct fix is to use the include the PTO in the
time structure passed to the text parsers.  This is a partial revert
of 207505.

Issue #1164
Closes #1232

Change-Id: I1f2805e0dbdc44be71e2160b3d37a73732c97a4f
2018-02-01 00:12:45 +00:00