v3.10.0
Release 3.10.0 (2018-12-11)
Overview
The v3.10.0 brings a lot of features and improvements:
- dash: the player now handle DASH' XLinks in "onLoad" resolution mode
- dash: adaptation-set-switching is now available
- compatibility: we improved the API to allow a cleaner management of browsers restrictive autoplay policies
- compatibility: we fixed many other compatibility issues and inconsistencies
- and more
DASH: XLink management for the "onLoad" resolution mode
XLink is a specification allowing to refer to external links in a given XML document. In the context of DASH, it can be used to define a single or multiple Periods not directly in the Manifest, but via another external ressource.
DASH' XLinks can come in two flavors:
-
in an "onLoad" resolution mode: the corresponding link is loaded as soon as the Manifest is loaded
-
in a "onRequest" resolution mode: the corresponding link is only loaded when we need it.
For the moment, only the onLoad flavor is handled, but onRequest support should come very soon in one of our next release.
DASH: adaptation-set-switching
The RxPlayer already handle advanced DASH features such as multiple media licenses for different media qualities.
This comes with several drawbacks however, such as the obligation to divide such qualities into separate DASH AdaptationSets
, which the player precedently handled as different unrelated tracks. To allow seamless switching between those, we had to support a specific DASH feature called adaptation-set-switching
.
As managing this advanced feature could complexify a lot our API, we decided to provide a straightforward implementation: "switchable" AdaptationSet
having similar characteristics are now merged into a single RxPlayer's Adaptation
.
This means that the RxPlayer definition of an Adaptation
is slightly different than a DASH AdaptationSet
. To clarify that difference, we decided to add a new documentation page.
Better autoplay policies management
Due to browser's policies a play
action can be completely blocked by the browser. This is often done as a mechanism to prevent a video from being played without any user interaction.
To alert users when a call to play
failed, we decided to bring two new features:
- a
"MEDIA_ERR_METADATA_NOT_LOADED"
warning will be sent when aplay
call is blocked by the browser. This is documented in the errors documentation play
now returns a Promise, which mirrors the same Promise coming from the browser.
Compatibility improvements
As with the last releases, we continue towards improving our compatibility across all browsers:
-
we added a new warning:
"MEDIA_ERR_METADATA_NOT_LOADED"
, triggered when we're unable to load the current content. For the moment, this problem has only been seen on the Samsung mobile browser, when playing a content indirectfile
mode. This error is documented here. -
we re-defined when our
LOADED
state should be set, to be sure it is the same definition across all browsers. Until now, the state could arrive too soon onFirefox
leading sometimes to aSEEKING
orPAUSED
state without any interaction. -
we fixed an issue we had with Smooth Content on Edge, which prevented some contents to be played with that browser
-
we fixed an issue we had with the
MediaCapabilitiesProber
on Safari -
we provide an implementation of
Promise
for browsers not supporting it
Deprecating NetworkError "xhr" property
To prepare the management of CMAF low-latency and other advanced features, we decided to deprecate the xhr
property, as found in a NetworkError
.
This is because those new features might lead us to use the fetch
API instead of an XMLHttpRequest
, which is necessary in the current NetworkError
API.
Changelog
Features
- dash: Manage xlinks in "onLoad" resolution model
- dash: Implement AdaptationSet switching by merging similar and switchable AdaptationSet into a single track
- compat: add
MEDIA_ERR_METADATA_NOT_LOADED
warning, triggered when the browser has issues with loading the initial data (only seen on the Samsung mobile browser in directfile mode) - compat: add
MEDIA_ERR_PLAY_NOT_ALLOWED
warning, triggered when the application tries toplay
but the current browser doesn't allow it (often due to autoplay policy) - api: the
play
API now returns a Promise, mirroring the original browser'splay
API
Deprecated
- api: The
xhr
property from aNetworkError
is now deprecated
Bug fixes
- compat/smooth: fix fatal error
BUFFER_APPEND_ERROR
happening on some HSS contents with Edge - dash/smooth: never refresh the manifest if its content is not dynamic
- dash/smooth: use new URL if the initial manifest request is redirected (again :/ - thanks @fnatte)
- api: do not go out of the
LOADING
state if the metadata could not be fetched (even if the browser tells us otherwise) - to work around Samsung Browser bug - api: avoid going out of the
LOADED
state until the initial seek is done and metadata is fetched - compat: use Promise ponyfill to improve IE11 compatibility with the MediaCapabilitiesProber and some EME functionalities
- api: translate most IETF language tags into corresponding ISO639-3 codes for the
normalizedLanguage
property - given from APIs such asgetAvailableAudioTracks
- tools: fix
mediaCapabilitiesProber.getCompatibleDRMConfigurations
experimental tool on Safari - api: filter out duplicates in
getAvailableVideoBitrates
andgetAvailableAudioBitrates
Other improvements
- dash: better infer unknown Period durations
- dash: better manage overlapping Periods by giving more importance to the last chronological one
- memory: clean-up
Adaptation
andRepresentation
informations on Periods which are not considered anymore - log: warn through our logs every time a warning event is sent by the API
- demo: authorize DRMs in IE11 or Safari when in HTTP in the demo page
- demo: fix time indication for non-live contents