seekTo (mTimeMilis) не будет работать должным образом при использовании ConcatenatingMediaSource в ExoPlayer

У меня есть несколько видео, которые нужно воспроизвести одно за другим. После создания MediaSource каждого видео, все это будет ConcatenatingMediaSource(mediaSources[]). Обычно они проигрываются по очереди. Но когда видео перематывается вперед с использованием seekTo(), первое видео нормально, но другие видео не следуют за seekTo().

Предположим, 1-е видео - это 10 секунд, 2-е - 12, 3-е - 10 секунд. Если я позвоню seekTo((long)12*1000), он должен проиграть 2-е видео с перемоткой на 2 секунды вперед. Но играет с начала 2-го видео.

Настройка источников видео

DefaultDataSourceFactory defaultDataSourceFactory = new DefaultDataSourceFactory(getApplicationContext(),Util.getUserAgent(getApplicationContext(), "ExoPlayer"));
MediaSource mediaSource = new ExtractorMediaSource.Factory(defaultDataSourceFactory).createMediaSource(videoItem.getVideoUri());
videoItemArrayList.get(k).setVideoSource(mediaSource);

Объединить источники

MediaSource[] mediaSources = new MediaSource[videoItemArrayList.size()];
int j=0;
for(VideoItem item : videoItemArrayList){
    mediaSources[j] = item.getVideoSource();
    ++j;
}
concatenatedSource = new ConcatenatingMediaSource(mediaSources);

Настроить exoplayer

exoPlayer.prepare(concatenatedSource);
exoPlayer.seekTo(0);
exoPlayer.setPlayWhenReady(true);
exoPlayer.getPlaybackState();

person Abdullah Emroze    schedule 02.05.2019    source источник


Ответы (1)


Использование exoplayer.seekTo(period) внутренне вызывает currentWindowIndex() внутри источника. Пока вы воспроизводите первое видео в объединенном источнике мультимедиа, вы получаете windowIndex как 0. Используйте seekTo(windowIndex, time) для решения проблемы.

person Rahul Ravindran    schedule 09.05.2019