setTextTrack
Description
Change the text (subtitles) track.
This method can take a string corresponding to the wanted track's id
property.
This id
can for example be obtained on the corresponding track object returned
by the getAvailableTextTracks
method.
// Setting the first text track
const textTracks = rxPlayer.getAvailableTextTracks();
rxPlayer.setTextTrack(textTracks[0].id);
setTextTrack
can also accept an object argument allowing more precize
settings, described below.
In the case an object is given, the text track's id should be set as in a
trackId
property.
// Setting the first text track
const textTracks = rxPlayer.getAvailableTextTracks();
rxPlayer.setTextTrack({
trackId: textTracks[0].id,
});
- 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.
Changing the text track for any Period
You can change the text track for any
Period (and not just the one being
played) by indicating its id
property in a periodId
property of the Object
given to setTextTrack
.
Periods' id
properties can be retrieved from several means such as the
getAvailablePeriods
method or the
newAvailablePeriods
and
periodChange
events.
// Example:
// Changing the text track for the second Period in the current Manifest
// Recuperating all Periods currently in the Manifest
const periods = rxPlayer.getAvailablePeriods();
// Getting the text track for this second Period (and not the current one):
const textTracks = rxPlayer.getAvailableTextTracks(periods[1].id);
// Updating the text track of the second Period
rxPlayer.setTextTrack({
trackId: textTracks[0].id,
periodId: periods[1].id,
});
Setting the text track as soon as possible
If you want to set an text track as soon as possible, for example to choose an
initial text track before any other one had time to be loaded, you can
perform the setTextTrack
call on the newAvailablePeriods
event:
rxPlayer.addEventListener("newAvailablePeriods", (periods) => {
for (const period of periods) {
const periodId = period.id;
const firstTextTrack = rxPlayer.getAvailableTextTracks(periodId)[0];
if (firstTextTrack !== undefined) {
rxPlayer.setTextTrack({
trackId: firstTextTrack.id,
periodId,
});
}
}
});
This will set the text track for any future Period being loaded, including in future and not-yet-loaded contents.
If you want to also update the text track of already-loaded Periods, you can
also call the getAvailablePeriods
method to obtain their id
property and
update their text tracks right away:
const periods = rxPlayer.getAvailablePeriods();
for (const period of periods) {
const periodId = period.id;
const firstTextTrack = rxPlayer.getAvailableTextTracks(periodId)[0];
if (firstTextTrack !== undefined) {
rxPlayer.setTextTrack({
trackId: firstTextTrack.id,
periodId,
});
}
}
Syntax
player.setTextTrack(textTrackId);
-
arguments:
- textTrackId
string
: Theid
of the track you want to set
- textTrackId
// Setting the current text track
player.setTextTrack(textTrackId);
// More complex settings
player.setTextTrack({
// required
trackId: textTrackId,
// optional
periodId,
});
-
arguments:
-
arg
string|Object
: Either the text track'sid
property of the track you want to set for current Period, or an object with the following properties (onlytrackId
is required):-
trackId
(string
): Theid
property of the track you want to lock. -
periodId
(string|undefined
): If defined, the id of the concerned Period. If not defined, it will be applied for the current Period.
-
-