web-dev-qa-db-fra.com

Boucle vidéo transparente avec VideoView

J'ai le code suivant pour prendre une vidéo en tant que ressource brute, démarrer la vidéo et la boucler mais j'ai besoin de la vidéo pour boucler de façon transparente dès maintenant quand il arrive à la fin du clip et recommence le clip la transition entre provoque une scintillement pendant une fraction de seconde, ce que je ne peux vraiment pas avoir pour mon application.

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

Le clip ne dure que 22 secondes mais a été créé pour être transparent, il est donc possible de travailler sans délai.

75
SamRowley

Essayez cela, cela fonctionnera à 100%


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

Je ne sais pas si cela aide des années plus tard, mais j'ai utilisé

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

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

et il a une boucle transparente

5
lexodus k

La pause est pour le MediaPlayer sous-jacent pour rafraîchir ses tampons. Le temps que cela prendra dépendra d'un certain nombre de facteurs, dont beaucoup sont hors de votre contrôle (par exemple, la vitesse du processeur, la vitesse du stockage flash intégré).

L'une que vous pouvez contrôler consiste à extraire votre vidéo de la ressource et à l'intégrer au système de fichiers. Les ressources sont stockées dans l'APK, qui est un fichier Zip, donc extraire la vidéo de cette façon prend probablement plus de temps.

Vous devrez peut-être vous éloigner de VideoView et utiliser un SurfaceView avec deux MediaPlayers, en alternant entre eux - l'un joue pendant que l'autre se prépare, donc quand celui qui joue fin, vous pouvez passer au nouveau joueur. Je n'ai pas essayé cela, et donc je ne sais pas quelles pourraient être les ramifications. Cependant, je sais que cette technique est fréquemment utilisée pour la lecture audio pour passer d'un clip à un autre.

5
CommonsWare

Un peu tard, mais pour quelle raison ne pouvez-vous pas utiliser ce qui suit?

MediaPlayer.setLooping(true);
1
J J

Voici la réponse des amis, vous devez utiliser vv.resume dans la classe setOnCompletionListener

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

0
ylmzekrm1223

La réponse à cette question consiste à supprimer l'audio de la vidéo et à le convertir en .ogg fichier qui peut être bouclé de façon transparente et ensuite utiliser la vidéo sans audio pour boucler et cela fonctionne.

0
SamRowley