2013-07-28 3 views
0

J'ai une application android et permet de lire un fichier vidéo, en particulier un épisode de différentes séries d'une ressource média web.android, comment lire une ligne de fichiers vidéo?

Un fichier vidéo est en cours de lecture façon suivante:

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.parse(mp4url), "video/mp4"); 
startActivity(intent); 

mp4url - est une variable chaîne

Maintenant, je veux permettre au programm jouer une file d'attente de fichiers vidéo.

je tryed faire façon suivante:

for(int iteration=arg2;iteration<episodes.size(); iteration++){ 
    Intent intent1 = new Intent(Intent.ACTION_VIEW); 
    intent1.setDataAndType(Uri.parse(mp4Url1), "video/mp4"); 
    startActivity(intent1); 
} 

arg2 montre une position choisie videofile et episodes est une variable ArrayList pour la file d'attente de videofile à jouer videofile après choisi.

Mais cela n'a pas fonctionné. En fait tous les fichiers vidéo sont jouables mais
simultanément. J'ai besoin qu'ils jouent à leur tour. Comment puis-je réorganiser mon code de manière efficace?

Nous vous remercions de votre attention.

+0

Vous devez écouter un événement lorsque votre vidéo est terminée, puis vous pouvez commencer à jouer le prochain – KOTIOS

+0

I undrestand. Est-il possible de voir cela sur un exemple? – Rinomancer

+0

Vous utilisez MediaPlayer? – KOTIOS

Répondre

0

Créer un arraylist de urls de films (par exemple yourURLList) Définition d'une int constante static final int VIDEO_PLAYBACK_FINISHED = 32

Vous pouvez garder un compte pour garder la trace dont la vidéo est en cours de lecture comme:

static int VIDEO_RUNNING = 0 

Créer une méthode comme celle-ci dans l'activité de l'appelant:

private void startMovie(int serialOfMovie){ 
     String vdoURL= yourURLList.get(serialOfMovie);//array list of movie urls 
     if(vdoURL != null) 
     { 
      //video url for that index is found,if not then it would not enter here 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse(vdoURL), "video/mp4"); 
      startActivityForResult(intent, 
        VIDEO_PLAYBACK_FINISHED); 
     } 

} 

Et dans l'appel activité er (celui dont vous invoquez les intentions que vous créez) ne pas oublier d'ajouter cet extrait:

protected void onActivityResult(int requestCode, int resultCode, 
      Intent data) { 
     if (requestCode == VIDEO_PLAYBACK_FINISHED) { 

      if (resultCode == RESULT_OK) { 
       //one video is finished 
       VIDEO_RUNNING++; //increase which vdo is running count 
       startMovie(VIDEO_RUNNING); 
      } 
     } 
    } 

Maintenant, quand vous êtes sur le point de jouer cette série de films (à partir du début), il suffit d'appeler startMovie(VIDEO_RUNNING);//VIDEO_RUNNING is 0 initially,so it will point the first url in url list.

Rappelez-vous si vous utilisez MediaPlayer jouer film dans l'activité (celui que vous appelez avec l'utiliser avec url film), puis lorsque le film a fini de jouer, vous devez finish cette activité. Comme si vous avez un MediaPlayer instance appelée mPlayer à cette activité, alors vous devriez faire ceci:

mPlayer.setOnCompletionListener(new 
    OnCompletionListener() {   
     @Override 
     public void onCompletion(MediaPlayer arg0) { 
     finish();    
    } 
}); 

De cette façon, vous devriez avoir l'effet de file d'attente avec des films en cours de lecture l'un après l'autre.

+0

Malheureusement, tous les fichiers vidéo se terminent par le résultat 0 (RESULT_CANCELLED), même s'ils se terminent par eux-mêmes (un épisode est terminé). – Rinomancer

+0

Si je change la vérification resultCode de RESULT_OK à RESULT_CANCELL, l'épisode suivant sera joué. – Rinomancer

Questions connexes