video playing with Two seekBars

26 views Asked by At

I am creating two seekbars with one seekBar object for video playback in RecyclerView item now my problem is when I can select a video (this is first video) from device storage then automatically seekBar created and seeking, again i can select other video (this is second video) from device storage then first video playback is stopped and second video is playing with two seekBars

public class Videos extends AppCompatActivity implements View.OnTouchListener {

    private static final int PICK_VIDEO_REQUEST = 2;

    Intent videoIntent;

    public int currentVideoIndex;

    private MainActivity mainActivity;

    private FrameLayout layersContainer;

    private Uri selectedVideo;

    private VideoView videoview1 , videoview2;

    private float dx,dy;

    private List<String> items ;

    public RecyclerView mRecyclerView;

    public int a = 1;

    public Video video;

    public MediaPlayer mediaPlayer1 , mediaPlayer2;

    public SeekBar seekBar;

    List<Video> videoList = new ArrayList<>();

    RecyclerView thumbnailRecyclerView;

    public Videos(MainActivity mainActivity,RecyclerView mRecyclerView, FrameLayout layersContainer, Uri selectedVideo,

                  int currentVideoIndex,SeekBar seekBar, RecyclerView thumbnailRecyclerView) {

        this.mainActivity = mainActivity;

        this.mRecyclerView = mRecyclerView;

        this.layersContainer =layersContainer;

        this.selectedVideo = selectedVideo;

        this.currentVideoIndex = currentVideoIndex;

        this.seekBar = seekBar;

        this.thumbnailRecyclerView = thumbnailRecyclerView;

    }

    public void openVideo() {

        videoIntent = new Intent();

        videoIntent.setType("video/*");

        videoIntent.setAction(Intent.ACTION_GET_CONTENT);

   mainActivity.startActivityForResult(videoIntent.createChooser(

           videoIntent,"Select Video"),PICK_VIDEO_REQUEST);

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_VIDEO_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

            if (currentVideoIndex == 0 ) {

                Toast.makeText(mainActivity,"bxb53664674 =",Toast.LENGTH_SHORT).show();

                selectedVideo = data.getData();

                currentVideoIndex++;

                videoview1 = new VideoView(mainActivity);

                videoview1.setOnTouchListener(this);

                //videoview1.setOnTouchListener(MainActivity.this);

                 mediaPlayer1 = new MediaPlayer();

                try {

                    mediaPlayer1.setDataSource(mainActivity, selectedVideo);

                    mediaPlayer1.prepare();

                } catch (Exception e) {

                    e.printStackTrace();

                }

                // Set up the VideoView for the current video index

                videoview1.setVideoURI(selectedVideo);

                mediaPlayer1.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {

                    @Override

                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

                        // Calculate the scaling factor to fit the video within the maximum dimensions of the FrameLayout

                        float scaleX = (float) layersContainer.getWidth() / width;

                        float scaleY = (float) layersContainer.getHeight() / height;

                        float scale = Math.min(scaleX, scaleY);

                        // Calculate the new width and height of the video

                        int newWidthvideo = (int) (width * scale);

                        int newHeightvideo = (int) (height * scale);

                        int horizontalMargin = (layersContainer.getWidth() - newWidthvideo) / 2;

                        int verticalMargin = (layersContainer.getHeight() - newHeightvideo) / 2;

                        // Update the layout parameters of the SurfaceView to match the new dimensions

                        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(newWidthvideo, newHeightvideo);

                        layoutParams.setMargins(horizontalMargin, verticalMargin, horizontalMargin, verticalMargin);

                        videoview1.setLayoutParams(layoutParams);

                    }

                });

                  layersContainer.addView(videoview1);

                items = new ArrayList<>();

                items.add("Item 1");

                 video = new Video(selectedVideo,mediaPlayer1);

                videoList.add(video);

                VideoAdapter videoAdapter = new VideoAdapter(mainActivity,videoList,videoview1,mediaPlayer1,currentVideoIndex);

                mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

                mRecyclerView.setAdapter(videoAdapter);

                videoAdapter.notifyDataSetChanged();

            } else if (currentVideoIndex == 1 ) {

              // Toast.makeText(this,"currentVideoIndex =",Toast.LENGTH_SHORT).show();

                selectedVideo = data.getData();

                videoview2 = new VideoView(mainActivity);

                videoview2.setOnTouchListener(this);

                 mediaPlayer2 = new MediaPlayer();

                //  mediaPlayer.reset();

                try {

                    mediaPlayer2.setDataSource(mainActivity, selectedVideo);

                    mediaPlayer2.prepare();

                } catch (IOException e) {

                    e.printStackTrace();

                }

                // Set up the VideoView for the current video index

                videoview2.setVideoURI(selectedVideo);

                mediaPlayer2.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {

                    @Override

                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

                        // Calculate the scaling factor to fit the video within the maximum dimensions of the FrameLayout

                        float scaleX = (float) layersContainer.getWidth() / width;

                        float scaleY = (float) layersContainer.getHeight() / height;

                        float scale = Math.min(scaleX, scaleY);

                        // Calculate the new width and height of the video

                        int newWidthvideo = (int) (width * scale);

                        int newHeightvideo = (int) (height * scale);

                        int horizontalMargin = (layersContainer.getWidth() - newWidthvideo) / 2;

                        int verticalMargin = (layersContainer.getHeight() - newHeightvideo) / 2;

                        // Update the layout parameters of the SurfaceView to match the new dimensions

                        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(newWidthvideo, newHeightvideo);

                        layoutParams.setMargins(horizontalMargin, verticalMargin, horizontalMargin, verticalMargin);

                        videoview2.setLayoutParams(layoutParams);

                    }

                });

                // textView1.setText(String.valueOf(currentVideoIndex));

                layersContainer.addView(videoview2);

                video = new Video(mediaPlayer2,selectedVideo);

                videoList.add(video);

                VideoAdapter videoAdapter1 = new VideoAdapter(mainActivity,mediaPlayer2,videoList,videoview2,currentVideoIndex);

                mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

                mRecyclerView.setAdapter(videoAdapter1);

                videoAdapter1.notifyDataSetChanged();

                currentVideoIndex++;

            }

}

}

public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder>{

    MainActivity mainActivity;

    List<Video> videoList;

    public MediaPlayer mediaPlayer1;

    public MediaPlayer mediaPlayer2;

    private VideoView videoView1;

    private VideoView videoView2;

    private VideoView videoView3;

    private VideoView videoView4;

    private VideoView videoView5;

    public Uri selectedVideo;

    public int currentVideoIndex;

     Handler handler;

   //  Context context2;

    Uri videoUri;

    private List<Uri> videoUris;

    MediaPlayer mediaPlayer;

    private static final int THUMBNAIL_COUNT = 50;

    RecyclerView thumbnailRecyclerView;

    public VideoAdapter(MainActivity mainActivity, List<Video> videoList, VideoView videoview1, MediaPlayer mediaPlayer1, int currentVideoIndex) {

        this.mainActivity = mainActivity;

        this.videoList = videoList;

        videoView1 = videoview1;

        this.mediaPlayer1 = mediaPlayer1;

        this.currentVideoIndex = currentVideoIndex;

    }

    public VideoAdapter(MainActivity mainActivity, MediaPlayer mediaPlayer2, List<Video>

            videoList, VideoView videoview2, int currentVideoIndex) {

        this.mainActivity = mainActivity;

        this.mediaPlayer2 = mediaPlayer2;

        this.videoList = videoList;

        videoView2 = videoview2;

        this.currentVideoIndex = currentVideoIndex;

    }

    @NonNull

    @Override

    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(parent.getContext())

                .inflate(R.layout.timeline_item, parent, false);

        return new ViewHolder(itemView);

    }

    @Override

    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        Video video = videoList.get(position);

        //   Uri selectedVideo = video.getSelectedVideo();

         videoUri = video.getSelectedVideo();

        // Generate thumbnails and store them in the Video object

        List<Bitmap> thumbnails = generateThumbnails(videoUri, THUMBNAIL_COUNT);

        video.setThumbnails(thumbnails);

        ThumbnailAdapter thumbnailAdapter = new ThumbnailAdapter(thumbnails);

        holder.thumbnailRecyclerView.setAdapter(thumbnailAdapter);

        SeekBar seekBar = holder.seekBar;

        thumbnailRecyclerView  = holder.thumbnailRecyclerView;

        

        if ( mainActivity != null && mediaPlayer1 != null && videoView1 != null) {

           

            holder.seekBar.setMax(mediaPlayer1.getDuration());

                holder.seekBar.setProgress(mediaPlayer1.getCurrentPosition());

                videoView1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                    @Override

                    public void onPrepared(MediaPlayer mp) {

                        mediaPlayer1 = mp;

                      //  mediaPlayer = mediaPlayer1;

                        mediaPlayer1.seekTo(video.getCurrentPosition());

                        // mediaPlayer1.start();

                        handler = new Handler();

                        handler.postDelayed(new Runnable() {

                            @Override

                            public void run() {

                                if (mediaPlayer1.isPlaying()) {

                                    video.setCurrentPosition(mediaPlayer1.getCurrentPosition());

                                    holder.seekBar.setProgress(mediaPlayer1.getCurrentPosition());

                                    handler.postDelayed(this, 50);

                                }

                            }

                        }, 50);

                        mediaPlayer1.start();

                    }

                });

                holder.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                    @Override

                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                        if (fromUser && mediaPlayer1 != null) {

                            mediaPlayer1.seekTo(progress);

                            video.setCurrentPosition(progress);

                            // mediaPlayer1.seekTo(progress);

                        }

                    }

                    @Override

                    public void onStartTrackingTouch(SeekBar seekBar) {

                        mediaPlayer1.pause();

                    }

                    @Override

                    public void onStopTrackingTouch(SeekBar seekBar) {

                        mediaPlayer1.start();

                    }

                });

               // currentVideoIndex++;

                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(holder.itemView.getContext(),

                        LinearLayoutManager.HORIZONTAL, false);

               // layoutManager.setAutoMeasureEnabled(true);

                holder.thumbnailRecyclerView.setLayoutManager(layoutManager);

        }else if ( mainActivity != null && mediaPlayer2 != null) {

            holder.seekBar.setMax(mediaPlayer2.getDuration());

            holder.seekBar.setProgress(mediaPlayer2.getCurrentPosition());

            videoView2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                @Override

                public void onPrepared(MediaPlayer mp2) {

                    mediaPlayer2 = mp2;

                    mediaPlayer2.seekTo(video.getCurrentPosition());

                    // mediaPlayer1.start();

                    handler = new Handler();

                    handler.postDelayed(new Runnable() {

                        @Override

                        public void run() {

                            if (mediaPlayer2.isPlaying()) {

                                video.setCurrentPosition(mediaPlayer2.getCurrentPosition());

                                holder.seekBar.setProgress(mediaPlayer2.getCurrentPosition());

                                handler.postDelayed(this, 50);

                            }

                        }

                    }, 50);

                    mediaPlayer2.start();

                }

            });

            holder.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                @Override

                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                    if (fromUser && mediaPlayer2 != null) {

                        mediaPlayer2.seekTo(progress);

                        video.setCurrentPosition(progress);

                    }

                }

                @Override

                public void onStartTrackingTouch(SeekBar seekBar) {

                    mediaPlayer2.pause();

                }

                @Override

                public void onStopTrackingTouch(SeekBar seekBar) {

                    mediaPlayer2.start();

                }

            });

           // currentVideoIndex++;

            RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(holder.itemView.getContext(),

                    LinearLayoutManager.HORIZONTAL, false);

            holder.thumbnailRecyclerView.setLayoutManager(layoutManager);

        }

    }

    private List<Bitmap> generateThumbnails(Uri videoUri, int thumbnailCount) {

        List<Bitmap> thumbnails = new ArrayList<>();

        MediaMetadataRetriever retriever = new MediaMetadataRetriever();

        retriever.setDataSource(mainActivity, videoUri);

        long duration = Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));

        long interval = duration / (thumbnailCount + 1);

        for (int i = 1; i <= thumbnailCount; i++) {

            long time = i * interval;

            Bitmap thumbnail = retriever.getFrameAtTime(time * 1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);

            thumbnails.add(thumbnail);

        }

        try {

            retriever.release();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return thumbnails;

    }

    @Override

    public int getItemCount() {

        return videoList.size();

    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public SeekBar seekBar;

        RecyclerView thumbnailRecyclerView;

            public ViewHolder(View itemView) {

            super(itemView);

            thumbnailRecyclerView = itemView.findViewById(R.id.thumbnailRecyclerView);

            seekBar = itemView.findViewById(R.id.seekBar);

        }

    }


}

How to solve one video playing with Two seekBars i want play one video with one seekBar like kinemastar app

0

There are 0 answers