v3.32.1
Release v3.32.1 (2023-10-19)
NOTE: This is the v3.32.1
and not a v3.32.0
as you could have expected due to a small mistake when publishing our TypeScript types to npm for a v3.32.0
. We detected it and fixed it immediately with a new release, the v3.32.1
.
- π Overview
- π Changelog
- New
isSpatialAudio
property addFeatures
now globally available- Deprecation of the
NATIVE_TEXT_BUFFER
andHTML_TEXT_BUFFER
features - Many small fixes
π Overview
The v3.32.1
mainly brings stability improvements over the v3.31.0
, as we start to focus more and more on the future v4.0.0
release.
On that matter we'll probably soon release the first v4.0.0
release candidate (paving the way for the first official v4.0.0
release), after a long period of alpha and beta releases (the next beta release should come just after this one) where we were still figuring out some API details.
Note that we're however still commited to maintain the v3.x.x
releases for some time, at least in terms of providing bug fixes, as we know doing the switch to the v4
may not be in your agenda for now.
As such, even when the official v4.0.0
will be released, we will continue publishing some v3.x.x
releases, only with a special npm tag (e.g. rx-player@v3
).
π Changelog
Features
- DASH: add optional
isSpatialAudio
boolean property to Representation returned bygetAvailableAudioTracks
,getAudioTrack
, corresponding events, andtrackInfo
optional property ofMediaError
objects to signal Dolby Atmos techology [#1275] LOCAL
: addisSpatialAudio
property to Representation of the experiment"local"
transport (used for offline playback) [#1275]addFeatures
static method is now available on all RxPlayer builds. It was previously only in the minimal (rx-player/minimal
import path) [#1287]- The
NATIVE_TEXT_BUFFER
,HTML_TEXT_BUFFER
andIMAGE_BUFFER
features are now totally optional [#1287, #1293]
Bug fixes
- Fix
setVideoBitrate
andsetAudioBitrate
API which may have led to a higher quality than wanted in the default"seamless"
manualBitrateSwitchingMode
if our buffer-based adaptive logic decided to [#1267, #1271] - On the PlayStation 5, only switch to the
"LOADED"
state once the HTMLMediaElement'sreadyState
of4
has been reached, as it seems to switch to3
too soon there [#1257] - DASH: Fix potential track duplication if more than two
AdaptationSet
have anadaptation-set-switching
<SupplementalProperty>
between one another [#1279] - DASH-WASM: availabilityTimeOffset is actually a floating number [#1278]
Other improvements
- Do not load the last text segment if the current position goes after it as it is unnecessary [#1256]
- Implement better
NetworkError
messages [#1274] - Set a better error message for when no
keySystems
option is set when playing an encrypted content - Fix very small memory leak when reloading a content [#1286]
- Re-check for segments to load immediately after the manifest has been refreshed [#1282]
- When "fallbacking" an undecipherable Representation, now empty the whole buffer if we can't make out where content was in the buffer [#1283]
- Improve segment start detection in buffer when there's unknown data buffered before it [#1284]
- DRM: Selection of alternative EME API like those used on IE11 or Safari has been refactored to facilitate future developments [#1261]
Deprecated
- Deprecate the
manifestUpdateUrl
loadVideo
option as it doesn't seem used anymore [#1288] - Deprecate the
NATIVE_TEXT_BUFFER
,HTML_TEXT_BUFFER
andIMAGE_BUFFER
features as they are now unneeded [#1287, #1293]
New isSpatialAudio
property
This v3.32.1
release brings the new isSpatialAudio
property to audio tracks on the following API:
getAvailableAudioTracks
getAudioTrack
availableAudioTracksChange
audioTrackChange
- The
trackInfo
property for audio tracks linked to aMediaError
- On the
representation
given in the Manifest of a"local"
transport (provided by the experimentalLOCAL
feature to play locally-stored contents).
This property is for now only set to true
when an audio track relies on Dolby Atmos under the "Dolby Digital Plus Joint Object Coding" (or JOC) technology, which allows to distribute Dolby Atmos audio content in a format compatible with Dolby Digital Plus audio (most probably under the "ec-3"
codec), which is Dolby's recommended way of distributing DASH contents with Dolby Atmos audio.
So in short, for now isSpatialAudio
is only set to true
when an audio track relies on Dolby Atmos technology. For any other cases for now, it is not defined (a value of false
would semantically mean that we're sure that the audio track is not spatial audio, which is a guess we prefer not to make for now).
Due to what's allowed in DASH, the isSpatialAudio
property is set on "representations" (a.k.a. qualities), not on the track itself:
function hasSpatialAudio(audioTrack) {
if (!audioTrack) {
return false;
}
return audioTrack.representations
.some(representation => representation.isSpatialAudio === true);
}
if (hasSpatialAudio(player.getAudioTrack()) {
console.log("We're currently playing an audio track with spatial audio");
}
The majority of the development on this feature has been provided by an external contributor, @klatoszewski-oke, which we thank again.
addFeatures
now globally available
On previous RxPlayer releases you were forced to rely on the minimal RxPlayer build to use any of its experimental features like DASH_WASM
(WebAssembly-based DASH MPD parser), LOCAL_MANIFEST
(playback of offline contents), DEBUG_ELEMENT
(debugging UI) or METAPLAYLIST
(client-side content generation).
If instead you used the default RxPlayer build, for example through a simple import RxPlayer from "rx-player";
import in your files, you were just left with the default set of features.
Now any build of the RxPlayer can directly call the addFeatures
static method to add any of those optional features. For example to add the DEBUG_ELEMENT
feature (and thus be able to call the createDebugElement
method), you can write:
// 1. Add `DEBUG_ELEMENT` feature
import RxPlayer from "rx-player";
import { DEBUG_ELEMENT } from "rx-player/experimental/features";
RxPlayer.addFeatures([DEBUG_ELEMENT]);
// 2. Create RxPlayer instance and call method
const player = new RxPlayer({ /* ... */ });
player.createDebugElement(myElement);
Consequently, the features documentation has been moved from the "Getting started" part to our regular "API" documentation.
Deprecation of the NATIVE_TEXT_BUFFER
and HTML_TEXT_BUFFER
features
Both the NATIVE_TEXT_BUFFER
feature and the HTML_TEXT_BUFFER
features, which are the arguments of the addFeatures
static method, have been deprecated as they are now unneeded.
They're basically optional now that importing a text parser for the corresponding type of buffer is going to implicitely add the feature anyway.
This means that if you were previously doing:
import RxPlayerMinimal from "rx-player/minimal";
import { HTML_TEXT_BUFFER, HTML_TTML_PARSER } from "rx-player/features";
RxPlayerMinimal.addFeatures([HTML_TEXT_BUFFER, HTML_TTML_PARSER]);
You can now just omit the HTML_TEXT_BUFFER
feature:
import RxPlayerMinimal from "rx-player/minimal";
import { HTML_TTML_PARSER } from "rx-player/features";
RxPlayerMinimal.addFeatures([HTML_TTML_PARSER]);
As you have no reason to import one of those features without at least one parser, making it optional and implicit will generally just simplify your code.
Many small fixes
This v3.32.1
brings a lot of small fixes and improvements, that you can see on the changelog on top of this release note.
A good chunk of them were found as we were extensively testing both the future v4.0.0
as well as our proof-of-concept of trying to run the RxPlayer's internal logic in a WebWorker (more details on this hopefully soon).
We also reinforced our debugging capabilities by continuing our work on RxPaired, our remote debugger specialized for the RxPlayer that we're using internally at Canal+.
This helps a lot when debugging the RxPlayer on devices such as smart TVs, chromecast and game consoles which often have their own issues.
It helped us on many of those fixed bugs.