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.
Essayez cela, cela fonctionnera à 100%
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
}
});
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
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.
Un peu tard, mais pour quelle raison ne pouvez-vous pas utiliser ce qui suit?
MediaPlayer.setLooping(true);
Voici la réponse des amis, vous devez utiliser vv.resume
dans la classe setOnCompletionListener
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.