Bucle de vídeo sin fisuras con VideoView


Tengo el siguiente código para tomar un video como un recurso sin procesar, iniciar el video y loop, pero necesito que el video loop sin problemas a partir de ahora cuando se trata de un final del clip y comienza el clip de nuevo la transición entre causa un parpadeo por una fracción de segundo, que realmente no puedo tener para mi aplicación.

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();
    }
}

El clip tiene solo 22 segundos de duración, pero fue creado para ser transparente, por lo que es posible trabajar sin demora.

Author: Jonik, 2011-01-20

6 answers

Prueba esto funcionará 100%


videoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});
 171
Author: PravinDodia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-08 13:21:33

La pausa es para que el MediaPlayer subyacente actualice sus búferes. El tiempo que tomará dependerá de una serie de factores, muchos de los cuales están fuera de su control (por ejemplo, la velocidad de la CPU, la velocidad del almacenamiento flash a bordo).

Uno que puede controlar es sacar su video del recurso y llevarlo al sistema de archivos. Los recursos se almacenan en el APK, que es un archivo ZIP, por lo que extraer el video de esta manera probablemente lleve tiempo extra.

Es posible que tenga que cambiar de VideoView y utilizar un SurfaceView con dos MediaPlayers, alternando entre ellos one uno está jugando mientras el siguiente se está preparando, por lo que cuando el juego termina, puede cambiar al nuevo jugador. No lo he intentado, por lo que no sé cuáles podrían ser las ramificaciones. Sin embargo, sé que esta técnica se utiliza con frecuencia para la reproducción de audio para la transición de un clip a otro.

 4
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-20 12:45:01

No estoy seguro de si esto ayuda años más tarde, pero usé

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

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

Y tiene un bucle sin fisuras

 3
Author: lexodus k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-07 10:39:55

Un poco tarde, pero alguna razón por la que no se puede utilizar lo siguiente?

MediaPlayer.setLooping(true);
 1
Author: J J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-17 21:17:48

La respuesta a esto es eliminar el audio del video y convertirlo en un archivo .ogg que se puede enlazar sin problemas y luego usar el video sin audio para enlazar y esto funciona.

 0
Author: SamRowley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-21 09:56:42

Aquí está responder amigos, debe usar vv.resume en setOnCompletionListener clase

[https://stackoverflow.com/a/27606389/3414469][1]

 0
Author: ylmzekrm1223,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:35