2012-11-02 17 views
14

Jestem nowy dla Androida i chcę odtwarzać filmy jeden po drugim jednocześnie, aby wyglądał jak ciągłe wideo.Równoczesne odtwarzanie wideo jeden po drugim [bez widocznego przełączania się między nimi]

Znalazłem ten link na stackoverflow bardzo pomocne. how-to-play-videos-one-after-another-simultaneously Kiedy używam tego, chociaż mogę odtwarzać filmy jeden po drugim, Ale przełączanie z jednego segmentu na inny powoduje wstrzymanie filmu na sekundę przed odtworzeniem następnego:. Dlatego nie wygląda na ciągłe wideo z tego powodu.

Proszę, pomóż mi rozwiązać mój problem. Oto mój kod.

public class VideoActivity extends Activity{ 

    VideoView videoView, videoView1; 
    MediaController mc; 
    int count = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_video); 

     videoView = (VideoView) findViewById(R.id.VVSimpleVideo); 
     setup(); 
     videoView.setOnCompletionListener(completionListener); 

    } 

    public void setup() { 

     String _path = "/mnt/sdcard/Video/"+count+".mp4"; 
     videoView.setVideoPath(_path); 
     videoView.start(); 
     count++; 
    } 


    private OnCompletionListener completionListener=new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      mp.stop(); 
      setup(); 
     } 
    }; 

} 

Teraz starałem się grać poprzez dwie instancje klasy VideoView. Próbowano odtworzyć pierwsze wideo pierwszego gracza, a drugie wideo drugiego gracza, Trzecie wideo od pierwszego gracza i czwarte wideo od drugiego gracza i tak dalej.

Ale nadal nie mogę odtwarzać wideo płynnie i istnieje ten sam problem.

Oto mój kod z podwójnym graczem.

public class VideoActivity extends Activity{ 

    VideoView videoView, videoView1; 
    MediaController mc; 
    int count = 0; 
    String _path; 
    String _path1; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_video); 

     videoView = (VideoView) findViewById(R.id.VVSimpleVideo); 
     _path = "/mnt/sdcard/Video/"+count+".mp4"; 
     videoView.setVideoPath(_path); 
     videoView.start(); 
     //setup(); 
     videoView.setOnCompletionListener(completionListener); 

     videoView1 = (VideoView) findViewById(R.id.VVSimpleVideo); 

     videoView1.setOnCompletionListener(completionListener1); 
     count++; 
     _path1 = "/mnt/sdcard/Video/"+count+".mp4"; 
     videoView1.setVideoPath(_path1); 
    } 

    public void setup() { 


     videoView.start(); 
     count++; 
     _path1 = "/mnt/sdcard/Video/"+count+".mp4"; 
     videoView1.setVideoPath(_path1); 
    } 

    public void setup1() { 


     videoView1.start(); 

     count++; 
     _path = "/mnt/sdcard/Video/"+count+".mp4"; 
     videoView.setVideoPath(_path); 
    } 

    private OnCompletionListener completionListener=new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      mp.stop(); 
      setup1();  

     } 
    }; 

    private OnCompletionListener completionListener1=new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      mp.stop(); 

      setup();   

     } 
    }; 

} 
+0

Witaj piku, mam również podobny problem. Czy byłeś w stanie osiągnąć minimalny czas "czarnego ekranu"? – codeshark

Odpowiedz

2

Nie jesteś naprawdę za pomocą dwóch VideoViews w ogóle, jesteś przypisując zarówno VideoView i VideoView1 do R.id.VVSimpleVideo, więc są one tego samego obiektu. Oznacza to, że za każdym razem, gdy trafisz na onCompletion, ustawiasz się na nowo, zamiast ustawiać jeden i grać drugi.

Spróbuj utworzyć dwa oddzielne obiekty VideoView w swoim układzie. Ustaw jeden zestaw na VISIBLE i jeden zestaw na GONE/INVISIBLE i zamień, gdy chcesz zmienić.

Nie mogę zagwarantować, że będzie to "płynne", ponieważ jest to prawie niemożliwe. Nawet większość stacjonarnych odtwarzaczy nie jest naprawdę płynna. To zależy od tego, jaką masz tolerancję na szwy.

+0

Cześć Geobits, Dzięki za odpowiedź. Dziękujemy za poprawienie możliwości użycia dwóch różnych VideoView w układzie. Ale nie można uruchomić drugiego, jeśli GONE/INVISIBLE. Za każdym razem tylko pierwszy gracz działa, gdy nadejdzie jego kolej. Następnie próbowałem ustawić widoczność w locie przez videoView.setVisibility (0); Nie znajduję VISIBLE/GONE/INVISIBLE jako możliwych wartości, więc wstaw 0. Nadal nie jestem w stanie pokazać klatek z drugiego filmu, chociaż muzyka nadchodzi. – piku

+0

Cześć Jestem w stanie zmienić widoczność w locie przez \t videoView1.setVisibility (View.VISIBLE) Ale kiedy jest przełączana, pokazuje pewne zaciemnienie pomiędzy, więc gra nie jest płynna. – piku

Powiązane problemy