Migration guide: from v3.x.x to v4.0.0
Overview
The v4.0.0
release is a major RxPlayer release.
It deeply changes some aspects of the RxPlayer API, particularly relative to tracks and quality selection.
Though we succeeded to maintain API compatibility for more than 6 years despite huge changes in the OTT media streaming domain, we considered that an API overhaul was now necessary to better handle the features of the current streaming landscape (normalization of multi-Period contents, multiplication of potential video, audio and text characteristics, low-latency streaming, Content Steering, MSE-in-worker etc.) as well as to improve the RxPlayer maintainance by removing old deprecated but burdensome API.
Still, we understand that porting to a new major version of the RxPlayer might not be a
small task, and thus decided to continue maintaining the v3.x.x for some time and
releasing the v4.0.0
with this complete migration guide.
Organization of this documentation
The goal of this documentation is not to advertise about new RxPlayer features, it is only to list all breaking changes and indicate how to replace the corresponding options, methods and events.
If you want to know what was brought into a v4.x.x
release instead, you can obtain more
information by looking at release notes, the changelog,
the API documentation and tutorials.
Important changes
New player state: "FREEZING"
The "FREEZING"
state
A new player state, "FREEZING"
, has been added.
This state is switched to when playback is not advancing despite not being paused and despite the player having some buffered media data to play. Generally a brief and transitory state, there may even be valid and un-worrying reasons behind this state: for example it may be caused by some minor performance issue after heavy operations like seeking, or triggered when the player is waiting for the license to be loaded.
Though a "FREEZING"
state may also be linked to a real content or device issue. The
RxPlayer will use tricks to try to come out of a "FREEZING"
state if it locks playback
for too long, but if it happens often and/or for long periods of time, it might be a sign
that there some other issues to look for either on the content, on the environment
(device, browser, hardware etc.) or both.
Previously such "FREEZING"
state was either reported as a "BUFFERING"
state or not
reported at all (i.e. we would for example be in a "PLAYING"
state) depending on the
case. As such this new state does not correspond to any new behavior, it just gives more
precision about something that was previously not specifically described.
How to handle it
Player states in general are still communicated through the
playerStateChange
event and
getPlayerState
methods, which you may now
want to update to handle the new "FREEZING"
case.
For most cases, showing a waiting indicator on top of the video like a spinner, like you
probably already do for the "BUFFERING"
case, should be sufficient.
rxPlayer.addEventListener("playerStateChange", (state) => {
switch (state) {
case "BUFFERING":
case "FREEZING":
displaySpinner();
break;
// ...
}
});
Some applications might however prefer to report differently such "FREEZING"
cases, for
example to detect playback issues on some devices.
RxPlayer behavior when reaching the content's end
The RxPlayer previously automatically stopped the content when its end was reached unless
the (now removed) stopAtEnd
constructor option was set to false
.
As a saner default, the RxPlayer now won't stop the content when reaching its end anymore,
if you want to reproduce this behavior, you can simply stop the content when the "ENDED"
player state is reached:
rxPlayer.addEventListener("playerStateChange", (state) => {
if (state === "ENDED") {
rxPlayer.stop();
}
});
The "RELOADING"
state now has to be handled
Brought in the v3.6.0
(2018), the "RELOADING"
player state was switched to when the
RxPlayer needed to reset buffers in specific situations. Because just adding a player
state is a breaking change, we were careful to only allow it when specific options were
set.
The RxPlayer may now switch to the "RELOADING"
state in any situation where it could fix
playback issues, allowing us to more effectively work-around specific bugs.
This means that you now have to make sure that state is considered. You can see more
information on the "RELOADING"
state
in the player state page. Thankfully, it
is now possible to perform more operations under that state, such as switching tracks and
qualities.
Removal of track preferences API
All methods related to track preferences:
setPreferredAudioTracks
setPreferredTextTracks
setPreferedVideoTracks
getPreferredAudioTracks
getPreferredTextTracks
getPreferredVideoTracks
As well as the following constructor options:
preferredAudioTracks
preferredTextTracks
preferredVideoTracks
Have been removed because their behaviors and more can be replaced by the new track API.
For more information on how to replace them, you can go to the preferences pages of the migration guide.
Removal of bitrate control API
All methods related to controlling the current audio and video bitrate:
setMinVideoBitrate
setMinAudioBitrate
getMinVideoBitrate
getMinAudioBitrate
setMaxVideoBitrate
setMaxAudioBitrate
getMaxVideoBitrate
getMaxAudioBitrate
setVideoBitrate
setAudioBitrate
getManualVideoBitrate
getManualAudioBitrate
As well as the following constructor options:
minVideoBitrate
minAudioBitrate
maxVideoBitrate
maxAudioBitrate
Have been removed.
To replace them, we created the much more powerful "Representations locking" family of methods and options. Documentation on how to do the switch from the old API to the new is documented in the Bitrate Selection page of the migration guide
Other modifications
Constructor options
Constructor options are options given when instantiating a new RxPlayer.
Several of these options have been removed, they are all listed in the Constructor Options page.
loadVideo
options
Several options of the central loadVideo
method have been updated and removed.
They are all listed in the loadVideo
Options page.
Player events
All updated and removed events are listed in the Player Events page.
Player Errors
All updated and removed player errors and warnings are listed in the Player Error page.
Methods
Several RxPlayer methods were removed, replaced or had their arguments changed. This is all documented in the Player Methods page.
Types
Several RxPlayer types have been removed and updated. This is all documented in the Player Types page.
Experimental features
The DASH_WASM
and DEBUG_ELEMENT
features are now moved as stable features.
This means that what was previously written as:
import { DASH_WASM, DEBUG_ELEMENT } from "rx-player/experimental/features";
Should now be written:
import { DASH_WASM, DEBUG_ELEMENT } from "rx-player/features";
Experimental tools
The parseBifThumbnails
tool is now considered a stable tool.
This means that what was previously written as:
import { parseBifThumbnails } from "rx-player/experimental/tools";
Should now be written:
import { parseBifThumbnails } from "rx-player/tools";
Miscellaneous
Other minor changes on which you might have relied are present in the v4.x.x:
-
From now, you should not expect Internet Explorer 11 to keep being supported as we won't be testing this browser nor officially providing support for it anymore.
You may however be able contribute if its support is important to you, as long as those modifications have a low influence on the code's health.
-
It is not possible anymore to use environment variables (like
RXP_DASH
) to bundle a personalized build yourself. If you want to have a personalized build, you now have to rely on the mininal RxPlayer. -
"Forced" text tracks are now not switched according to audio track preferences because the preference API has been removed.
Instead, the forced text track linked to the default audio track is by default chosen and an application can change it at any time.