在 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)
解决问题。
我有多个视频要一一播放。在为每个视频创建 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)
解决问题。