Воспроизведение видео один за другим одновременно плавно [без видимого перехода от одного к другому]

Я новичок в android и хочу воспроизводить видео один за другим одновременно, чтобы он выглядел как непрерывное видео.

Я нашел эту ссылку в stackoverflow очень полезной. how-to-play-videos-one-after-another-both Когда я использую это, хотя я могу воспроизводить видео один за другим, но переключение с одного сегмента на другой приводит к паузе видео в течение секунды, прежде чем играть дальше один. Из-за этого он не выглядит как непрерывное видео.

Пожалуйста, помогите мне решить мою проблему. Вот мой Кодекс.

public class VideoActivity extends Activity{

     VideoView videoView, videoView1;
     MediaController mc;
     int count = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        videoView = (VideoView) findViewById(R.id.VVSimpleVideo);
        setup();
        videoView.setOnCompletionListener(completionListener);

    }

    public void setup() {

        String _path = "/mnt/sdcard/Video/"+count+".mp4";
        videoView.setVideoPath(_path);
        videoView.start();
        count++;
    }


    private OnCompletionListener completionListener=new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            setup();
        }
    };

}

Теперь я попытался сыграть, взяв два экземпляра класса VideoView. Пытался сыграть первое видео первым игроком и вторым видео вторым игроком, Третье видео от первого игрока и четвертое видео от второго игрока и так далее.

Но все же я не могу воспроизводить видео плавно и такая же проблема существует.

Вот мой код с двойным игроком.

public class VideoActivity extends Activity{

     VideoView videoView, videoView1;
     MediaController mc;
     int count = 0;
     String _path;
     String _path1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        videoView = (VideoView) findViewById(R.id.VVSimpleVideo);
        _path = "/mnt/sdcard/Video/"+count+".mp4";
        videoView.setVideoPath(_path);
         videoView.start();
        //setup();
        videoView.setOnCompletionListener(completionListener);

        videoView1 = (VideoView) findViewById(R.id.VVSimpleVideo);

        videoView1.setOnCompletionListener(completionListener1);
        count++;
        _path1 = "/mnt/sdcard/Video/"+count+".mp4";
        videoView1.setVideoPath(_path1);
    }

    public void setup() {


        videoView.start();
        count++;
        _path1 = "/mnt/sdcard/Video/"+count+".mp4";
        videoView1.setVideoPath(_path1);
    }

    public void setup1() {


        videoView1.start();

        count++;
        _path = "/mnt/sdcard/Video/"+count+".mp4";
        videoView.setVideoPath(_path);
    }

    private OnCompletionListener completionListener=new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            setup1();       

        }
    };

    private OnCompletionListener completionListener1=new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.stop();

            setup();        

        }
    };

}

Ответ 1

Вы вообще не используете два VideoViews, вы назначаете VideoView и VideoView1 в R.id.VVSimpleVideo, поэтому они являются одним и тем же объектом. Это означает, что каждый раз, когда вы onCompletion, он настраивается снова и снова, вместо того, чтобы настраивать один и играть на другом.

Попробуйте создать в своем макете два отдельных объекта VideoView. У вас установлен VISIBLE а один из них - GONE/INVISIBLE, и поменяйте, когда вы хотите изменить.

Я не могу гарантировать, что это сделает его "бесшовным", хотя, поскольку это почти невозможная задача. Даже большинство настольных медиаплееров не являются по-настоящему бесшовными. Это зависит от того, какая у вас терпимость к швам.