Commit Graph

215 Commits

Author SHA1 Message Date
Álvaro Velad Galván 0fd19997dd feat!: Remove small/large gap config, always jump gaps (#4125)
We get rid of the "small/large" gap concept, to always jump gaps by default

Related to issue https://github.com/shaka-project/shaka-player/issues/3188#issuecomment-788173036
2022-04-13 11:00:47 -07:00
Joey Parrish ead344fe1f chore: Drop MS EME polyfill (#4123)
The MS EME polyfill has been unused since v3.1 and removal of IE support, and isn't needed for Edge or Xbox One support.

Closes #4113
2022-04-12 21:15:14 -07:00
Joey Parrish d8b3341720 test: Run tests on a custom Selenium grid (#4117)
Includes a YAML config file for our lab, and documentation on how to
create a custom config for another Selenium grid.

A workflow will run tests nightly in the Shaka lab, using a
self-hosted runner with access to our private grid.

The workflow can also be triggered manually by maintainers to test a
PR in the lab.  This will report status back to the PR.
2022-04-12 11:32:59 -07:00
Joey Parrish ac5acc80cb feat!: Remove deprecated features, update upgrade guides (#4089)
Below are the changelog entries for each deprecated feature removed by this commit.

-----

feat(config)!: `manifest.dash.defaultPresentationDelay` has been replaced by `manifest.defaultPresentationDelay` (deprecated in v3.0.0)

feat(config)!: Configuration of factories should be plain factory functions, not constructors; these will not be invoked with `new` (deprecated in v3.1.0)

feat(player)!: `shaka.Player.prototype.addTextTrack()` has been replaced by `addTextTrackAsync()`, which returns a `Promise` (deprecated in v3.1.0)

feat(ui)!: `shaka.ui.TrackLabelFormat` has been renamed to `shaka.ui.Overlay.TrackLabelFormat` (deprecated in v3.1.0)

feat(ui)!: `shaka.ui.FailReasonCode` has been renamed to `shaka.ui.Overlay.FailReasonCode` (deprecated in v3.1.0)

feat(offline)!: `shaka.offline.Storage.prototype.store()` returns `AbortableOperation` instead of `Promise` (deprecated in v3.0.0)

feat(offline)!: `shaka.offline.Storage.prototype.getStoreInProgress()` has been removed; concurrent operations are supported, so callers don't need to check this (deprecated in v3.0.0)

feat!: `shaka.util.Uint8ArrayUtils.equal` has been replaced by `shaka.util.BufferUtils.equal`, which can handle multiple types of buffers (deprecated in v3.0.0)

feat(manifest)!: `shaka.media.SegmentIndex.prototype.destroy()` has been replaced by `release()`, which is synchronous (deprecated in v3.0.0)

feat(manifest)!: `shaka.media.SegmentIterator.prototype.seek()`, which mutates the iterator, has been replaced by `shaka.media.SegmentIndex.getIteratorForTime()` (deprecated in v3.1.0)

feat(manifest)!: `shaka.media.SegmentIndex.prototype.merge()` has become private; use `mergeAndEvict()` instead (deprecated in v3.2.0)

feat(plugin)!: `AbrManager` plugins must implement the `playbackRateChanged()` method (deprecated in v3.0.0)

feat(plugin)!: `shaka.extern.Cue.prototype.spacer` has been replaced by the more clearly-named `lineBreak` (deprecated in v3.1.0)

feat(plugin)!: `IUIElement` plugins must have a `release()` method (not `destroy()`) (deprecated in v3.0.0)
2022-04-11 17:11:40 -07:00
Álvaro Velad Galván 8bb70449d3 feat!: Remove support for Safari 12 and iOS 12 (#4112)
1. Remove support for Safari 12
2. Support modern EME in Safari 13
3. Remove EME Apple polyfill
4. Update documentation
2022-04-11 16:17:51 -07:00
António César Júnior 925de1995e docs: Add Dockerfile and docker build instructions (#3547)
Many devs using Shaka and wishing to compile the library are required to install all prerequisites on their machine. For docker devs, this is extremely bad as it requires installing Java and Python on OS.
This commit adds a basic configuration for quick compilation via Docker, without requiring any other prerequisites. Improvements can be made in order to allow all Shaka workflow inside Docker.

Suggested in #181
2022-03-21 10:04:16 -07:00
Joey Parrish 1507b1e844 chore: Update URLs after moving projects (#4008) 2022-03-03 14:34:40 -08:00
Michelle Zhuo 36d0b5484f feat(HLS): Containerless format support
This adds code to allow Shaka Player to play media in sequence
mode, an alternate playback mode that makes the browser ignore
media timestamps, when playing HLS media.
This is important for containerless media formats, as they do not
contain such timestamps.
Changing HLS to not require timestamps also means that we no
longer need to fetch media segments in order to get the start
time, which should lower bandwidth usage and startup delay.
In initial tests, on a simulated 3G network, load latency went down
from an average 3.16s to 2.61s on the HLS version of "Big Buck Bunny:
the Dark Truths of a Video Dev Cartoon"; an improvement of about 17%.

Issue #2337

Change-Id: I507898d74ae30ddfb1bddf8dce643780949fbd9b
2022-02-08 09:34:03 -08:00
Vincent Valot 6d76a135e5 feat: add modern EME support for FairPlay (#3776)
Add support for HLS com.apple.streamingkeydelivery through MSE/EME implementation.

Close #3346

## Tests
Tested on:
- Mac 11.6 Safari 15.2
- iOS 15.2 Safari 15.2
- Mac 11.6 Chrome 96 (for potential regressions on Widevine keySystem)

| Mode | DRM API | TS | CMAF (mono-key and multi-keys)
|---|---|---|---|
| file | EME |   |   |
| file | Legacy-prefixed |    |    |
| media-source | EME | **mux-js**: `encrypted` never fired<br />**real MSE**: `encrypted` event received, but with incorrect `sinf` initData (*1)  |   |
| media-source | Legacy-prefixed | **mux-js**: `webkitneedkey` never fired<br/>**real MSE**: TBD  | 🔴 fails to append media segment to SourceBuffer (init segment ok) `(video:4) – "failed fetch and append: code=3015"` |

## Support table 
| Mode | DRM API | TS | CMAF (mono-key and multi-keys)
|---|---|---|---|
| file | EME |   |   |
| file | Legacy-prefixed |    |    |
| media-source | EME | 🚫 `4040: HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED`  |   |
| media-source | Legacy-prefixed | 🚫 `4041: HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED`  |🚫 `4041: HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED` |

⚠️ Use EME APIs with multi-keys CMAF makes the video stalling with the audio continuing alone after a short time (~3 minutes in the stream, could be shorter, could be longer). Didn't find an explanation to that yet. I've observed the same behaviour with hls.js code so I don't think this is a player issue.
2022-02-07 11:17:22 -08:00
Joey Parrish 00106e2304 chore: Update Cast receiver ID for v3.3
Change-Id: I45013462a49b9e1ebfb017371b80bf351f9ee286
2022-01-07 12:01:04 -08:00
Dmitry Savchenkov ff988447cc docs: Fix typo in Fairplay tutorial (#3714) 2021-10-25 10:54:52 -07:00
Joey Parrish 1b2fa840d9 fix: Update Cast receiver ID for v3.2
Change-Id: I6f92d676b35d5236805aea7864fc81f4fb7a223f
2021-10-14 09:06:47 -07:00
Álvaro Velad Galván 34958c81b9 feat(ui): Added Loop and PIP to context menu, and Statistics to overflow menu (#3578) 2021-10-12 01:00:51 -07:00
Theodore Abshire 7c81b0b3f7 docs: Add FAQ entry for common Vue problem
Closes #3155

Change-Id: Ia8340796507ce4db37e29bd0d7c729cbb26b1325
2021-09-30 14:18:33 -07:00
Nico d5769eeda4 feat(ui): Add tooltips to control panel buttons (#3572)
Adds configurable tooltips that display the function of buttons in the control panel.
Closes: #3269
2021-08-23 10:00:43 -07:00
Nico f65b093d40 feat(ui): Add configurable rates (#3579)
Adds configurable options for playback, fast forward and rewind rates.
Closes: #3443
2021-08-23 09:22:27 -07:00
Álvaro Velad Galván 0e02312597 docs: Add blob-url tutorial (#3586)
Closes #1481
2021-08-21 05:08:42 -07:00
Nico afb93106a7 feat(ui): Add right-click context menu, statistics button (#3548)
Closes #2607
2021-08-04 22:16:56 -07:00
Nico 481b378a4b feat(ui): Add Quality, Language, Playback, Captions buttons to control panel (#3465) 2021-07-23 12:12:16 -07:00
Joey Parrish bfece76f10 docs: Update upgrade guides
This drops the v2.4 guide (no longer maintained), and adds a specific
guide for v3 changes (which are minimal).

Closes #3487

Change-Id: Id2e6d3ce92114ca5685787994cac7a5ed36a86e9
2021-07-08 20:56:45 +00:00
fingerartur e1b3debb33 docs: how to disable Range header requests at start of HLS playback (#3442)
Co-authored-by: Artur Finger <artur.finger@nangu.tv>
2021-06-04 09:16:22 -07:00
Joey Parrish 3698f49f3b chore: Update cast receiver ID for v3.1
Change-Id: Ifa042ca4e5e8922121d332cc790559d5bbff14ae
2021-04-29 21:49:11 +00:00
Michelle Zhuo 95ba28b5af refactor: Remove IE 11 support
Issue #2339

Change-Id: I80ffa7b04f7afd943aa0f881d2a494dd35def732
2021-04-29 17:47:07 +00:00
ismena 56d161a3c2 docs(ui): Add the UI Theme Gallery link to the docs.
Issue #3246

Change-Id: If784815ef6947dd7b0b369e6d27950f965b9bd01
2021-04-20 19:00:25 +00:00
Akshat mangal df5340fa2b Fixed minor punctuation and grammatical errors (#3342) 2021-04-17 23:00:17 -07:00
ben476 d6d2a9f3c7 docs: Fix offline tutorial to use the correct config (#3337)
When configuring offline storage in initStorage in initialising storage, an OfflineConfig was used instead of a player config, which worked in v2.5 but not in v3.0. Because of this when the final code was run the progress bar wouldn't work properly as progressCallback was not set.
2021-04-16 14:02:46 -07:00
ismena 7e50866bb5 fix(dash): Fix stalls on a live dash stream.
In live streams, we can evict segments outside the availability window
faster than they disappear from the manifest. If that happens, we used
to evict them several times (add them back in and then evict again).
This caused the eviction counter to increase beyond what it should be
and we had trouble finding segments afterwards.

Closes #3139.

Change-Id: Iafebfaf8e1e9ebb09a64cdf7e09a882115fd8eb6
2021-04-14 19:41:30 +00:00
Vincent Valot b4595d5a59 feat(drm): make dash keySystems configurable (#3276)
Make the DASH keySystems configurable, so that any developer could chose to opt-in for recommendation based on DASH DRM UUID.

Example:
player.configure({
  dash: {
    keySystemsByURI: {
      'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95': 'com.microsoft.playready.recommendation',
    }
  }
});
2021-04-02 17:33:39 -07:00
Vincent Valot 4574a5dd92 feat: make drm sessionType configurable in advanced DRM config (#3301)
Prerequisite for issue #1495 (com.microsoft.playready.recommendation key system)
2021-04-01 16:32:51 -07:00
ismena 51263c1337 docs(ads): Add more info on serving limited ads to the tutorial.
Change-Id: I97cdf61ab0045cb4a3610fcbd7e6145d12321de7
2021-03-31 10:34:06 -07:00
Nico 4f0ded7e37 feat(ui): Add Loop, PIP, Cast, AirPlay buttons to control panel (#3255)
These menu items are now available to be placed in the control panel of the UI.

Issue #2676
2021-03-30 15:44:44 -07:00
Álvaro Velad Galván 863e3455b6 feat: Network stall detection (#3227)
Closes: #1582
2021-03-30 13:35:41 -07:00
Michelle Zhuo 96e87c2fad doc(gsoc): Update the GSoC doc link
Change-Id: I8fa200b6897c08f9f7a172d371a918775eccd993
2021-03-30 18:41:52 +00:00
Adit Mehta 1b1227f46d docReplace manually defined links in the doc (#3287)
* REplace manually defined links in the doc

* Update gsoc-ideas-list.md

* Update gsoc-ideas-list.md

* Update gsoc-ideas-list.md

* Update faq.md

* Update faq.md

Co-authored-by: aditmehta9 <aditmehta9@gmail.com>
2021-03-29 09:45:42 -07:00
Michelle Zhuo 4547c7ffc5 doc(gsoc): Update for guidelines
Change-Id: I1c9c72acec24641c3aba86e1c38d2aab3081b666
2021-03-22 17:48:11 +00:00
Adit Mehta c5af2be27a doc: Update links for event and formatting (#3256)
Updated JsDoc links for the events of Ads.
2021-03-20 13:39:48 -07:00
Michelle Zhuo 99314b733f fix(doc): Update @event and @link in UI
After some research, I found the right way to use @event in JsDoc:
1. An event definition should be: @event className@eventName
2. The link to the event should be:
   @link className#event:eventName

Reference: https://groups.google.com/g/jsdoc-users/c/-1Qle3ww8Rk/m/UjiibrcSkoUJ

Change-Id: I09ed999f44df815c2f9f558f7ddbfd2f4c7df426
2021-03-19 13:38:12 -07:00
Rishi Giri 8a381ba0b4 doc: minor enhancements (#3222) 2021-03-15 09:27:20 -07:00
Arijit Kundu 9f51799262 docs: Fixed outdated info in "contributing" doc(#3206) 2021-03-11 12:20:13 -08:00
Michelle Zhuo 6fdc475dc1 doc: add more info to contributing guide
Change-Id: I0fd8fc8ca1012de68d1d147a4509109cee3e5ba8
2021-03-10 22:19:29 +00:00
Michelle Zhuo 54fd812b74 doc: Adjustments to the gsoc ideas list
Change-Id: Icb6de41bccd658fefe2c2a8ac4977951eaf4814c
2021-03-10 18:43:51 +00:00
ismena 9e05954f73 docs: Add limited ads section to the ads tutorial.
Change-Id: Ie654622a9b5acaf6ce2b45ca62cd0cf4d31dc345
2021-03-08 13:17:56 -08:00
Michelle Zhuo ca76928d1d doc: Add more info to the GSoC ideas list
Change-Id: Ic6a3248160eba645415233b39fdc03cfd283dab7
2021-02-26 18:06:08 +00:00
ismena a0587c4be3 docs: Expand the IMA integration tutorial
Closes #3168

Change-Id: Ic1f416b250cfdac525329cb7504a6b40710f5425
2021-02-23 18:12:59 +00:00
ismena b850054a56 docs: Document programmatic UI setup
Closes #2655

Change-Id: I8a151b0be6cbec0d06bfa00c69e5249f4187c154
2021-02-20 02:45:59 +00:00
Michelle Zhuo 419f22ada6 doc(ALR): update doc for manifest and segment ALR
Change-Id: I72492d95a0345cfce51f304d094d2241b99c9a91
2021-02-19 23:29:02 +00:00
Michelle Zhuo c5fa62718d doc: Add Google Summer of Code ideas list
GSoC requires a link to our ideas list. Putting the projects here.
https://summerofcode.withgoogle.com/

Change-Id: I30df1cce597f909fc5c6834570fb3fc7b5b0582b
2021-02-18 19:10:05 +00:00
Joey Parrish d3dfabceb1 fix: Fix segment refs for "future" DASH periods
When a multi-period DASH manifest contains periods which are in the
future (described in the manifest, but with all segments past the
current end time of the segment availability window), the segments
generated for SegmentTemplate were invalid.  Not all DASH multi-period
content describes unavailable future periods, so many providers using
DASH would not see this issue.  This bug affected v3.0.0 - v3.0.7.

To fix this, we change the "next position" calculation for updates to
clamp to the minimum valid position.  This avoids creating segment
references with negative position numbers for these future periods.
When the segment availability window moves to include this period, we
will then start generating segments for it (starting at position 0 or
whatever the startNumber attribute is for this period).

However, the contract for updateEvery() in SegmentIndex was such that
the timer would stop if the list of references was every empty.  This
was meant to handle the case in which all segments were evicted, but
it could be triggered instantly on these "future" periods, for which
no segments exist yet in the availability window.  To resolve this,
the contract was changed so that the updateEvery() callback must
explicitly signal a stop by returning null instead of an array of
segment references.

Bug: 179025415

Change-Id: I56a2826fd3aea3f69da7b8bf4fa7629562d63506
2021-02-08 22:18:24 +00:00
Theodore Abshire 655493f441 Fix(ads): Fix bug w/ configuring UI during CS ads
Previously, the client-side ad container was put inside the controls
container, which was cleared when the UI was configured. This meant
that re-configuring the UI made client-side ads go away, basically.
This moves client-side ads to go into their own container, which
is never re-made or uprooted, even when the DOM is recreated, in
order to not break the IMA SDK.
This has the side-effect of fixing a bug where client-side ads were
not always cleared upon loading a new asset, and could show up
unexpectedly in future playbacks.

Fixes #2869
Fixes #2943

Change-Id: I3cf67b0b278764c10c6ff2f678316dc9cc85929e
2020-12-16 14:26:09 -08:00
Chuong baee50b5a2 docs: add link to complete list of categories (#2934)
When user read about these anotation +@complete -@polyfill, they wonder where it came from.

It is not immediately obvious where to see it without reading the next section.
2020-10-23 09:38:26 -07:00