Interface which allows to filter
Tracks, before
the
PlayerModel is built.
An instance of the Filter should be added to the PlayerController before
opening it.
Each method should remove the non-desired tracks from the provided
Collections.
Example implementation:
playerController.addPlayerModelFilter(new PlayerModelFilter() {
@Override
public void onVideoTracks(@NonNull Collection videoTracks) {
// Build qualities, we want to keep only the highest bitrate track
// for each resolution.
SparseIntArray qualitiesMap = new SparseIntArray();
for (VideoTrack track : videoTracks) {
for (VideoTrackQuality quality : track.getQualities()) {
final int bitrate = quality.getBitrate();
final int width = quality.getWidth();
if (bitrate < 0 || width < 0) {
continue;
}
qualitiesMap.put(width, Math.max(bitrate, qualitiesMap.get(width)));
}
}
// Apply filter
for (MutableVideoTrack track : videoTracks) {
for (VideoTrackQuality quality : track.getQualities()) {
if (qualitiesMap.get(quality.getWidth()) != quality.getBitrate()) {
track.removeQuality(quality);
}
}
}
}
@Override
public void onAudioTracks(@NonNull Collection audioTracks) {
// Remove italian audio tracks
for (Iterator iterator = audioTracks.iterator(); iterator.hasNext(); ) {
AudioTrack audioTrack = iterator.next();
if (audioTrack.getLanguage().toLowerCase().contains("it")) {
iterator.remove();
}
}
}
@Override
public void onSubtitleTracks(@NonNull Collection subtitleTracks) {
// Remove French subtitle tracks
for (Iterator iterator = subtitleTracks.iterator(); iterator.hasNext(); ) {
SubtitleTrack subtitleTrack = iterator.next();
if (subtitleTrack.getLanguage().toLowerCase().contains("fr")) {
iterator.remove();
}
}
}
});
playerController.open(playbackBundle);