Существует ли пример библиотеки ExoPlayer + Leanback для использования титров? - PullRequest
3 голосов
/ 02 декабря 2019

Я нашел несколько примеров, которые работают с Leanback и ExoPlayer, и у меня все это работает, но я не могу заставить работать субтитры / подписи. В последнем примере Google, который я смог найти (https://github.com/android/tv-samples), в образце Java есть кнопка с надписями, но они никогда не отображаются. В примере Kotlin есть комментарий: // TODO(owahltinez): handle captions.

Я пробовалэти изменения в одном из примеров, но это не помогло:

private void prepareMediaForPlaying(Uri mediaSourceUri) {
        String userAgent = Util.getUserAgent(getActivity(), "VideoPlayerGlue");
        DefaultDataSourceFactory defaultDataSourceFactory = new DefaultDataSourceFactory(getActivity(), userAgent);
        MediaSource mediaSource =
                new ExtractorMediaSource(
                        mediaSourceUri,
                        defaultDataSourceFactory,
                        new DefaultExtractorsFactory(),
                        null,
                        null);
        String subtitle = "https://subtitledomain/sintel-en.vtt";
        Uri uriSubtitle = Uri.parse(subtitle);
        MediaSource subtitleMediaSource = new SingleSampleMediaSource.Factory(defaultDataSourceFactory)
                .createMediaSource(uriSubtitle, Format.createTextSampleFormat(null, MimeTypes.TEXT_VTT, C.SELECTION_FLAG_FORCED, "n/a"), C.TIME_UNSET);
        mediaSource = new MergingMediaSource(mediaSource, subtitleMediaSource);
        mPlayer.prepare(mediaSource);
    }

А также это изменение:

    mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    DefaultTrackSelector.Parameters parameters = mTrackSelector.getParameters();
    mTrackSelector.setParameters(parameters.withSelectUndeterminedTextLanguage(true));

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

Спасибо.

Редактировать: я сделалветвился и удалял весь код Leanback и просто оставлял ExoPlayer материал нетронутым и использовал com.google.android.exoplayer2.ui.PlayerView в моем Fragment вместо VideoFragment и субтитры работали без внесения каких-либо других изменений. Поэтому мне просто нужно включить ихна стороне Leanback как-то.

1 Ответ

1 голос
/ 09 декабря 2019

Вот другой подход - renderIndex = 0 для видео, = 1 для аудио, = 2 для субтитров / текста.

TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex);   

TrackSelectionArray currentTrackGroups = player.getCurrentTrackSelections();
TrackSelection currentTrackSelection = currentTrackGroups.get(rendererIndex);


for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) {

    TrackGroup group = trackGroups.get(groupIndex);

    for (int trackIndex = 0; trackIndex < group.length; trackIndex++) {
        Format trackFormat = group.getFormat(trackIndex);


        if(currentTrackSelection!=null && 
          currentTrackSelection.getSelectedFormat()==trackFormat){
            //THIS ONE IS SELECTED
        }

    }
}
...