Воспроизведение видео один за другим одновременно плавно [без видимого перехода от одного к другому]
Я новичок в 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
, и поменяйте, когда вы хотите изменить.
Я не могу гарантировать, что это сделает его "бесшовным", хотя, поскольку это почти невозможная задача. Даже большинство настольных медиаплееров не являются по-настоящему бесшовными. Это зависит от того, какая у вас терпимость к швам.