The Kaltura Player uses a comprehensive API to handle all kind of tracks, including video (bitrate), audio, and text (language) tracks. This document demonstrates how to use the API to manage those player tracks.

Track Availability

Tracks are available only when the video source has loaded. There are two ways to verify that tracks are available:

Using the TRACKS_CHANGED event:

player.addEventListener(player.Event.TRACKS_CHANGED, function(event) {
  var tracks = event.payload.tracks;
  console.log('This source has ' + tracks.length + ' tracks');
});

Using the ready promise:

player.ready().then(function() {
  var tracks = player.getTracks();
  console.log('This source has ' + tracks.length + ' tracks');
});

Retrieve Tracks

Getting All Track Types

The code below shows how to get all of the player tracks using the getTracks method:

var tracks = player.getTracks();
console.log('This source has ' + tracks.length + ' tracks');

Getting Specific Track Types

It’s also possible to get a specific kind of track.
The code below shows how to get a specific track by passing a parameter to the getTracks method:

var videoTracks = player.getTracks(player.Track.VIDEO);
var audioTracks = player.getTracks(player.Track.AUDIO);
var textTracks = player.getTracks(player.Track.TEXT);
console.log('This source has ' + videoTracks.length + ' video tracks');
console.log('This source has ' + audioTracks.length + ' audio tracks');
console.log('This source has ' + textTracks.length + ' text tracks');

Getting the Current Active Tracks

The code below shows how to get the current active player tracks using the getActiveTracks method:

var activeTracks = player.getActiveTracks();
console.log('The active video track is: ' + activeTracks.video);
console.log('The active audio track is: ' + activeTracks.audio);
console.log('The active text track is: ' + activeTracks.text);

Video Tracks

This section demonstrates how to manage video tracks

Adaptive Bitrate and Manual Selection

There are two ways to use video tracks (or bitrate): Adaptive Bitrate and Manual Selection.

When Adaptive Bitrate is enabled, the player controls the video track selection according to the network conditions. This is the default mode.

When selecting a specific video track manually, the player switches from Adaptive Bitrate mode to Manual Selection.

Important: On Safari browsers, only the Adaptive Bitrate mode is available.

Getting the Current Mode

The player exposes the current mode using the isAdaptiveBitrateEnabled method:

if (player.isAdaptiveBitrateEnabled()) {
  console.log('The current bitrate mode is Adaptive Bitrate');
} else {
  console.log('The current bitrate mode is Manual Selection');
}

You can also use the ABR_MODE_CHANGED event to expose the current mode:

player.addEventListener(player.Event.ABR_MODE_CHANGED, function(event) {
  if (event.payload.mode === 'auto') {
    console.log('The player has switched to Adaptive Bitrate');
  } else {
    // manual
    console.log('The player has switched to Manual Selection');
  }
});

Video Track Selection

To select a specific video track (bitrate), use the selectTrack method.

The code below shows how to force the player to play the top bitrate track:

var videoTracks = player.getTracks(player.Track.VIDEO);
var topBandwidthTrack;
var topBandwidth = 0;
for (var i = 0; i < videoTracks.length; i++) {
  if (videoTracks[i].bandwidth > topBandwidth) {
    topBandwidthTrack = videoTracks[i];
    topBandwidth = topBandwidthTrack.bandwidth;
  }
}
player.selectTrack(topBandwidthTrack);

By selecting a specific video track, the player switches to Manual Selection mode.

To go back to the Adaptive Bitrate mode, use the enableAdaptiveBitrate method:

player.addEventListener(player.Event.ABR_MODE_CHANGED, function(event) {
  // event.payload.mode === "auto"
});
player.enableAdaptiveBitrate();

Once the video track has changed, either automatically or manually, the player triggers a VIDEO_TRACK_CHANGED event:

player.addEventListener(player.Event.VIDEO_TRACK_CHANGED, function(event) {
  console.log('The new bitrate is: ' + event.payload.selectedVideoTrack.bandwidth);
});

Audio Tracks

This section shows you how to manage audio tracks.

Audio Track Selection

To select a specific audio track, use the selectTrack method.

The code below shows how to select the Spanish audio track:

var audioTracks = player.getTracks(player.Track.AUDIO);
for (var i = 0; i < audioTracks.length; i++) {
  if (audioTracks[i].language === 'es') {
    player.selectTrack(audioTracks[i]);
  }
}

Once the audio track has changed, the player triggers an AUDIO_TRACK_CHANGED event:

player.addEventListener(player.Event.AUDIO_TRACK_CHANGED, function(event) {
  console.log('The new audio track is: ' + event.payload.selectedAudioTrack.label);
});

Text Tracks

This section shows you how to manage text tracks.

Text Track Selection

To select a specific text track, use the selectTrack method.

The code below shows how to select the Spanish text track:

var textTracks = player.getTracks(player.Track.TEXT);
for (var i = 0; i < textTracks.length; i++) {
  if (textTracks[i].language === 'es') {
    player.selectTrack(textTracks[i]);
  }
}

Once the text track has changed, the player triggers a TEXT_TRACK_CHANGED event:

player.addEventListener(player.Event.TEXT_TRACK_CHANGED, function(event) {
  console.log('The new text track is: ' + event.payload.selectedTextTrack.label);
});

Disabling the Text Track

To disable the text track, use the hideTextTrack method.

In this case the player triggers a TEXT_TRACK_CHANGED event with ‘off’ track:

player.addEventListener(player.Event.TEXT_TRACK_CHANGED, function(event) {
  // event.payload.selectedTextTrack.label === 'Off'
});
player.hideTextTrack();

Text Track default label

A Text Track has language and label properties. The label is set by the label property in the manifest.
However, in case the manifest does not have a label property - the language property will be set as the tracks label.
You can set a custom label to a Text Track - read about it here