Как переключить форматы трека в exo player из доступного (HLS)? - PullRequest
0 голосов
/ 12 марта 2020

player.getCurrentTrackGroups().get(0).formats;

Я вижу этот метод, где я могу получить массив доступных форматов, но я не знаю, как выбрать один из них. Бэкэнд поддерживает HLS, где разные форматы имеют разные разрешения. Exo Player автоматически выбирает формат в зависимости от скорости сети, но я хочу сделать это вручную, как на YouTube.

1 Ответ

0 голосов
/ 13 марта 2020
[took help from the accepted answer][1]
DefaultTrackSelector trackSelector = new DefaultTrackSelector(this);
SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).setTrackSelector(trackSelector).build();

//insert above two lines in your initPlayer() method

//this method does the actual work     
private void applySelection(int trackIndex) {

    int videoRendererIndex = 0;

    MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();

    //This logic is to find the find the video renderer index
    for (int i = 0; i < mappedTrackInfo.length; i++) {
        TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
        if (trackGroups.length != 0) {
            switch (player.getRendererType(i)) {
                case C.TRACK_TYPE_VIDEO:
                    videoRendererIndex = i;
                    break;
            }
        }

    }
    trackGroups = mappedTrackInfo != null ? mappedTrackInfo.getTrackGroups(videoRendererIndex) : null;
    int groupIndex = 0;//which group has the the formats you want to use, in my case it was 0.
    //You can use the debugger or you can Log the whole trackGroup to see its details.
    DefaultTrackSelector.SelectionOverride override = new DefaultTrackSelector.SelectionOverride(groupIndex, trackIndex);

    parametersBuilder = new DefaultTrackSelector.ParametersBuilder(this);
    if (trackGroups != null) {
        parametersBuilder.setSelectionOverride(videoRendererIndex, trackGroups, override);
        trackSelector.setParameters(parametersBuilder);
    }
}

//incase you want to switch to auto quality select, insert these lines you code
trackSelector.clearSelectionOverride(0,trackGroups);
...