Подтвердить что ты не робот

Бесшовная видео-петля с VideoView

У меня есть следующий код, чтобы взять видео как необработанный ресурс, запустить видео и зацикливать его, но мне нужно, чтобы видео было плавно перемещено с момента, когда дело доходит до конца клипа, и снова запускает клип перехода между причинами мерцания на долю секунды, что у меня действительно не может быть для моего приложения.

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 секунды, но был создан, чтобы быть бесшовным, поэтому можно работать без задержки.

4b9b3361

Ответ 1

Попробуйте это, он будет работать на 100%


videoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});

Ответ 2

Пауза предназначена для базового MediaPlayer для обновления своих буферов. Как долго это займет, будет зависеть от ряда факторов, многие из которых находятся вне вашего контроля (например, скорость процессора, скорость встроенной флэш-памяти).

Один из них, который вы можете контролировать, - это вывести видео из ресурса и в файловую систему. Ресурсы хранятся в APK, который является ZIP файлом, поэтому извлечение видео в этом случае, вероятно, занимает дополнительное время.

Вам может потребоваться отключиться от VideoView и использовать SurfaceView с двумя MediaPlayers, чередующимися между ними: один из них воспроизводится во время подготовки следующего, поэтому, когда игра заканчивается, вы можете переключиться на новый игрок. Я не пробовал это, и поэтому я не знаю, какие последствия могут быть. Тем не менее, я знаю, что этот метод часто используется для воспроизведения звука для перехода от одного клипа к другому.

Ответ 3

Немного поздно, но почему вы не можете использовать следующее?

MediaPlayer.setLooping(true);

Ответ 4

Ответ на этот вопрос заключается в том, чтобы удалить аудио из видео и преобразовать его в файл .ogg, который можно легко зацикливать, а затем использовать видео без звука для циклического раунда, и это работает.

Ответ 6

Не уверен, что это поможет годы спустя, но я использовал

vv.start();
vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() {

 @Override 
  public void onCompletion(MediaPlayer mediaPlayer) {   
    vv.start();
  }
});

и имеет бесшовный цикл