Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/v3.30.0 #1223

Merged
merged 108 commits into from
Mar 7, 2023
Merged

Release/v3.30.0 #1223

merged 108 commits into from
Mar 7, 2023

Conversation

peaBerberian
Copy link
Collaborator

@peaBerberian peaBerberian commented Feb 21, 2023

Pull request for the future v3.30.0 release that we're currently testing

Changelog

Features

Deprecated

  • Deprecate the getVideoLoadedTime method which can be easily replaced (see Deprecated method documentation)
  • Deprecate the getVideoPlayedTime method which can be easily replaced (see Deprecated method documentation)
  • Deprecate the transportOptions.aggressiveMode option
  • DRM: Deprecate the keySystems[].onKeyStatusesChange callback as no good use case was found for it.

Bug fixes

Other improvements

This PR is a necessary stepping stone for multiple projects in parallel:

  1. First it is part of the ongoing long-term project of reducing
     (removing?) our depency to the RxJS library - mainly to improve the
     code's approachability and debuggability.

     It has been here completely removed from the `src/core/init`
     directory.

  2. As it also provides a simple interface to the logic of what
     was called previously the `Init`, it also greatly facilitates the
     implementation of running the RxPlayer's core in a WebWorker if
     wanted (basically: in another thread), while still allowing to run
     everything in main by default.

     Originally only a proof-of-concept, it's a path that appears more
     and more credible to improve the situation seen with some
     applications (regarding rebuffering avoidance with low-latency
     contents, smoothness of UI interactions when parsing huge MPDs,
     better bandwidth calculations and other subjects that could profit
     from a player running concurrently to the UI).

     This PR simplifies this work by allowing the definition of multiple
     now-called `ContentInitializer`: the one already-defined for main
     thread buffering, and another one, spawning a WebWorker, for the
     worker flavor. It appears that (unsurprisingly), the `Init` was the
     almost-only place where this split needs to be done ("almost"
     because text track rendering and [in some
     case](https://chromestatus.com/feature/5177263249162240) MSE APIs,
     also need to be performed in the main thread).

     The selection of the right one could be performed as late as load
     time.

  3. Provide an elegant solution for the previously weird
     MediaSource/Directfile paths.

     Previously, they were each linked to different functions found
     in the `init` directory, with no apparent structure.

     Now, they both are `ContentInitializer` implementations, just with
     different constructor parameters.

  4. Clean-up and provide some structure to the `init` directory.

The work has been huge and need extensive testing and re-reading (I
intent to re-check everything multiple times!), so it may stay as a PR
for some time and I don't plan for now to merge it until the next
release has been, uh, released.
This commit adds handling of the `endNumber` attribute found on some DASH
contents, which is the number the last segment should have.

We decided to add it after seeing it used in the wild, most notably by
some of Canal+ partners.

This attribute is only present in newer 2019+ DASH specifications we
funnily enough did not have access to until now. It was not in the latest
DASH-IF specification neither.
[WIP] Refactor the whole Init into a ContentInitializer concept
This commit adds the `updateContentUrls` API allowing to update at any
time and during playback, the URL through which a content's Manifest is
reached.

This may be used anytime an application prefer a new Manifest URLs to be
used, whether it is because the previous URL will soon expire, because
the new URL is seen as more qualitative or to rebalance load.

The first argument given to `updateContentUrls` is actually an array of
strings, listing new URLs from the most prioritized to the least
prioritized. This is not used for now, but should soon be used to define
fallback URLs when former one fail to fetch the resource.

`updateContentUrls` can be given a second argument named `refreshNow`
which can be used to ask the RxPlayer to refresh immediately the
Manifest behind the given URL.

For now, this API will throw for directfile contents, I'm not sure
whether it is pertinent to enable it also in this case.
DASH: Now handle `endNumber` DASH attribute
@peaBerberian peaBerberian force-pushed the release/v3.30.0 branch 2 times, most recently from 1da08b9 to 6925454 Compare February 28, 2023 17:23
We recently noticed an issue on the PS5 which causes stuttering playback
on live contents.

After exchanging with Sony, turns out the root cause is that their new
WebKit version has performance troubles in its segment data eviction
logic when the current `MediaSource`'s duration is set at a high value.

For live contents, we set in most cases (there are rare exceptions) the
duration to 2^32, because higher values may cause issues on other
platforms (most notably Tizen). To us, it didn't seem as a very high
value but Sony actually advised us to use positive `Infinity` instead (a
valid IEEE 754 value that can be set in JavaScript for a "Number"), as
it seems to be handled specially by WebKit.

`Infinity` is also the actual value advised by the current HTML living
standard for live contents, but I was still afraid that just changing to
that special value would break other platforms - as we're used to random
bugs when changing those types of properties. Because of this, and despite
the fact that the issue seems rooted in a WebKit version, I chose to
only set the `Infinity` duration on the PS5 for now as this is the only
device where that issue has been seen for now.
Set `Infinity` as duration when playing live contents on the PS5
@peaBerberian peaBerberian merged commit ebd1266 into master Mar 7, 2023
@peaBerberian peaBerberian deleted the release/v3.30.0 branch July 6, 2023 12:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Performance checks Performance tests are run on this issue / PR Priority: 1 (High) This issue or PR has a high priority. release Pull Request for a release branch that is being tested
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant