1

exoplayerrecyclerview. 我所有的视频都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);
            }
     }
4

1 回答 1

0

您的视频正在被回收(从内存中删除)。因此,您需要保存视频位置并向寻找该位置的播放器添加一个onStart侦听器。

于 2017-12-05T08:27:50.430 回答