Ответ 1
Попробуйте это, он будет работать на 100%
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
}
});
У меня есть следующий код, чтобы взять видео как необработанный ресурс, запустить видео и зацикливать его, но мне нужно, чтобы видео было плавно перемещено с момента, когда дело доходит до конца клипа, и снова запускает клип перехода между причинами мерцания на долю секунды, что у меня действительно не может быть для моего приложения.
public class Example extends Activity {
VideoView vv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vv = (VideoView)findViewById(R.id.VideoView01);
//Video Loop
vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
vv.start(); //need to make transition seamless.
}
});
Uri uri = Uri.parse("android.resource://com.example/"
+ R.raw.video);
vv.setVideoURI(uri);
vv.requestFocus();
vv.start();
}
}
Клип длится всего 22 секунды, но был создан, чтобы быть бесшовным, поэтому можно работать без задержки.
Попробуйте это, он будет работать на 100%
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
}
});
Пауза предназначена для базового MediaPlayer
для обновления своих буферов. Как долго это займет, будет зависеть от ряда факторов, многие из которых находятся вне вашего контроля (например, скорость процессора, скорость встроенной флэш-памяти).
Один из них, который вы можете контролировать, - это вывести видео из ресурса и в файловую систему. Ресурсы хранятся в APK, который является ZIP файлом, поэтому извлечение видео в этом случае, вероятно, занимает дополнительное время.
Вам может потребоваться отключиться от VideoView
и использовать SurfaceView
с двумя MediaPlayers
, чередующимися между ними: один из них воспроизводится во время подготовки следующего, поэтому, когда игра заканчивается, вы можете переключиться на новый игрок. Я не пробовал это, и поэтому я не знаю, какие последствия могут быть. Тем не менее, я знаю, что этот метод часто используется для воспроизведения звука для перехода от одного клипа к другому.
Немного поздно, но почему вы не можете использовать следующее?
MediaPlayer.setLooping(true);
Ответ на этот вопрос заключается в том, чтобы удалить аудио из видео и преобразовать его в файл .ogg
, который можно легко зацикливать, а затем использовать видео без звука для циклического раунда, и это работает.
Вот ответ друзьям, вы должны использовать vv.resume
в setOnCompletionListener
классе
Не уверен, что это поможет годы спустя, но я использовал
vv.start();
vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
vv.start();
}
});
и имеет бесшовный цикл