How to add Adaptive Track Selector in Exo-player v2.x?












1















I'm setting up Exo Player in my app and I have implemented DASH adaptive streaming in my player, and want to add the functionality to play the track of specific quality selected by the user.



My Exo player version is 2.9.3, I tried implementing by following these Stackoverflow Post,Medium Post, but it's bit confusing and some part of the code is deprecated, and saying the truth is that I am a beginner.



Here's my code for initializing the player:-



private void initializePlayer() {
if (player == null) {
bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory factory = new PlayerTrackSelector(bandwidthMeter);
trackSelector = new DefaultTrackSelector(factory);
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
player.addVideoListener(this);
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
player.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
player.addListener(this);
playerView.setPlayer(player);
}
MediaSource mediaSource = buildMediaSource(Uri.parse("http://192.168.43.238:3000/storage/video-dash/9e351142a4eb1664643bf93ba13959e8.mpd"));
player.prepare(mediaSource, true, false);
player.setPlayWhenReady(playWhenReady);
player.seekTo(currentWindow, playbackPosition);
}


And the TrackSelector Class:-



public class PlayerTrackSelector implements TrackSelection.Factory {
private BandwidthMeter bandwidthMeter;

public PlayerTrackSelector(BandwidthMeter bandwidthMeter) {
this.bandwidthMeter = bandwidthMeter;
}

@Override
public TrackSelection createTrackSelection(TrackGroup group, BandwidthMeter bandwidthMeter, int... tracks) {

return new AdaptiveTrackSelection(group,tracks,bandwidthMeter,
AdaptiveTrackSelection.DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION,
AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE,
AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS,
Clock.DEFAULT);
}
}


I expect to get a list of available quality types and let the user select one of them and play the rest of the content with the selected type, this question is maybe broad but please guide me a little.










share|improve this question





























    1















    I'm setting up Exo Player in my app and I have implemented DASH adaptive streaming in my player, and want to add the functionality to play the track of specific quality selected by the user.



    My Exo player version is 2.9.3, I tried implementing by following these Stackoverflow Post,Medium Post, but it's bit confusing and some part of the code is deprecated, and saying the truth is that I am a beginner.



    Here's my code for initializing the player:-



    private void initializePlayer() {
    if (player == null) {
    bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory factory = new PlayerTrackSelector(bandwidthMeter);
    trackSelector = new DefaultTrackSelector(factory);
    player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
    player.addVideoListener(this);
    playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
    player.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
    player.addListener(this);
    playerView.setPlayer(player);
    }
    MediaSource mediaSource = buildMediaSource(Uri.parse("http://192.168.43.238:3000/storage/video-dash/9e351142a4eb1664643bf93ba13959e8.mpd"));
    player.prepare(mediaSource, true, false);
    player.setPlayWhenReady(playWhenReady);
    player.seekTo(currentWindow, playbackPosition);
    }


    And the TrackSelector Class:-



    public class PlayerTrackSelector implements TrackSelection.Factory {
    private BandwidthMeter bandwidthMeter;

    public PlayerTrackSelector(BandwidthMeter bandwidthMeter) {
    this.bandwidthMeter = bandwidthMeter;
    }

    @Override
    public TrackSelection createTrackSelection(TrackGroup group, BandwidthMeter bandwidthMeter, int... tracks) {

    return new AdaptiveTrackSelection(group,tracks,bandwidthMeter,
    AdaptiveTrackSelection.DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
    AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
    AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
    AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION,
    AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE,
    AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS,
    Clock.DEFAULT);
    }
    }


    I expect to get a list of available quality types and let the user select one of them and play the rest of the content with the selected type, this question is maybe broad but please guide me a little.










    share|improve this question



























      1












      1








      1








      I'm setting up Exo Player in my app and I have implemented DASH adaptive streaming in my player, and want to add the functionality to play the track of specific quality selected by the user.



      My Exo player version is 2.9.3, I tried implementing by following these Stackoverflow Post,Medium Post, but it's bit confusing and some part of the code is deprecated, and saying the truth is that I am a beginner.



      Here's my code for initializing the player:-



      private void initializePlayer() {
      if (player == null) {
      bandwidthMeter = new DefaultBandwidthMeter();
      TrackSelection.Factory factory = new PlayerTrackSelector(bandwidthMeter);
      trackSelector = new DefaultTrackSelector(factory);
      player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
      player.addVideoListener(this);
      playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
      player.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
      player.addListener(this);
      playerView.setPlayer(player);
      }
      MediaSource mediaSource = buildMediaSource(Uri.parse("http://192.168.43.238:3000/storage/video-dash/9e351142a4eb1664643bf93ba13959e8.mpd"));
      player.prepare(mediaSource, true, false);
      player.setPlayWhenReady(playWhenReady);
      player.seekTo(currentWindow, playbackPosition);
      }


      And the TrackSelector Class:-



      public class PlayerTrackSelector implements TrackSelection.Factory {
      private BandwidthMeter bandwidthMeter;

      public PlayerTrackSelector(BandwidthMeter bandwidthMeter) {
      this.bandwidthMeter = bandwidthMeter;
      }

      @Override
      public TrackSelection createTrackSelection(TrackGroup group, BandwidthMeter bandwidthMeter, int... tracks) {

      return new AdaptiveTrackSelection(group,tracks,bandwidthMeter,
      AdaptiveTrackSelection.DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
      AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION,
      AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE,
      AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS,
      Clock.DEFAULT);
      }
      }


      I expect to get a list of available quality types and let the user select one of them and play the rest of the content with the selected type, this question is maybe broad but please guide me a little.










      share|improve this question
















      I'm setting up Exo Player in my app and I have implemented DASH adaptive streaming in my player, and want to add the functionality to play the track of specific quality selected by the user.



      My Exo player version is 2.9.3, I tried implementing by following these Stackoverflow Post,Medium Post, but it's bit confusing and some part of the code is deprecated, and saying the truth is that I am a beginner.



      Here's my code for initializing the player:-



      private void initializePlayer() {
      if (player == null) {
      bandwidthMeter = new DefaultBandwidthMeter();
      TrackSelection.Factory factory = new PlayerTrackSelector(bandwidthMeter);
      trackSelector = new DefaultTrackSelector(factory);
      player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
      player.addVideoListener(this);
      playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
      player.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
      player.addListener(this);
      playerView.setPlayer(player);
      }
      MediaSource mediaSource = buildMediaSource(Uri.parse("http://192.168.43.238:3000/storage/video-dash/9e351142a4eb1664643bf93ba13959e8.mpd"));
      player.prepare(mediaSource, true, false);
      player.setPlayWhenReady(playWhenReady);
      player.seekTo(currentWindow, playbackPosition);
      }


      And the TrackSelector Class:-



      public class PlayerTrackSelector implements TrackSelection.Factory {
      private BandwidthMeter bandwidthMeter;

      public PlayerTrackSelector(BandwidthMeter bandwidthMeter) {
      this.bandwidthMeter = bandwidthMeter;
      }

      @Override
      public TrackSelection createTrackSelection(TrackGroup group, BandwidthMeter bandwidthMeter, int... tracks) {

      return new AdaptiveTrackSelection(group,tracks,bandwidthMeter,
      AdaptiveTrackSelection.DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS,
      AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
      AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
      AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION,
      AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE,
      AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS,
      Clock.DEFAULT);
      }
      }


      I expect to get a list of available quality types and let the user select one of them and play the rest of the content with the selected type, this question is maybe broad but please guide me a little.







      java android exoplayer mpeg-dash exoplayer2.x






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 1 at 17:40







      Shashank Mishra

















      asked Jan 1 at 17:32









      Shashank MishraShashank Mishra

      187




      187
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Try following code. Call following code when you need to show list. rendererIndex -> You can try manually. TRACK_TYPE_AUDIO = 1, TRACK_TYPE_VIDEO = 2.



          UPDATED:



          MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
          if (mappedTrackInfo != null) {
          int rendererIndex = 2;
          int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
          boolean allowAdaptiveSelections =
          rendererType == C.TRACK_TYPE_VIDEO
          || (rendererType == C.TRACK_TYPE_AUDIO
          && mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
          == MappingTrackSelector.MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
          Pair<AlertDialog, TrackSelectionView> dialogPair =
          TrackSelectionView.getDialog(xxxxxxxxxxxxxx.this, "Track Selector", trackSelector, rendererIndex);
          dialogPair.second.setShowDisableOption(true);
          dialogPair.second.setAllowAdaptiveSelections(allowAdaptiveSelections);
          dialogPair.first.show();
          }





          share|improve this answer


























          • What is rendererIndex?

            – Shashank Mishra
            Jan 2 at 6:17











          • rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

            – user1732369
            Jan 2 at 6:51











          • using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

            – Shashank Mishra
            Jan 2 at 8:58











          • I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

            – user1732369
            Jan 3 at 7:56













          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53997516%2fhow-to-add-adaptive-track-selector-in-exo-player-v2-x%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          Try following code. Call following code when you need to show list. rendererIndex -> You can try manually. TRACK_TYPE_AUDIO = 1, TRACK_TYPE_VIDEO = 2.



          UPDATED:



          MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
          if (mappedTrackInfo != null) {
          int rendererIndex = 2;
          int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
          boolean allowAdaptiveSelections =
          rendererType == C.TRACK_TYPE_VIDEO
          || (rendererType == C.TRACK_TYPE_AUDIO
          && mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
          == MappingTrackSelector.MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
          Pair<AlertDialog, TrackSelectionView> dialogPair =
          TrackSelectionView.getDialog(xxxxxxxxxxxxxx.this, "Track Selector", trackSelector, rendererIndex);
          dialogPair.second.setShowDisableOption(true);
          dialogPair.second.setAllowAdaptiveSelections(allowAdaptiveSelections);
          dialogPair.first.show();
          }





          share|improve this answer


























          • What is rendererIndex?

            – Shashank Mishra
            Jan 2 at 6:17











          • rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

            – user1732369
            Jan 2 at 6:51











          • using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

            – Shashank Mishra
            Jan 2 at 8:58











          • I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

            – user1732369
            Jan 3 at 7:56


















          0














          Try following code. Call following code when you need to show list. rendererIndex -> You can try manually. TRACK_TYPE_AUDIO = 1, TRACK_TYPE_VIDEO = 2.



          UPDATED:



          MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
          if (mappedTrackInfo != null) {
          int rendererIndex = 2;
          int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
          boolean allowAdaptiveSelections =
          rendererType == C.TRACK_TYPE_VIDEO
          || (rendererType == C.TRACK_TYPE_AUDIO
          && mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
          == MappingTrackSelector.MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
          Pair<AlertDialog, TrackSelectionView> dialogPair =
          TrackSelectionView.getDialog(xxxxxxxxxxxxxx.this, "Track Selector", trackSelector, rendererIndex);
          dialogPair.second.setShowDisableOption(true);
          dialogPair.second.setAllowAdaptiveSelections(allowAdaptiveSelections);
          dialogPair.first.show();
          }





          share|improve this answer


























          • What is rendererIndex?

            – Shashank Mishra
            Jan 2 at 6:17











          • rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

            – user1732369
            Jan 2 at 6:51











          • using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

            – Shashank Mishra
            Jan 2 at 8:58











          • I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

            – user1732369
            Jan 3 at 7:56
















          0












          0








          0







          Try following code. Call following code when you need to show list. rendererIndex -> You can try manually. TRACK_TYPE_AUDIO = 1, TRACK_TYPE_VIDEO = 2.



          UPDATED:



          MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
          if (mappedTrackInfo != null) {
          int rendererIndex = 2;
          int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
          boolean allowAdaptiveSelections =
          rendererType == C.TRACK_TYPE_VIDEO
          || (rendererType == C.TRACK_TYPE_AUDIO
          && mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
          == MappingTrackSelector.MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
          Pair<AlertDialog, TrackSelectionView> dialogPair =
          TrackSelectionView.getDialog(xxxxxxxxxxxxxx.this, "Track Selector", trackSelector, rendererIndex);
          dialogPair.second.setShowDisableOption(true);
          dialogPair.second.setAllowAdaptiveSelections(allowAdaptiveSelections);
          dialogPair.first.show();
          }





          share|improve this answer















          Try following code. Call following code when you need to show list. rendererIndex -> You can try manually. TRACK_TYPE_AUDIO = 1, TRACK_TYPE_VIDEO = 2.



          UPDATED:



          MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
          if (mappedTrackInfo != null) {
          int rendererIndex = 2;
          int rendererType = mappedTrackInfo.getRendererType(rendererIndex);
          boolean allowAdaptiveSelections =
          rendererType == C.TRACK_TYPE_VIDEO
          || (rendererType == C.TRACK_TYPE_AUDIO
          && mappedTrackInfo.getTypeSupport(C.TRACK_TYPE_VIDEO)
          == MappingTrackSelector.MappedTrackInfo.RENDERER_SUPPORT_NO_TRACKS);
          Pair<AlertDialog, TrackSelectionView> dialogPair =
          TrackSelectionView.getDialog(xxxxxxxxxxxxxx.this, "Track Selector", trackSelector, rendererIndex);
          dialogPair.second.setShowDisableOption(true);
          dialogPair.second.setAllowAdaptiveSelections(allowAdaptiveSelections);
          dialogPair.first.show();
          }






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 2 at 6:55

























          answered Jan 2 at 0:41









          user1732369user1732369

          11614




          11614













          • What is rendererIndex?

            – Shashank Mishra
            Jan 2 at 6:17











          • rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

            – user1732369
            Jan 2 at 6:51











          • using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

            – Shashank Mishra
            Jan 2 at 8:58











          • I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

            – user1732369
            Jan 3 at 7:56





















          • What is rendererIndex?

            – Shashank Mishra
            Jan 2 at 6:17











          • rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

            – user1732369
            Jan 2 at 6:51











          • using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

            – Shashank Mishra
            Jan 2 at 8:58











          • I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

            – user1732369
            Jan 3 at 7:56



















          What is rendererIndex?

          – Shashank Mishra
          Jan 2 at 6:17





          What is rendererIndex?

          – Shashank Mishra
          Jan 2 at 6:17













          rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

          – user1732369
          Jan 2 at 6:51





          rendererIndex = index of the tracks you want to select from. There are three types of Tracks. Audio, Video and Text (subtitle). If you don't have subtitle then normally rendererIndex is normally 2. You can try int rendererIndex = 2; to get list to video tracks.

          – user1732369
          Jan 2 at 6:51













          using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

          – Shashank Mishra
          Jan 2 at 8:58





          using 2 shows only auto and none, so I used 0 which is the default option then it works perfectly, what is the reason for following?

          – Shashank Mishra
          Jan 2 at 8:58













          I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

          – user1732369
          Jan 3 at 7:56







          I can't tell your what tracks index is 2. Normally I find renderindex type using MappingTrackSelector. Check github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/… line 634

          – user1732369
          Jan 3 at 7:56






















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53997516%2fhow-to-add-adaptive-track-selector-in-exo-player-v2-x%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Monofisismo

          Angular Downloading a file using contenturl with Basic Authentication

          Olmecas