Mam następujący kod, aby pobrać wideo jako surowe zasoby, uruchomić wideo i zapętlić je, ale potrzebuję, aby wideo było teraz płynnie zapętlone, jeśli chodzi o koniec klipu i ponownie uruchamia klip, przejście między powoduje migotanie przez ułamek sekundy, czego naprawdę nie mogę mieć w mojej aplikacji.
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();
}
}
Klip ma tylko 22 sekundy, ale został stworzony tak, aby był płynny, więc można pracować bez opóźnień.
android
android-videoview
SamRowley
źródło
źródło
Nie jestem pewien, czy to pomoże po latach, ale użyłem
vv.start(); vv.setOnCompletionListener ( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { vv.start(); } });
i ma płynną pętlę
źródło
Przerwa służy
MediaPlayer
do odświeżania buforów przez element bazowy . To, jak długo to potrwa, zależy od wielu czynników, z których wiele jest poza Twoją kontrolą (np. Szybkość procesora, prędkość wbudowanej pamięci flash).Jedną z możliwości kontrolowania jest przeniesienie wideo z zasobu do systemu plików. Zasoby są przechowywane w pliku APK, który jest plikiem ZIP, więc wyodrębnienie wideo w ten sposób prawdopodobnie zajmie więcej czasu.
Może zajść potrzeba przełączenia się
VideoView
i użyciaSurfaceView
dwóchMediaPlayers
, naprzemiennie - jeden gra, a drugi przygotowuje, więc gdy gra się skończy, możesz przełączyć się na nowego gracza. Nie próbowałem tego, więc nie wiem, jakie mogą być tego konsekwencje. Wiem jednak, że ta technika jest często używana do odtwarzania dźwięku w celu przejścia z jednego klipu do drugiego.źródło
W Kotlinie po prostu użyj
videoView.setOnPreparedListener { mp -> mp.isLooping = true }
źródło
Trochę późno, ale jest jakiś powód, dla którego nie możesz użyć następujących?
MediaPlayer.setLooping(true);
źródło
Jeśli używasz 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"); } });
Używanie krótkiej formy wyrażenia strzałki
videoView.setOnPreparedListener { mp -> //Start Playback videoView.start() //Loop Video mp!!.isLooping = true; Log.i(TAG, "Video Started"); };
źródło
Odpowiedzią na to jest usunięcie dźwięku z wideo i przekonwertowanie go na
.ogg
plik, który można płynnie zapętlić, a następnie użyć wideo bez dźwięku do zapętlenia i to działa.źródło
Oto odpowiedź przyjaciół, których musisz użyć
vv.resume
wsetOnCompletionListener
klasie[ https://stackoverflow.com/a/27606389/3414469][1]
źródło