Commit Graph

243 Commits

Author SHA1 Message Date
Vincent Valot cc97da167f feat: allow reuse of persistent license sessions (#4461)
Add capability to re-use persistent license sessions across sessions.

DrmEngine will now always:
- try to start stored persistent sessions before trying to fetch a
license, as-to be able to check if all needed keys are already loaded.
- ask for a new license when the persistent session doesn't have the
needed keys for playback,

Given the flag `persistentSessionOnlinePlayback` is true, DrmEngine:
- won't remove the persistent session from the device at the end of the
playback,
- won't throw an error when the persistent session isn't found on the
device,

For now, it needs Shaka's users to persist session information by
themselves (localStorage, IndexDB, ...) before giving it back for the
next session. Still, it lays foundation to develop the feature to fully
handling it on Shaka's side.

Related to #1956
2023-04-19 15:18:34 -07:00
Álvaro Velad Galván f80bf208b1 feat(MSS): Add support for Microsoft Smooth Streaming (VOD only) (#5002)
Closes https://github.com/shaka-project/shaka-player/issues/703

---------

Co-authored-by: Joey Parrish <joeyparrish@google.com>
2023-03-24 07:47:33 +01:00
Casey Occhialini fe38e45f4d fix: Adds missing CMCD params to some http requests (#5072)
Fixes #5067
Fixes #5094

Co-authored-by: Dan Sparacio <daniel.sparacio@cbsinteractive.com>
2023-03-15 02:13:16 -07:00
theodab d0bb1babaa docs: Remove next links from tutorials (#5082)
The links to the next tutorial were out of date, and they no longer prescribed the actual order of tutorials. This just removes those links entirely.

Fixes #5078
2023-03-10 00:58:11 -08:00
Joey Parrish 472bcbbcff docs: Add Widevine Service Certificate tutorial (#5018)
Also fixes a related typo in the FairPlay tutorial and adds a missing
entry to the tutorial index.
2023-02-23 11:56:39 -08:00
theodab fbce38af1c feat(net): Added advanced type to filters (#5006)
This adds an optional parameter to request and response filters, of a
new enum called AdvancedRequestType.
This enum describes request types that are subtypes of the basic types.
For example, INIT_SEGMENT is a type of SEGMENT.
This gives users more information about the type of the request, while
maintaining backwards compatibility.

Closes #4966
2023-02-23 11:56:23 -08:00
Martin Stark ac963a9d1a docs: Add error handling tutorial (#4983)
Shaka error handling is getting increasingly more complex in order to "catch them all".
This new tutorial describes both the basic method of error handling, as well as showing a few
more advanced ways to handle specific errors.

Closes #4484
2023-02-14 00:30:36 -08:00
François Beaufort 3828fd6849 feat: Add support for Document Picture-in-Picture (#4969)
This PR adds _experimental_ support for the Document Picture-in-Picture
API in the Shaka Player.

Closes https://github.com/shaka-project/shaka-player/issues/4964

Co-authored-by: Alvaro Velad Galvan <ladvan91@hotmail.com>
Co-authored-by: Joey Parrish <joeyparrish@google.com>
2023-02-10 08:39:57 -08:00
Tian Shao de6abde06f feat: Support Parallel Segment Fetching (#4784)
closes https://github.com/shaka-project/shaka-player/issues/4658.

This solution is inspired by abandoned PR
https://github.com/shaka-project/shaka-player/pull/2809, which
implements segment prefetching ahead of current play head.


![image](https://user-images.githubusercontent.com/3315733/205465795-75c605d2-c2e3-4d03-90f5-46a72a7189d2.png)
2023-01-31 20:08:29 +01:00
Álvaro Velad Galván 7fa40fdb48 feat: Add ExpressPlay FairPlay util (#4926) 2023-01-24 07:11:43 +01:00
Joey Parrish 68f10a1969 docs: Update docs about dev dependencies (#4794)
We require node v14+ and Java v11+ now.

Closes #4721 
Closes #4737
2022-12-06 09:31:22 -08:00
Tian Shao aadecd6401 feat: Add preferredAudioLabel to PlayerConfiguration (#4763)
Closes
[#4762](https://github.com/shaka-project/shaka-player/issues/4762).

The change is to add PreferredAudioLabel to player configuration so that
host apps can decide the default variant label to choose at very
beginning.
2022-11-29 10:30:40 +01:00
Joey Parrish 0db6070dcd chore: Set receiver app ID for main (#4675) (#4686)
This reverts commit ea2eaaf210.

Now that v4.3 is out, this sets the receiver app ID for main to refer to
the nightly version of the receiver app again.
2022-11-11 07:08:08 -08:00
Joey Parrish ea2eaaf210 chore: Set receiver app ID for v4.3 (#4675)
This will be reverted in the main branch after the launch/branch of
v4.3, so that main continues refers to the nightly version of the
receiver app.
2022-11-09 16:17:58 -08:00
Joey Parrish 5a76a8351d docs: Update roadmap, maintained branches, and upgrade guide for v4.3 (#4674) 2022-11-09 16:07:40 -08:00
Joey Parrish 6c6cc9dc4b docs: Fix receiver app ID in UI tutorial (#4673)
In the main branch, since the code there is a pre-release, these should
generally all point to the nightly demo receiver.
2022-11-09 16:05:17 -08:00
Joey Parrish 7772099029 build: Fix Docker-based builds (#4633)
This removes the overly-complex docker-compose system and rewrites the
Dockerfile. It also changes the docker commands to those that specify a
user ID, so that build outputs are written as the current user.

Closes #4387 (failed docker build not detected in CI)
Issue #4619 (failed to build w/ docker)
2022-10-28 15:43:16 -07:00
Álvaro Velad Galván 8623a5d030 feat: Add AAC transmuxer (#4632) 2022-10-28 15:43:02 -07:00
Martin Stark 7166f0c1d0 feat: enable uninstalling PatchedMediaKeysApple (#4471)
Close #4469
2022-09-23 09:52:42 +02:00
Joey Parrish 46b27f19e0 fix: Update main branch Cast receiver ID (#4364)
This ID points to the nightly build, and so is appropriate for the
main branch.
2022-07-19 11:59:29 -07:00
Álvaro Velad Galván 5b18069430 feat: Add fallback to TextDecoder and TextEncoder (#4324)
Related to https://github.com/shaka-project/shaka-player/commit/a72a1e91023a33c777a6001a64f818ea2e469914
2022-07-11 10:24:11 -07:00
Álvaro Velad Galván 5441f932fd feat: Add support for Modern EME and legacy Apple Media Keys for FairPlay (#4309) 2022-06-29 07:13:53 +02:00
Joey Parrish 80d1072e7c docs: Deprecate the mailing list for releases (#4323)
Releases will no longer be announced on the mailing list.  Instead,
users can subscribe directly through GitHub.
2022-06-28 09:46:14 -07:00
Álvaro Velad Galván 5e107d584f feat: Add keySystemsMapping to drm config (#4254)
This allows, for example, users to use com.microsoft.playready.recommendation
instead of com.microsoft.playready.

Closes #4243
2022-05-31 15:41:00 -07:00
Álvaro Velad Galván ff310e91e5 fix(fairplay): Re-add initDataTransform config (#4231)
Some FairPlay providers still need this part, so we should never have removed it.

The default is to do no transformation.

Co-authored-by: Joey Parrish <joeyparrish@google.com>
2022-05-17 11:53:52 -07:00
Joey Parrish 87b6b1d519 docs: Add note to upgrade guide about manifest.hls.useFullSegmentsForStartTime (#4213)
This was removed in the release, but we failed to note this in the
upgrade guide.

Closes #4210
2022-05-11 10:54:22 -07:00
Álvaro Velad Galván dbba571c6b feat(cast): Add Android receiver support (#4183)
Closes https://github.com/shaka-project/shaka-player/pull/3773 
Closes https://github.com/shaka-project/shaka-player/issues/3772
2022-05-05 09:18:47 -07:00
Joey Parrish a392c02e0e chore: Drop GSOC ideas list (#4182)
This is very outdated and should not appear in our docs
2022-05-02 20:01:03 -07:00
Á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