- Overview
- Instantiation
- Basic methods
- Speed control
- Volume control
- Track selection
- getAudioTrack
- getTextTrack
- getVideoTrack
- getAvailableAudioTracks
- getAvailableTextTracks
- getAvailableVideoTracks
- setAudioTrack
- setTextTrack
- disableTextTrack
- setVideoTrack
- disableVideoTrack
- setPreferredAudioTracks
- getPreferredAudioTracks
- setPreferredTextTracks
- getPreferredTextTracks
- setPreferredVideoTracks
- getPreferredVideoTracks
- Bitrate selection
- Buffer control
- Buffer information
- Content information
- Deprecated
- Static properties
- Tools
The RxPlayer has a complete API allowing you to:
- load and stop contents containing video and/or audio media data
- control playback (play, pause, seek, etc.) when a content is loaded.
- get multiple information on the current content and on the player's state.
- choose a specific audio language, subtitles track video track
- force a given bitrate
- update the wanted buffer length to reach
- and more
The following pages define the entire API.
Note: As some terms used here might be too foreign or slightly different than the one you're used to, we also wrote a list of terms and definitions used by the RxPlayer here.
Instantiating a new RxPlayer is necessary before being able to load a content. Doing so is straightforward:
import RxPlayer from "rx-player";
const player = new RxPlayer(options);
The options are all... optional. They are all defined in the Player Options page.
In this chapter, we will go through the basic methods you will need to use when playing a content through the RxPlayer.
arguments:
- options (
Object
)
Loads the content described in the argument.
This is the central method to use when you want to play a new content. The options possible as arguments are all defined in this page.
Despite its name, this method can also load audio-only content.
player.loadVideo({
url: "http://vm2.dashif.org/livesim-dev/segtimeline_1/testpic_6s/Manifest.mpd",
transport: "dash",
autoPlay: true,
});
return value: string
The "state" the player is currently in. Can be either one of those strings:
-
"STOPPED"
: The player is idle. No content is loading nor is loaded. -
"LOADING"
: The player is loading a new content. Most APIs related to the current content are not yet available while the content is loading. -
"LOADED"
: The player has loaded the new content, it is now ready to play. From this point onward you can use APIs interacting with the current content such asseekTo
orsetAudioTrack
. -
"PLAYING"
: The player is currently playing the content. -
"PAUSED"
: The player has paused. -
"ENDED"
: The player has reached the end of the current content. -
"BUFFERING"
: the player has reached the end of the buffer and is waiting for data to be appended. -
"SEEKING"
: The player has reached the end of the buffer because a seek has been performed, new segments are being loaded. -
"RELOADING"
: The player needs to reload its current (for example, when switching the current video track). While this state is active, most API related to the currently playing content are not available. This state should be treated like theLOADING
state.
As it is a central part of our API and can be difficult concept to understand, we have a special page of documentation on player states.
switch (player.getPlayerState()) {
case "STOPPED":
console.log("No content is/will be playing");
break;
case "LOADING":
console.log("A new content is currently loading");
break;
case "LOADED":
console.log("The new content is loaded and ready to be played");
break;
case "PLAYING":
console.log("The content is currently playing");
break;
case "PAUSED":
console.log("The content is currently paused");
break;
case "BUFFERING":
console.log("The content is buffering new data");
break;
case "SEEKING":
console.log("The content is still seeking, waiting for new data");
break;
case "ENDED":
console.log("The content has reached the end.");
break;
case "RELOADING":
console.log("The content is currently reloading");
break;
default:
console.log("This is impossible (issue material!).")
break;
}
arguments:
-
event (
string
): The event name. -
callback (
Function
): The callback for the event. The same callback may be used again when callingremoveEventListener
.
Add an event listener to trigger a callback as it happens. The callback will have the event payload as a single argument.
The RxPlayer API is heavily event-based. As an example: to know when a content
is loaded, the most straightforward way is to add an event listener for the
"playerStateChange"
event. This can be done only through this method.
To have the complete list of player events, consult the Player events page.
player.addEventListener("Error", function(err) {
console.log(`The player crashed: ${err.message}`);
});
arguments:
- event (
string
): The event name. - callback (optional) (
Function
): The callback given when calling the correspondingaddEventListener
API.
Remove an event listener.
That is, remove a callback previously registered with addEventListener
from
being triggered on the corresponding event. This also free-up the corresponding
ressources.
The callback given is optional: if not given, every registered callback to that event will be removed.
player.removeEventListener("playerStateChange", listenerCallback);
return value: Promise.<void>
Play/resume the current video. Equivalent to a video element's play method.
You might want to call that method either to start playing (when the content is
in the "LOADED"
state and auto-play has not been enabled in the last
loadVideo
call) or to resume when the content has been paused.
The returned Promise informs you on the result:
-
if playback succeeds, the Promise is fulfilled
-
if playback fails, the Promise is rejected along with an error message explaining the failure - coming directly from the browser.
Such failure can for example be due to your browser's policy, which may forbid to call play on a media element without any user interaction. Please note that in that case, you will also receive a warning event containing a
MEDIA_ERROR
with the code:MEDIA_ERR_PLAY_NOT_ALLOWED
.
Note: On browsers which do not support Promises natively (such as Internet Explorer 11), a JavaScript implementation is provided instead. This implementation has the exact same implementation than ES2015 Promises.
const resumeContent = () => {
player.play();
};
Pause the current video. Equivalent to a video element's pause method.
Note that a content can be paused even if its current state is BUFFERING
or
SEEKING
.
const pauseContent = () => {
player.pause();
};
Stop playback of the current content if one.
This will totaly un-load the current content. To re-start playing the same
content, you will need to call loadVideo
again.
const stopVideo = () => {
player.stop();
};
return value: Number
Returns the current media element's playing position, in seconds.
For live contents, the returned position will not be re-scaled to correspond to
a live timestamp. If you want that behavior, you can call getWallClockTime
instead.
This is the only difference between the two. Generally, you can follow the following rule:
-
if you want to use that current position to use it with the other APIs (like
seekTo
,getMinimumPosition
,getMaximumPosition
etc.) usegetPosition
. -
if you want to display the current position to the viewer/listener, use
getWallClockTime
instead.
const pos = player.getPosition();
console.log(`The video element's current position is: ${pos} second(s)`);
return value: Number
Returns the current "wall-clock" playing position in seconds.
That is:
-
for live contents, this is the current position scaled to correspond to a live timestamp, in seconds.
-
for non-live contents, returns the position from the absolute beginning time of the content, also in seconds. In the absolute majority of cases this will be equal to the value returned by
getPosition
.
Use this method to display the current position to the user.
const wallClockTime = player.getWallClockTime();
const nowInSeconds = Date.now() / 1000;
const delta = nowInSeconds - wallClockTime;
if (delta < 5) { // (5 seconds of margin)
console.log("You're playing live");
} else {
console.log(`You're playing ${delta} seconds behind the live content`);
}
arguments: Object|Number
Seek in the current content (i.e. change the current position).
The argument can be an object with a single Number
property, either:
-
relative
: seek relatively to the current position -
position
: seek to the given absolute position (equivalent toplayer.getVideoElement().currentTime = newPosition
) -
wallClockTime
: seek to the given wallClock position, as returned bygetWallClockTime
.
The argument can also just be a Number
property, which will have the same
effect than the position
property (absolute position).
// seeking to 54 seconds from the start of the content
player.seekTo({ position: 54 });
// equivalent to just:
player.seekTo(54);
// seeking 5 seconds after the current position
player.seekTo({ relative: 5 });
// seeking 5 seconds before the current position
player.seekTo({ relative: -5 });
// seeking to live content
player.seekTo({ wallClockTime: Date.now() / 1000 });
return value: Number|null
The minimum seekable player position. null
if no content is loaded.
This is useful for live contents, where server-side buffer size are often not infinite. This method allows thus to seek at the earliest possible time.
As the given position is the absolute minimum position, you might add a security margin (like a few seconds) when seeking to this position in a live content. Not doing so could led to the player being behind the minimum position after some time, and thus unable to continue playing.
For VoD contents, as the minimum position normally don't change, seeking at the minimum position should not cause any issue.
// Seeking close to the minimum position (with a 5 seconds security margin)
player.seekTo({ position: player.getMinimumPosition() + 5 });
return value: Number|null
The maximum seekable player position. null
if no content is loaded.
This is useful for live contents, where the buffer end updates continously. This method allows thus to seek directly at the live edge of the content.
Please bear in mind that seeking exactly at the maximum position is rarely a good idea:
- for VoD contents, the playback will end
- for live contents, the player will then need to wait until it can build enough buffer.
As such, we advise to remove a few seconds from that position when seeking.
// seeking 5 seconds before the end (or the live edge for live contents)
player.seekTo({
position: player.getMaximumPosition() - 5
});
return value: Number
Returns the duration of the current video as taken from the video element.
0
, this value will not be equal
to the difference between the maximum and minimum possible position, as would
normally be expected from a property named "duration".
const pos = player.getPosition();
const dur = player.getVideoDuration();
console.log(`current position: ${pos} / ${dur}`);
return value: Error|null
Returns the current "fatal error" if one happenned for the last loaded content.
Returns null
otherwise.
A "fatal error" is an error which led the current loading/loaded content to
completely stop.
Such errors are usually also sent through the "error"
event when they happen.
See the Player Error documentation for more information.
const error = player.getError();
if (!error) {
console.log("The player did not crash");
} else if (error.code === "PIPELINE_LOAD_ERROR") {
console.error("The player crashed due to a failing request");
} else {
console.error(`The player crashed: ${error.code}`);
}
return value: HTMLMediaElement
Returns the media element used by the RxPlayer.
You're not encouraged to use its APIs as they can enter in conflict with the RxPlayer's API.
Despite its name, this method can also return an audio element if the RxPlayer was instantiated with one.
const videoElement = player.getVideoElement();
videoElement.className = "my-video-element";
Free the ressources used by the player.
You can call this method if you know you won't need the RxPlayer anymore.
The following methods allows to update the current speed of playback (also called the "playback rate").
arguments: Number
Updates the current playback rate.
Setting that value to 1
reset the playback rate to its "normal" rythm.
Setting it to 2
allows to play at a speed multiplied by 2 relatively to
regular playback.
Setting it to 0.5
allows to play at half the speed relatively to regular
playback.
etc.
// plays three times faster than normal
player.setPlaybackRate(3);
return value: Number
Returns the current video playback rate. 1
for normal playback, 2
when
playing at double the speed, etc.
const currentPlaybackRate = player.getPlaybackRate();
console.log(`Playing at a x${currentPlaybackRate}} speed`);
Those methods allows to have control over the current audio volume of playing contents.
arguments: Number
Set the current volume, from 0 (no sound) to 1 (the maximum sound level).
Note that the volume set here is persisted even when loading another content. As such, this method can also be called when no content is currently playing.
// set the full volume
player.setVolume(1);
return value: Number
Current volume of the player, from 0 (no sound) to 1 (maximum sound).
0 if muted through the mute
API.
As the volume is not dependent on a single content (it is persistent), this method can also be called when no content is playing.
const volume = player.getVolume();
if (volume === 1) {
console.log("You're playing at maximum volume");
} else if (volume === 0) {
console.log("You're playing at no volume");
} else if (volume > 0.5) {
console.log("You're playing at a high volume");
} else {
console.log("You're playing at a low volume");
}
Mute the volume.
Basically set the volume to 0 while keeping in memory the previous volume to
reset it at the next unMute
call.
As the volume is not dependent on a single content (it is persistent), this method can also be called when no content is playing.
// mute the current volume
player.mute();
When muted, restore the volume to the one previous to the last mute
call.
When the volume is already superior to 0
, this call won't do anything.
As the volume is not dependent on a single content (it is persistent), this method can also be called when no content is playing.
// mute the current volume
player.mute();
// unmute and restore the previous volume
player.unMute();
returns: Boolean
Returns true if the volume is set to 0
.
if (player.isMute()) {
console.log("The content plays with no sound.");
}
The following methods allows to choose the right video audio or text track and to obtain information about the currently playing tracks.
returns: Object|null|undefined
Get information about the audio track currently set.
null
if no audio track is enabled right now.
If an audio track is set and information about it is known, this method will return an object with the following properties:
-
id
(Number|string
): The id used to identify this track. No other audio track for the same Period will have the sameid
.This can be useful when setting the track through the
setAudioTrack
method. -
language
(string
): The language the audio track is in, as set in the Manifest. -
normalized
(string
): An attempt to translate thelanguage
property into an ISO 639-3 language code (for now only support translations from ISO 639-1 and ISO 639-3 language codes). If the translation attempt fails (no corresponding ISO 639-3 language code is found), it will equal the value oflanguage
-
audioDescription
(Boolean
): Whether the track is an audio description of what is happening at the screen. -
dub
(Boolean|undefined
): If set totrue
, this audio track is a "dub", meaning it was recorded in another language than the original. If set tofalse
, we know that this audio track is in an original language. This property isundefined
if we do not known whether it is in an original language. -
representations
(Array.<Object>
): Representations of this video track, with attributes:-
id
(string
): The id used to identify this Representation. No other Representation from this track will have the sameid
. -
bitrate
(Number
): The bitrate of this Representation, in bits per seconds. -
codec
(string|undefined
): The audio codec the Representation is in, as announced in the corresponding Manifest.
-
undefined
if no audio content has been loaded yet or if its information is
unknown.
--
Note for multi-Period contents:
This method will only return the chosen audio track for the Period that is currently playing.
__
In DirectFile mode
(see loadVideo options), if there is
no audio tracks API in the browser, this method will return undefined
.
returns: Object|null|undefined
Get information about the text track currently set.
null
if no audio track is enabled right now.
If a text track is set and information about it is known, this method will return an object with the following properties:
-
id
(Number|string
): The id used to identify this track. No other text track for the same Period will have the sameid
.This can be useful when setting the track through the
setTextTrack
method. -
language
(string
): The language the text track is in, as set in the Manifest. -
normalized
(string
): An attempt to translate thelanguage
property into an ISO 639-3 language code (for now only support translations from ISO 639-1 and ISO 639-3 language codes). If the translation attempt fails (no corresponding ISO 639-3 language code is found), it will equal the value oflanguage
-
closedCaption
(Boolean
): Whether the track is specially adapted for the hard of hearing or not.
undefined
if no text content has been loaded yet or if its information is
unknown.
--
Note for multi-Period contents:
This method will only return the chosen text track for the Period that is currently playing.
__
In DirectFile mode
(see loadVideo options), if there is
no text tracks API in the browser, this method will return undefined
.
returns: Object|null|undefined
Get information about the video track currently set.
null
if no video track is enabled right now.
If a video track is set and information about it is known, this method will return an object with the following properties:
-
id
(Number|string
): The id used to identify this track. No other video track for the same Period will have the sameid
.This can be useful when setting the track through the
setVideoTrack
method. -
representations
(Array.<Object>
): Representations of this video track, with attributes:-
id
(string
): The id used to identify this Representation. No other Representation from this track will have the sameid
. -
bitrate
(Number
): The bitrate of this Representation, in bits per seconds. -
width
(Number|undefined
): The width of video, in pixels. -
height
(Number|undefined
): The height of video, in pixels. -
codec
(string|undefined
): The video codec the Representation is in, as announced in the corresponding Manifest. -
frameRate
(string|undefined
): The video frame rate.
-
-
signInterpreted
(Boolean|undefined
): If set totrue
, the track is known to contain an interpretation in sign language. If set tofalse
, the track is known to not contain that type of content. If not set or set to undefined we don't know whether that video track contains an interpretation in sign language.
undefined
if no video content has been loaded yet or if its information is
unknown.
--
Note for multi-Period contents:
This method will only return the chosen video track for the Period that is currently playing.
--
In DirectFile mode
(see loadVideo options), if there is
no video tracks API in the browser, this method will return undefined
.
returns: Array.<Object>
Returns the list of available audio tracks for the current content.
Each of the objects in the returned array have the following properties:
-
active
(Boolean
): Whether the track is the one currently active or not. Only maximum one audio track can be active at a time. -
id
(string
): The id used to identify the track. Use it for setting the track viasetAudioTrack
. -
language
(string
): The language the audio track is in, as set in the Manifest. -
normalized
(string
): An attempt to translate thelanguage
property into an ISO 639-3 language code (for now only support translations from ISO 639-1 and ISO 639-2 language codes). If the translation attempt fails (no corresponding ISO 639-3 language code is found), it will equal the value oflanguage
-
audioDescription
(Boolean
): Whether the track is an audio description of what is happening at the screen. -
dub
(Boolean|undefined
): If set totrue
, this audio track is a "dub", meaning it was recorded in another language than the original. If set tofalse
, we know that this audio track is in an original language. This property isundefined
if we do not known whether it is in an original language. -
representations
(Array.<Object>
): Representations of this video track, with attributes:-
id
(string
): The id used to identify this Representation. -
bitrate
(Number
): The bitrate of this Representation, in bits per seconds. -
codec
(string|undefined
): The audio codec the Representation is in, as announced in the corresponding Manifest.
-
--
Note for multi-Period contents:
This method will only return the available tracks of the Period that is currently playing.
--
In DirectFile mode (see loadVideo options), if there are no supported tracks in the file or no track management API this method will return an empty Array.
returns: Array.<Object>
Returns the list of available text tracks (subtitles) for the current content.
Each of the objects in the returned array have the following properties:
-
id
(string
): The id used to identify the track. Use it for setting the track viasetTextTrack
. -
language
(string
): The language the text track is in, as set in the Manifest. -
normalized
(string
): An attempt to translate thelanguage
property into an ISO 639-3 language code (for now only support translations from ISO 639-1 and ISO 639-2 language codes). If the translation attempt fails (no corresponding ISO 639-3 language code is found), it will equal the value oflanguage
-
closedCaption
(Boolean
): Whether the track is specially adapted for the hard of hearing or not. -
active
(Boolean
): Whether the track is the one currently active or not.
--
Note for multi-Period contents:
This method will only return the available tracks of the Period that is currently playing.
--
In DirectFile mode (see loadVideo options), if there are no supported tracks in the file or no track management API this method will return an empty Array.
returns: Array.<Object>
Returns the list of available video tracks for the current content.
Each of the objects in the returned array have the following properties:
-
id
(string
): The id used to identify the track. Use it for setting the track viasetVideoTrack
. -
active
(Boolean
): Whether this track is the one currently active or not. -
representations
(Array.<Object>
): Representations of this video track, with attributes:-
id
(string
): The id used to identify this Representation. -
bitrate
(Number
): The bitrate of this Representation, in bits per seconds. -
width
(Number|undefined
): The width of video, in pixels. -
height
(Number|undefined
): The height of video, in pixels. -
codec
(string|undefined
): The video codec the Representation is in, as announced in the corresponding Manifest. -
frameRate
(string|undefined
): The video framerate.
-
-
signInterpreted
(Boolean|undefined
): If set totrue
, the track is known to contain an interpretation in sign language. If set tofalse
, the track is known to not contain that type of content. If not set or set to undefined we don't know whether that video track contains an interpretation in sign language.
--
Note for multi-Period contents:
This method will only return the available tracks of the Period that is currently playing.
--
In DirectFile mode (see loadVideo options), if there are no supported tracks in the file or no track management API this method will return an empty Array.
arguments: string|Number
Change the current audio track.
The argument to this method is the wanted track's id
property. This id
can
for example be obtained on the corresponding track object returned by the
getAvailableAudioTracks
method.
--
Note for multi-Period contents:
This method will only have an effect on the Period that is currently playing. If you want to update the track for other Periods as well, you might want to either:
- update the current audio track once a
"periodChange"
event has been received. - update first the preferred audio tracks through the setPreferredAudioTracks method.
--
- The HLS defines variants, groups of tracks that may be read together
- Safari may decide to enable a track for accessibility or user language convenience (e.g. Safari may switch subtitle to your OS language if you pick another audio language) You can know if another track has changed by listening to the corresponding events that the tracks have changed.
arguments: string
Change the current text (subtitles) track.
The argument to this method is the wanted track's id
property. This id
can
for example be obtained on the corresponding track object returned by the
getAvailableTextTracks
method.
--
Note for multi-Period contents:
This method will only have an effect on the Period that is currently playing. If you want to update the track for other Periods as well, you might want to either:
- update the current text track once a
"periodChange"
event has been received. - update first the preferred text tracks through the setPreferredTextTracks method.
--
- The HLS defines variants, groups of tracks that may be read together
- Safari may decide to enable a track for accessibility or user language convenience (e.g. Safari may switch subtitle to your OS language if you pick another audio language) You can know if another track has changed by listening to the corresponding events that the tracks have changed.
Disable the current text track, if one.
After calling that method, no subtitles track will be displayed until
setTextTrack
is called.
--
Note for multi-Period contents:
This method will only have an effect on the Period that is currently playing.
If you want to disable the text track for other Periods as well, you might want
to call setPreferredVideoTracks instead. With
this method, you can globally apply a null
text track preference - which means
that you would prefer having no text track - by setting its second argument to
true
.
More information can be found on that API's documentation.
arguments: string|Number
Change the current video track.
The argument to this method is the wanted track's id
property. This id
can
for example be obtained on the corresponding track object returned by the
getAvailableAudioTracks
method.
Setting a new video track when a previous one was already playing can lead the rx-player to "reload" this content.
During this period of time:
- the player will have the state
RELOADING
- Multiple APIs linked to the current content might not work.
Most notably:
play
will not workpause
will not workseekTo
will not workgetPosition
will return 0getWallClockTime
will return 0getVideoDuration
will returnNaN
getAvailableAudioTracks
will return an empty arraygetAvailableTextTracks
will return an empty arraygetAvailableVideoTracks
will return an empty arraygetTextTrack
will returnnull
getAudioTrack
will returnnull
setAudioTrack
will throwsetTextTrack
will throw
--
Note for multi-Period contents:
This method will only have an effect on the Period that is currently playing. If you want to update the track for other Periods as well, you might want to either:
- update the current video track once a
"periodChange"
event has been received. - update first the preferred video tracks through the setPreferredVideoTracks method.
--
- No video track API is supported on the current browser
- The media file tracks are not supported on the browser
return value: void
Disable the current video track, if one.
Might enter in RELOADING
state for a short period after calling this API.
--
Note for multi-Period contents:
This method will only have an effect on the Period that is currently playing.
If you want to disable the video track for other Periods as well, you might want
to call setPreferredVideoTracks instead. With
this method, you can globally apply a null
video track preference - which means
that you would prefer having no video track - by setting its second argument to
true
.
More information can be found on that API's documentation.
--
Due to this fact, we do not recommend using this API in directfile mode for
now. You might even receive a reassuring videoTrackChange
event (with a null
payload) while the video track is still actually active.
argument 1: Array.<Object>
argument 2: Boolean | undefined
Allows the RxPlayer to choose an initial audio track, based on language preferences, codec preferences or both.
--
The first argument should be set as an array of objects, each object describing constraints an audio track should respect.
Here is all the possible constraints you can set in any one of those objects (note that all properties are optional here, only those set will have an effect on which tracks will be filtered):
{
language: "fra", // {string|undefined} The language the track should be in
// (in preference as an ISO 639-1, ISO 639-2 or ISO 639-3
// language code).
// If not set or set to `undefined`, the RxPlayer won't
// filter based on the language of the track.
audioDescription: false // {Boolean|undefined} Whether the audio track should
// be an audio description for the visually impaired
// or not.
// If not set or set to `undefined`, the RxPlayer
// won't filter based on that status.
codec: { // {Object|undefined} Constraints about the codec wanted.
// if not set or set to `undefined` we won't filter based on codecs.
test: /ec-3/, // {RegExp} RegExp validating the type of codec you want.
all: true, // {Boolean} Whether all the profiles (i.e. Representation) in a
// track should be checked against the RegExp given in `test`.
// If `true`, we will only choose a track if EVERY profiles for
// it have a codec information that is validated by that RegExp.
// If `false`, we will choose a track if we know that at least
// A SINGLE profile from it has codec information validated by
// that RegExp.
}
}
When encountering a new content or a new choice of tracks in a given content, the RxPlayer will look at each object in that array. If the first object in it defines constaints that cannot be respected under the currently available audio tracks, the RxPlayer will consider the second object in the array and so on.
As such, this array should be sorted by order of preference: from the most wanted constraints to the least.
--
The second argument to that function is an optional boolean which - when set
to true
- will apply that preference to the content and Period that have
already been playing.
By setting it to true
, you might thus change the currently-active track and
the active track of Periods (in DASH) or sub-contents (in MetaPlaylist) that
have already been played in the current content.
By setting it to false
, undefined
or not setting it, those preferences will
only be applied each time a new Period or sub-content is loaded by the
RxPlayer.
Simply put, if you don't set the second argument to true
those preferences
won't be applied to:
-
the content being currently played. Here, the current audio preference will stay in place.
-
the Periods or sub-contents which have already been loaded for the current content. Those will keep the audio track chosen at the last time they were loaded.
If you want the preferences to also be applied to those, you can set the second
argument to true
.
Let's imagine that you prefer to have french or italian over all other audio languages. If not found, you want to fallback to english:
player.setPreferredAudioTracks([
{ language: "fra", audioDescription: false },
{ language: "ita", audioDescription: false },
{ language: "eng", audioDescription: false }
])
Now let's imagine that you want to have in priority a track that contain at least one profile in Dolby Digital Plus (ec-3 codec) without caring about the language:
player.setPreferredAudioTracks([ { codec: { all: false, test: /ec-3/ } ]);
At last, let's combine both examples by preferring french over itialian, italian over english while preferring it to be in Dolby Digital Plus:
player.setPreferredAudioTracks([
{
language: "fra",
audioDescription: false,
codec: { all: false, test: /ec-3/ }
},
// We still prefer non-DD+ french over DD+ italian
{ language: "fra", audioDescription: false },
{
language: "ita",
audioDescription: false,
codec: { all: false, test: /ec-3/ }
},
{ language: "ita", audioDescription: false },
{
language: "eng",
audioDescription: false,
codec: { all: false, test: /ec-3/ }
},
{ language: "eng", audioDescription: false }
]);
--
- No audio track API is supported on the current browser
- The media file tracks are not supported on the browser
return value: Array.<Object>
Returns the current list of preferred audio tracks - by order of preference.
This returns the data in the same format that it was given to either the
preferredAudioTracks
constructor option or the last setPreferredAudioTracks
if it was called.
It will return an empty Array if none of those two APIs were used until now.
argument 1: Array.<Object|null>
argument 2: Boolean | undefined
Allows the RxPlayer to choose an initial text track, based on language and accessibility preferences.
--
The first argument should be set as an array of objects, each object describing constraints a text track should respect.
Here is all the properties that should be set in a single object of that array.
{
language: "fra", // {string} The wanted language
// (ISO 639-1, ISO 639-2 or ISO 639-3 language code)
closedCaption: false // {Boolean} Whether the text track should be a closed
// caption for the hard of hearing
}
When encountering a new content or a new choice of tracks in a given content, the RxPlayer will look at each object in that array. If the first object in it defines constaints that cannot be respected under the currently available text tracks, the RxPlayer will consider the second object in the array and so on.
As such, this array should be sorted by order of preference: from the most wanted constraints to the least.
You can set null
instead of an object to mean that you want no subtitles.
When reaching that point of the array, the RxPlayer will just disable the
current text track.
As such, if you never want any subtitles, you can just set this argument to
[null]
(an array with only the value null
at the first position).
--
The second argument to that function is an optional boolean which - when set
to true
- will apply that preference to the content and Period that have
already been playing.
By setting it to true
, you might thus change the currently-active text track
and the active text track of Periods (in DASH) or sub-contents (in
MetaPlaylist) that have already been played in the current content.
By setting it to false
, undefined
or not setting it, those preferences will
only be applied each time a new Period or sub-content is loaded by the
RxPlayer.
Simply put, if you don't set the second argument to true
those preferences
won't be applied to:
-
the content being currently played. Here, the current text track preference will stay in place.
-
the Periods or sub-contents which have already been loaded for the current content. Those will keep the text track chosen at the last time they were loaded.
If you want the preferences to also be applied to those, you can set the second
argument to true
.
Let's imagine that you prefer to have french or italian subtitles.If not found, you want no subtitles at all.
You will thus call setPreferredTextTracks
that way.
player.setPreferredTextTracks([
{ language: "fra", closedCaption: false },
{ language: "ita", closedCaption: false },
null
]);
This won't apply on the currently loaded content(s), if you also want that, you
can add true
as a second argument:
player.setPreferredTextTracks([
{ language: "fra", closedCaption: false },
{ language: "ita", closedCaption: false },
null
], true);
--
- No text track API is supported on the current browser
- The media file tracks are not supported on the browser
return value: Array.<Object|null>
Returns the current list of preferred text tracks - by order of preference.
This returns the data in the same format that it was given to either the
preferredTextTracks
constructor option or the last setPreferredTextTracks
if
it was called:
{
language: "fra", // {string} The wanted language
// (ISO 639-1, ISO 639-2 or ISO 639-3 language code)
closedCaption: false // {Boolean} Whether the text track should be a closed
// caption for the hard of hearing
}
argument 1: Array.<Object>
argument 2: Boolean | undefined
Allows the RxPlayer to choose an initial video track, based on codec preferences, accessibility preferences or both.
--
The first argument should be set as an array of objects, each object describing constraints a video track should respect.
Here is all the possible constraints you can set in any one of those objects (note that all properties are optional here, only those set will have an effect on which tracks will be filtered):
{
codec: { // {Object|undefined} Constraints about the codec wanted.
// if not set or set to `undefined` we won't filter based on codecs.
test: /hvc/, // {RegExp} RegExp validating the type of codec you want.
all: true, // {Boolean} Whether all the profiles (i.e. Representation) in a
// track should be checked against the RegExp given in `test`.
// If `true`, we will only choose a track if EVERY profiles for
// it have a codec information that is validated by that RegExp.
// If `false`, we will choose a track if we know that at least
// A SINGLE profile from it has codec information validated by
// that RegExp.
}
signInterpreted: true, // {Boolean|undefined} If set to `true`, only tracks
// which are known to contains a sign language
// interpretation will be considered.
// If set to `false`, only tracks which are known
// to not contain it will be considered.
// if not set or set to `undefined` we won't filter
// based on that status.
}
If the first defined object in that array - defining the first set of constraints - cannot be respected under the currently available video tracks, the RxPlayer will check with the second object instead and so on.
As such, this array should be sorted by order of preference: from the most wanted constraints to the least.
When the next encountered constraint is set to null
, the player will simply
disable the video track. If you want to disable the video track by default,
you can just set null
as the first element of this array (e.g. like [null]
).
--
The second argument to that function is an optional boolean which - when set
to true
- will apply that preference to the content and Period that have
already been playing.
By setting it to true
, you might thus change the currently-active track and
the active track of Periods (in DASH) or sub-contents (in MetaPlaylist) that
have already been played in the current content.
By setting it to false
, undefined
or not setting it, those preferences will
only be applied each time a new Period (or sub-content) is loaded by the
RxPlayer.
Simply put, if you don't set the second argument to true
those preferences
won't be applied to:
-
the content being currently played. Here, the current video preference will stay in place.
-
the Periods or sub-contents which have already been loaded for the current content. Those will keep the video track chosen at the last time they were loaded.
If you want the preferences to also be applied to those, you can set the second
argument to true
.
Let's imagine that you prefer to have a track which contains only H265 profiles. You can do:
player.setPreferredVideoTracks([ { codec: { all: false, test: /^hvc/ } } ]);
With that same constraint, let's no consider that the current user prefer in any case to have a sign language interpretation on screen:
player.setPreferredVideoTracks([
// first let's consider the best case: H265 + sign language interpretation
{
codec: { all: false, test: /^hvc/ }
signInterpreted: true,
},
// If not available, we still prefer a sign interpreted track without H265
{ signInterpreted: true },
// If not available either, we would prefer an H265 content
{ codec: { all: false, test: /^hvc/ } },
// Note: If this is also available, we will here still have a video track
// but which do not respect any of the constraints set here.
]);
would thus prefer the video to contain a sign language interpretation.
We could set both the previous and that new constraint that way:
---
For a totally different example, let's imagine you want to play without any
video track enabled (e.g. to start in an audio-only mode). To do that, you can
simply do:
```js
player.setPreferredVideoTracks([null], true);
- No video track API is supported on the current browser
- The media file tracks are not supported on the browser
return value: Array.<Object>
Returns the current list of preferred video tracks - by order of preference.
This returns the data in the same format that it was given to either the
preferredVideoTracks
constructor option or the last setPreferredVideoTracks
if it was called.
It will return an empty Array if none of those two APIs were used until now.
The following methods allows to choose a given bitrate for audio or video content. It can also enable or disable an adaptive bitrate logic or influence it.
return value: Array.<Number>
The different bitrates available for the current video track in bits per seconds.
--
Note for multi-Period contents:
This method will only return the available video bitrates of the Period that is currently playing.
--
In DirectFile mode (see loadVideo options), returns an empty Array.
const videoBitrates = player.getAvailableVideoBitrates();
if (videoBitrates.length) {
console.log(
"The current video is available in the following bitrates",
videoBitrates.join(", ")
);
}
return value: Array.<Number>
The different bitrates available for the current audio track in bits per seconds.
--
Note for multi-Period contents:
This method will only return the available audio bitrates of the Period that is currently playing.
--
In DirectFile mode (see loadVideo options), returns an empty Array.
const audioBitrates = player.getAvailableAudioBitrates();
if (audioBitrates.length) {
console.log(
"The current audio is available in the following bitrates",
audioBitrates.join(", ")
);
}
return value: Number|undefined
Returns the bitrate of the video quality currently set, in bits per second.
Returns undefined
if no content is loaded.
--
Note for multi-Period contents:
This method will only return the chosen video bitrate for the Period that is currently playing.
--
In DirectFile mode (see loadVideo
options), returns undefined
.
return value: Number|undefined
Returns the bitrate of the audio quality currently set, in bits per second.
Returns undefined
if no content is loaded.
--
Note for multi-Period contents:
This method will only return the chosen audio bitrate for the Period that is currently playing.
--
In DirectFile mode (see loadVideo
options), returns undefined
.
arguments: Number
Set the maximum video bitrate reachable through adaptive streaming. The player will never automatically switch to a video quality with a higher bitrate.
This limit can be removed by setting it to Infinity
:
// remove video bitrate limit
player.setMaxVideoBitrate(Infinity);
The effect of this method is persisted from content to content. As such, it can even be called when no content is currently loaded.
Note that this only affects adaptive strategies (you can bypass this limit by
calling setVideoBitrate
).
--
arguments: Number
Set the maximum audio bitrate reachable through adaptive streaming. The player will never automatically switch to a audio Representation with a higher bitrate.
This limit can be removed by setting it to Infinity
:
// remove audio bitrate limit
player.setMaxAudioBitrate(Infinity);
The effect of this method is persisted from content to content. As such, it can even be called when no content is currently loaded.
Note that this only affects adaptive strategies (you can bypass this limit by
calling setAudioBitrate
).
--
return value: Number
Returns the maximum video bitrate reachable through adaptive streaming, in bits per seconds.
This limit can be updated by calling the setMaxVideoBitrate method.
This limit only affects adaptive strategies (you can bypass this limit by
calling setVideoBitrate
), and is set to Infinity
when no limit has been
set.
return value: Number
Returns the maximum audio bitrate reachable through adaptive streaming, in bits per seconds.
This limit can be updated by calling the setMaxAudioBitrate method.
This limit only affects adaptive strategies (you can bypass this limit by
calling setAudioBitrate
), and is set to Infinity
when no limit has been
set.
arguments: Number
Force the current video track to be of a certain bitrate.
If an video quality in the current track is found with the exact same bitrate, this quality will be set.
If no video quality is found with the exact same bitrate, either:
-
the video quality with the closest bitrate inferior to that value will be chosen.
-
if no video quality has a bitrate lower than that value, the video quality with the lowest bitrate will be chosen instead.
By calling this method with an argument set to -1
, this setting will be
disabled and the RxPlayer will chose the right quality according to its adaptive
logic.
You can use getAvailableVideoBitrates
to get the list of available bitrates
for the current video track.
Note that the value set is persistent between loadVideo
calls.
As such, this method can also be called when no content is playing (the same
rules apply for future contents).
--
arguments: Number
Force the current audio track to be of a certain bitrate.
If an audio quality in the current track is found with the exact same bitrate, this quality will be set.
If no audio quality is found with the exact same bitrate, either:
-
the audio quality with the closest bitrate inferior to that value will be chosen.
-
if no audio quality has a bitrate lower than that value, the audio quality with the lowest bitrate will be chosen instead.
By calling this method with an argument set to -1
, this setting will be
disabled and the RxPlayer will chose the right quality according to its adaptive
logic.
You can use getAvailableAudioBitrates
to get the list of available bitrates
for the current audio track.
Note that the value set is persistent between loadVideo
calls.
As such, this method can also be called when no content is playing (the same
rules apply for future contents).
--
arguments: Number
Get the last video bitrate manually set. Either via setVideoBitrate
or via
the initialVideoBitrate
constructor option.
This value can be different than the one returned by getVideoBitrate
:
getManualVideoBitrate
returns the last bitrate set manually by the usergetVideoBitrate
returns the actual bitrate of the current video track
-1
when no video bitrate is forced.
arguments: Number
Get the last audio bitrate manually set. Either via setAudioBitrate
or via
the initialAudioBitrate
constructor option.
This value can be different than the one returned by getAudioBitrate
:
getManualAudioBitrate
returns the last bitrate set manually by the usergetAudioBitrate
returns the actual bitrate of the current audio track
-1
when no audio bitrate is forced.
The methods in this chapter allow to get and set limits on how the current buffer can grow.
arguments: Number
Set the buffering goal, as a duration ahead of the current position, in seconds.
Once this size of buffer reached, the player won't try to download new segments anymore.
--
return value: Number
defaults: 30
returns the buffering goal, as a duration ahead of the current position, in seconds.
arguments: Number
Set the maximum kept buffer before the current position, in seconds.
Everything before that limit (currentPosition - maxBufferBehind
) will be
automatically garbage collected.
This feature is not necessary as the browser should by default correctly remove old segments from memory if/when the memory is scarce.
However on some custom targets, or just to better control the memory footprint of the player, you might want to set this limit.
You can set it to Infinity
to remove this limit and just let the browser do
this job instead.
--
return value: Number
defaults: Infinity
Returns the maximum kept buffer before the current position, in seconds.
This setting can be updated either by:
- calling the
setMaxBufferBehind
method. - instanciating an RxPlayer with a
maxBufferBehind
property set.
arguments: Number
Set the maximum kept buffer ahead of the current position, in seconds.
Everything superior to that limit (currentPosition + maxBufferAhead
) will
be automatically garbage collected.
This feature is not necessary as the browser should by default correctly remove old segments from memory if/when the memory is scarce.
However on some custom targets, or just to better control the memory footprint of the player, you might want to set this limit.
You can set it to Infinity
to remove any limit and just let the browser do
this job instead.
The minimum value between this one and the one returned by
getWantedBufferAhead
will be considered when downloading new segments.
10
) might prevent the browser to play the content at all.
--
return value: Number
defaults: Infinity
Returns the maximum kept buffer ahead of the current position, in seconds.
This setting can be updated either by:
- calling the
setMaxBufferAhead
method. - instanciating an RxPlayer with a
maxBufferAhead
property set.
The methods in this chapter allows to retrieve information about what is currently buffered.
return value: Number
Returns in seconds the difference between:
- the start of the current contiguous loaded range.
- the end of it.
return value: Number
Returns in seconds the difference between:
- the start of the current contiguous loaded range.
- the current time.
return value: Number
Returns in seconds the difference between:
- the current time.
- the end of the current contiguous loaded range.
The methods documented in this chapter allows to obtain general information about the current loaded content.
return value: Boolean
Returns true
if the content is a "live" content (e.g. a live TV Channel).
false
otherwise.
Also false
if no content is loaded yet.
if (player.isLive()) {
console.log("We're playing a live content");
}
return value: string|undefined
Returns the URL of the downloaded Manifest.
In DirectFile mode (see loadVideo options), returns the URL of the content being played.
Returns undefined
if no content is loaded yet.
const url = player.getUrl();
if (url) {
console.log("We are playing the following content:", url);
}
return value: string|undefined
Returns the type of keySystem used for DRM-protected contents.
The following methods are deprecated. They are still supported but we advise users to not use those as they might become not supported in the future.
--
v4.0.0
(see Deprecated APIs).
--
return value: Manifest|null
Returns the current loaded Manifest if one. The Manifest object structure is relatively complex and is described in the Manifest Object structure page.
null
if the player is either stopped or not loaded.
null
in DirectFile mode (see loadVideo
options).
The Manifest will be available before the player reaches the "LOADED"
state.
--
v4.0.0
(see Deprecated APIs).
--
return value: Object|null
Returns the Adaptations being loaded per type if a Manifest is loaded. The returned object will have at most a key for each type ("video", "audio", "text" and "image") which will each contain an array of Adaptation Objects.
The Adaptation object structure is relatively complex and is described in the Manifest Object structure page.
null
if the current Adaptations are not known yet.
null
in DirectFile mode (see loadVideo
options).
--
v4.0.0
(see Deprecated APIs).
--
return value: Object|null
Returns the Representations being loaded per type if a Manifest is loaded. The returned object will have at most a key for each type ("video", "audio", "text" and "image") which will each contain an array of Representation Objects.
An Representation object structure is relatively complex and is described in the Manifest Object structure page.
null
if the current Representations are not known yet.
null
in DirectFile mode (see loadVideo
options).
--
v4.0.0
(see Deprecated APIs).
--
return value: Array.<Object>|null
The current image track's data, null if no content is loaded / no image track data is available.
The returned array follows the usual image playlist structure, defined here.
null
in DirectFile mode (see loadVideo
options).
--
v4.0.0
(see Deprecated APIs).
--
arguments: Boolean
Switch or exit the <video>
element to fullscreen mode. The argument is an
optional boolean:
-
if set:
true
: enters fullscreenfalse
: exit fullscreen
-
if not set: enter fullscreen
Note that only the video element will be set to fullscreen mode. You might prefer to implement your own method to include your controls in the final UI.
--
v4.0.0
(see Deprecated APIs).
--
Exit fullscreen mode. Same than setFullscreen(false)
.
--
v4.0.0
(see Deprecated APIs).
--
return value: Boolean
Returns true
if the video element is in fullscreen mode, false
otherwise.
if (player.isFullscreen()) {
console.log("The player is in fullscreen mode");
}
--
v4.0.0
(see Deprecated APIs).
--
return value: TextTrack|null
Returns the first text track of the video's element, null if none.
This is equivalent to:
const el = player.getVideoElement();
const textTrack = el.textTracks.length ? el.textTracks[0] : null;
This chapter documents the static properties that can be found on the RxPlayer class.
type: Number
The current version of the RxPlayer.
type: Object
The different "types" of Error you can get on playback error,
See the Player Error documentation for more information.
type: Object
The different Error "codes" you can get on playback error,
See the Player Error documentation for more information.
type: string
default: "NONE"
The current level of verbosity for the RxPlayer logs. Those logs all use the console.
From the less verbose to the most:
-
"NONE"
: no log -
"ERROR"
: unexpected errors (viaconsole.error
) -
"WARNING"
: The previous level + minor problems encountered (viaconsole.warn
) -
"INFO"
: The previous levels + noteworthy events (viaconsole.info
) -
"DEBUG"
: The previous levels + normal events of the player (viaconsole.log
)
If the value set to this property is different than those, it will be
automatically set to "NONE"
.
import RxPlayer from "rx-player";
RxPlayer.LogLevel = "WARNING";
The RxPlayer has several "tools", which are utils which can be imported without importing the whole RxPlayer itself.
They are all documented here.
--
--
An experimental tool to probe browser media capabilities:
- Decoding capabilities
- DRM support
- HDCP support
- Display capabilities
You can find its documentation here.
--
--
The TextTrackRenderer allows to easily render subtitles synchronized to a video element.
It allows easily to dynamically add subtitles (as long as it is in one of the following format: srt, ttml, webVTT or SAMI) to a played video.
This tool is documented here.
--
--
The parseBifThumbnails
function parses BIF files, which is a format created by
Canal+ to declare thumbnails linked to a given content.
This tool is documented here.
--
--
The createMetaplaylist
function build a metaplaylist object from given
informations about contents.
This tool is documented here.