J'ai le code suivant pour prendre une vidéo en tant que ressource brute, démarrer la vidéo et la mettre en boucle, mais j'ai besoin que la vidéo boucle de manière transparente à partir de maintenant quand elle arrive à la fin du clip et recommence le clip la transition entre provoque un 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.
android
android-videoview
SamRowley
la source
la source
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 parfaite
la source
La pause permet au sous-jacent
MediaPlayer
d'actualiser 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é).Un que vous pouvez contrôler est d'extraire votre vidéo de la ressource et de la placer dans le système de fichiers. Les ressources sont stockées dans l'APK, qui est un fichier ZIP, donc l'extraction de la vidéo de cette manière prend probablement plus de temps.
Vous devrez peut-être changer
VideoView
et utiliser unSurfaceView
avec deuxMediaPlayers
, en alternant entre eux - l'un joue pendant que le suivant se prépare, donc lorsque la lecture se termine, vous pouvez passer au nouveau lecteur. Je n'ai pas essayé cela et je ne sais donc 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.la source
Dans Kotlin, utilisez simplement
videoView.setOnPreparedListener { mp -> mp.isLooping = true }
la source
Peu de retard, mais une raison pour laquelle vous ne pouvez pas utiliser ce qui suit?
MediaPlayer.setLooping(true);
la source
Si vous utilisez 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"); } });
Utilisation de la forme abrégée de l'expression de flèche
videoView.setOnPreparedListener { mp -> //Start Playback videoView.start() //Loop Video mp!!.isLooping = true; Log.i(TAG, "Video Started"); };
la source
La réponse à cela est de supprimer l'audio de la vidéo et de le convertir en un
.ogg
fichier qui peut être mis en boucle de manière transparente, puis d'utiliser la vidéo sans audio pour faire une boucle et cela fonctionne.la source
Voici la réponse aux amis, vous devez utiliser
vv.resume
ensetOnCompletionListener
classe[ https://stackoverflow.com/a/27606389/3414469[1]
la source