在 ExoPlayer 中使用 ConcatenatingMediaSource 时,seekTo(mTimeMilis) 将无法正常工作

seekTo(mTimeMilis) won't work properly when using ConcatenatingMediaSource in ExoPlayer

我有多个视频要一一播放。在为每个视频创建 MediaSource 后,所有这些都将 ConcatenatingMediaSource(mediaSources[])。通常它会一个接一个地播放。但是当使用 seekTo() 快进视频时,第一个视频可以,但其他视频不跟随 seekTo()

假设第一个视频是 10 秒,第二个是 12 秒,第三个是 10 秒。 如果我调用 seekTo((long)12*1000) 它应该向前播放 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();

使用 exoplayer.seekTo(period) 在源内部调用 currentWindowIndex()。当您播放串联媒体源中的第一个视频时,您最终收到 windowIndex 作为 0。使用 seekTo(windowIndex, time) 解决问题。