Tengo el siguiente código para tomar un video como un recurso sin procesar, iniciar el video y repetirlo, pero necesito que el video se repita sin problemas a partir de ahora cuando llega al final del clip y comienza el clip nuevamente, la transición entre provoca un parpadear durante 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 perfecto, por lo que es posible trabajar sin demoras.
android
android-videoview
SamRowley
fuente
fuente
No estoy seguro de si esto ayuda años después, pero usé
vv.start(); vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { vv.start(); } });
y tiene un bucle sin interrupciones
fuente
La pausa es para que el subyacente
MediaPlayer
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, velocidad de la CPU, velocidad del almacenamiento flash integrado).Uno que puede controlar es sacar su video del recurso y colocarlo en el 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 más tiempo.
Es posible que deba cambiar
VideoView
y usar unSurfaceView
con dosMediaPlayers
, alternando entre ellos: uno está jugando mientras el siguiente se está preparando, por lo que cuando termine el juego, puede cambiar al nuevo jugador. No lo he probado, por lo que no sé cuáles podrían ser las ramificaciones. Sin embargo, sé que esta técnica se usa con frecuencia para la reproducción de audio para pasar de un clip a otro.fuente
En Kotlin simplemente use
videoView.setOnPreparedListener { mp -> mp.isLooping = true }
fuente
Un poco tarde, pero ¿hay alguna razón por la que no puedas usar lo siguiente?
MediaPlayer.setLooping(true);
fuente
Si está 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"); } });
Uso de forma corta de expresión de flecha
videoView.setOnPreparedListener { mp -> //Start Playback videoView.start() //Loop Video mp!!.isLooping = true; Log.i(TAG, "Video Started"); };
fuente
La respuesta a esto es eliminar el audio del video y convertirlo en un
.ogg
archivo que se pueda reproducir sin problemas y luego usar el video sin audio para hacer un bucle y esto funciona.fuente
Aquí está la respuesta amigos, debe usar
vv.resume
ensetOnCompletionListener
clase.[ https://stackoverflow.com/a/27606389/3414469][1]
fuente