У меня есть следующий код, чтобы взять видео в качестве необработанного ресурса, запустить видео и зациклить его, но сейчас мне нужно, чтобы видео циклически повторялось, когда дело доходит до конца клипа и снова запускает клип, переход между вызывает мерцание на долю секунды, чего у меня действительно нет для моего приложения.
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 секунды, но был создан без шва, поэтому можно работать без задержек.
android
android-videoview
Сэм Роули
источник
источник
Не уверен, поможет ли это спустя годы, но я использовал
vv.start(); vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { vv.start(); } });
и он имеет бесшовную петлю
источник
Пауза предназначена для
MediaPlayer
обновления буферов базового актива . Сколько времени это займет, будет зависеть от ряда факторов, многие из которых находятся вне вашего контроля (например, скорость процессора, скорость встроенной флеш-памяти).Один из них, которым вы можете управлять, - вывести ваше видео из ресурса в файловую систему. Ресурсы хранятся в APK, который представляет собой ZIP-файл, поэтому извлечение видео таким способом, вероятно, займет дополнительное время.
Возможно, вам придется переключиться
VideoView
и использоватьSurfaceView
с двумяMediaPlayers
, чередуя их - один играет, а следующий готовится, поэтому, когда игра заканчивается, вы можете переключиться на нового игрока. Я не пробовал этого, и поэтому не знаю, какие могут быть последствия. Однако я знаю, что этот метод часто используется для воспроизведения звука для перехода от одного клипа к другому.источник
В Котлине просто используйте
videoView.setOnPreparedListener { mp -> mp.isLooping = true }
источник
Немного поздно, но есть ли причина, по которой вы не можете использовать следующее?
MediaPlayer.setLooping(true);
источник
Если вы используете Kotlin
videoView.setOnPreparedListener(object : MediaPlayer.OnPreparedListener { override fun onPrepared(mp: MediaPlayer?) { //Start Playback videoView.start() //Loop Video mp!!.isLooping = true; Log.i(TAG, "Video Started"); } });
Использование краткой формы выражения стрелки
videoView.setOnPreparedListener { mp -> //Start Playback videoView.start() //Loop Video mp!!.isLooping = true; Log.i(TAG, "Video Started"); };
источник
Ответ на это - удалить звук из видео и преобразовать его в
.ogg
файл, который можно зациклить, а затем использовать видео без звука для цикла, и это работает.источник
Вот ответ друзья, вы должны использовать
vv.resume
вsetOnCompletionListener
классе[ https://stackoverflow.com/a/27606389/3414469 visible [1 ]
источник