Interface PlayerModelFilter

  • All Known Implementing Classes:
    AbstractPlayerModelFilter

    public interface PlayerModelFilter
    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);
     
    Since:
    4.2.26