Eu tenho o seguinte código para pegar um vídeo como um recurso bruto, iniciar o vídeo e repeti-lo, mas preciso que o vídeo faça um loop contínuo a partir de agora, quando chega ao final do clipe e começa o clipe novamente, a transição entre causa um piscar por uma fração de segundo, o que eu realmente não posso ter no meu aplicativo.
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();
}
}
O clipe tem apenas 22 segundos de duração, mas foi criado para ser contínuo, portanto, é possível trabalhar sem atrasos.
android
android-videoview
SamRowley
fonte
fonte
Não tenho certeza se isso ajuda anos depois, mas usei
vv.start(); vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { vv.start(); } });
e tem um loop contínuo
fonte
A pausa é para que o subjacente
MediaPlayer
atualize seus buffers. Quanto tempo isso levará dependerá de uma série de fatores, muitos dos quais estão fora de seu controle (por exemplo, velocidade da CPU, velocidade de armazenamento flash on-board).Um que você pode controlar é tirar o vídeo do recurso e colocá-lo no sistema de arquivos. Os recursos são armazenados no APK, que é um arquivo ZIP, portanto, extrair o vídeo dessa forma provavelmente leva mais tempo.
Você pode precisar alternar
VideoView
e usar umSurfaceView
com doisMediaPlayers
, alternando entre eles - um está tocando enquanto o próximo está se preparando, então, quando o jogo terminar, você pode mudar para o novo jogador. Eu não tentei isso e, portanto, não sei quais podem ser as ramificações. No entanto, sei que essa técnica é freqüentemente usada para a reprodução de áudio para fazer a transição de um clipe para outro.fonte
Em Kotlin, basta usar
videoView.setOnPreparedListener { it.isLooping = true }
fonte
Um pouco tarde, mas há algum motivo para você não poder usar o seguinte?
MediaPlayer.setLooping(true);
fonte
Se você estiver usando 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"); } });
Usando a forma abreviada de expressão de seta
videoView.setOnPreparedListener { mp -> //Start Playback videoView.start() //Loop Video mp!!.isLooping = true; Log.i(TAG, "Video Started"); };
fonte
A resposta a isso é remover o áudio do vídeo e convertê-lo em um
.ogg
arquivo que pode ser repetido sem problemas e, em seguida, usar o vídeo sem áudio para fazer um loop e isso funciona.fonte
Aqui está a resposta, amigos, você deve usar
vv.resume
nasetOnCompletionListener
aula[ https://stackoverflow.com/a/27606389/3414469][1]
fonte