Commit Graph

210 Commits

Author SHA1 Message Date
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
Joey Parrish e8b9748ab1 docs(ui): Correct receiver IDs in the UI tutorial
Closes #2926

Change-Id: If535dc03f585ba3d7b6b504454dc920e822aabc4
2020-10-19 14:31:30 -07:00
Joey Parrish b99babd36f docs: Update required Node version
This requirement comes from stylelint, and should apply to both v2.5
and v3.0 branches.

Closes #2913

Change-Id: I26b4d1c1928c5cf832cefc9f181df0986e1ff364
2020-10-15 23:31:23 +00:00
Theodore Abshire 7941703c5a Fix(hls): Allow config to play video-only HLS.
If an HLS stream has no provided codec information in its manifest,
we previously defaulted to providing a best-guess video and audio
codec.  This, however, caused problems for video-only and audio-only
streams; Chrome does not like it if an audio codec is provided for
a stream with no audio at all, for example, and fails to append the
chunks.
This modifies the HLS parser to not provide a default video codec if
the 'disableVideo' config is set, and similarly to not provide a
default audio codec if 'disableAudio' is set.

Issue #2868

Change-Id: I7826fdb69f2e5290914ed2c0d1e109f9db94f80d
2020-09-26 06:04:00 +00:00
Michelle Zhuo 1e8f8bbf1f feat(LL-HLS): Set default streaming config for low latency
To enable low latency streaming, the configuration of
inaccurateManifestTolerance should be set to 0, and rebufferingGoal
should be set to less than 1 partial segment duration.
Instead of requiring developers to set three configurations, we
default inaccurateManifestTolerance to 0 and rebufferingGoal to 0.01
with low latency mode, unless speicfied.

Issue #1525

Change-Id: I538fa6d84ced26225fe9ebdf5213b370debfa22d
2020-09-17 18:56:58 +00:00
Theodore Abshire 509e7b046a fix(manifest): Fix embedded captions vanishing.
Previously, on manifest updates, embedded captions would vanish in
single-period live DASH streams.  The problem was based on the
specific point in the load order that we added dummy text streams
to indicate the presence of embedded captions.
This modifies the PlayerInterface for manifest parsers to add a
new method passed in, makeTextStreamsForClosedCaptions, which
must be called by manifest parsers for new video streams.
This also completes an unfinished feature, where new video streams
which add new closed captions would not get corresponding
text streams.

Closes #2811

Change-Id: Iee7499ec950b363cf6839765cc2bd2d01743467d
2020-08-26 15:05:40 -07:00