Как добавить Adaptive Track Selector в Exo-player v2.x? - PullRequest
0 голосов
/ 01 января 2019

Я настраиваю Exo Player в своем приложении, и я внедрил адаптивную потоковую передачу DASH в своем плеере и хочу добавить функциональность для воспроизведения дорожки определенного качества, выбранной пользователем.

Моя версия проигрывателя Exo 2.9.3, я попытался реализовать, следуя этим Пост Stackoverflow , Средний пост , но это немного сбивает с толку, и некоторая часть кодаустарела и говорит, что правда в том, что я новичок.

Вот мой код для инициализации игрока: -

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);
}

И TrackSelector Класс: -

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);
  }
}

Я ожидаю получить список доступных типов качества и позволить пользователю выбрать один из них и воспроизвести остальную часть контента с выбранным типом, этот вопрос может быть широким, но, пожалуйста, помогите мне немного.

1 Ответ

0 голосов
/ 02 января 2019

Попробуйте следующий код.Позвоните по следующему коду, когда вам нужно показать список.rendererIndex -> Вы можете попробовать вручную.TRACK_TYPE_AUDIO = 1, TRACK_TYPE_VIDEO = 2.

ОБНОВЛЕНО:

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();
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...