我exoplayer
在recyclerview
. 我所有的视频都recyclerview
处于暂停模式。因此,当我在滚动后返回相同的视频时,视频位置应该保持不变。但在我的情况下,当我在滚动后回到同一个视频时,视频帧会向前移动。这发生在 api 低于棉花糖(23)
我是一个使用库 'com.google.android.exoplayer:exoplayer:r2.5.4'
这里我的适配器绑定视图代码的数据:
public class VideoViewHolder extends RecyclerView.ViewHolder {
View parent;
SimpleExoPlayer player;
VideoSurfaceView videoSurfaceView;
private DefaultTrackSelector trackSelector;
private int mainHandler;
private MediaSource mediaSource;
public VideoViewHolder(final View v) {
super(v);
parent = v;
imgAudio = v.findViewById(R.id.imgAudio);
videoSurfaceView = v.findViewById(R.id.exo_player);
aspectRatioFrameLayout = v.findViewById(R.id.control_frame);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position == -1)
return;
VideoUri videoUri = videoInfoList.get(position);
if (videoUri == null)
return;
Intent intent = new Intent(context, PlayrtActivity.class);
intent.putExtra("videoUri", videoUri);
context.startActivity(intent);
}
});
}
void bindData(int position) {
if (position == -1)
return;
VideoUri videoUri = videoInfoList.get(position);
if (videoUri == null)
return;
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory adaptiveTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode =
DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF;
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(context,
null, extensionRendererMode);
LoadControl loadControl =
new DefaultLoadControl(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE), 5000, 10000, 2500, 5000);
if (player == null) {
player = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector,loadControl);
MediaSourceBuilder mediaSourceBuilder = new MediaSourceBuilder(context, videoUri.getUri());
mediaSource = mediaSourceBuilder.build();
player.prepare(mediaSource);
player.setVideoSurfaceView(videoSurfaceView);
player.setPlayWhenReady(false);
}
}