Call a specific flavor based upon transcoding ID


I have a customer who is interested in playing a specific flavor (low quality for bandwidth reasons) only on their mobile app. They are using the SDK, and would like to call the asset ID for playback based upon a transcoding profile. Is there a way to accomplish this with the API?

Hi @rmclea21,

Please see

I should mention however, that since we utilise ABR [Adaptive BitRate] protocols [HLS is the default nowadays but we also support DASH and HDS], the most suitable flavour of the entry should be auto selected and served, based on the network conditions [to wit: available bandwidth] as well as the device being used for playback.

If there’s a specific issue with the flavour selection in a particular case, it’s best to submit a support ticket with all the required information so that we can look into it further.

Let me know should you have additional questions,

Hey @jess

I spoke with Robert about this issue. He had posted on our behalf.

I’m hoping you can help us resolve this issue. Here are some additional details:

We are accessing these videos from an Android App build on the Kaltura SDK.

The app is built to pull a list of the available tracks from the Kaltura stream and then select and play the lowest bitrate stream.

We are currently seeing only 1 or sometimes 2 available bitrates, often very high quality (.8-1.2mbps), even on videos that Rob and others have confirmed there are many transcoded video streams available which are lower quality (~.4mbps).

The code we are using to pull the available tracks is:


private void subscribeToTracksAvailableEvent() {
player.addEventListener(new PKEvent.Listener() {
public void onEvent(PKEvent event) {
PlayerEvent.TracksAvailable tracksAvailable = (PlayerEvent.TracksAvailable) event;
tracks = tracksAvailable.getPKTracks();

Log.d(LOG_TAG, "Default VIDEO track = " + tracks.getDefaultVideoTrackIndex());

//Force the VIDEO track to use the smallest bitrate in order to decrease the data usage amount
List<VideoTrack> videoTracks = tracks.getVideoTracks();

for(int i = 0; i < videoTracks.size(); i++) {
Log.d(LOG_TAG, "Bitrate value for VideoTrack at index " + i + ": " + videoTracks.get(i).getBitrate());

if (videoTracks != null && videoTracks.size() > 0) {
int smallestBitrateIndex = videoTracks.indexOf(Collections.min(videoTracks, new BitrateComparator()));
lastVideoTrackSelection = smallestBitrateIndex;

Log.d(LOG_TAG, "Smallest VIDEO track index = " + lastVideoTrackSelection);

String smallestUniqueId = videoTracks.get(smallestBitrateIndex).getUniqueId();
Log.d(LOG_TAG, "Smallest Unique ID = " + smallestUniqueId);

} else {
lastVideoTrackSelection = tracks.getDefaultVideoTrackIndex();
Log.d(LOG_TAG, “Selecting default video”);

lastAudioTrackSelection = tracks.getDefaultAudioTrackIndex();
lastTextTrackSelection = tracks.getDefaultTextTrackIndex();
}, PlayerEvent.Type.TRACKS_AVAILABLE);

Again, when I look at the logs outputted from this code, I see a track or two, but not the full set I’m told is available.

I’m selecting the lowest bitrate track successfully from the tracks I can see (track index 0, typically) but am not seeing the full set of tracks.

Is there something you would suggest I modify in the code to better discover the available transcoded tracks?

Thanks for your assistance on this!