2016-10-09 5 views
0

Ich bin ein Webentwickler, der damit beauftragt ist, eine ziemlich einfache App zu entwickeln, die ich denke. Ich habe nicht viel Erfahrung mit Android-Entwicklung, also vergebe, was vielleicht dumme Fehler sind.Erstellen einer Autoplay-Video-Playlist

Ich muss in der Lage sein, ein Array von Videopfaden (die auf der externen SD synchronisiert werden) zu nehmen und die Videos eins nach dem anderen abzuspielen. Ich brauche keine Steuerung oder irgendetwas, nur Vollbildvideo.

Da ich nicht viel Erfahrung mit Android oder Java habe, dachte ich, ich würde versuchen Easy Video Player, die ich denke, ist nur ein Wrapper für die MediaPlayer-Klasse. Ich kann ein einzelnes Video abspielen, kein Problem, aber ich habe Probleme beim automatischen Abspielen des nächsten Videos. Hier ist mein Code so weit (nur Online-Demo-Videos im Moment anstatt von der SD-Karte zu verwenden. Auch die Layout-Datei ist ziemlich genau das gleiche wie das Beispiel im obigen Link, nur mit ein paar verschiedenen Attributwerten):

public class VideoActivity extends AppCompatActivity implements EasyVideoCallback { 

    private static final String[] TEST_VIDEOS = {"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4", "http://www.html5videoplayer.net/videos/toystory.mp4"}; 

    private EasyVideoPlayer player; 
    private int currentVideo; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_video); 
     View decorView = getWindow().getDecorView(); 
     int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; 
     decorView.setSystemUiVisibility(uiOptions); 

     player = (EasyVideoPlayer) findViewById(R.id.video_player); 

     player.setCallback(this); 

     currentVideo = 0; 

     player.setSource(Uri.parse(TEST_VIDEOS[currentVideo])); 
    } 

    @Override 
    public void onPaused(EasyVideoPlayer player) { 
     super.onPause(); 

     player.pause(); 
    } 

    @Override 
    public void onCompletion(EasyVideoPlayer player) { 
     if (currentVideo != TEST_VIDEOS.length - 1) { 
      currentVideo++; 
      player.reset(); 
      player.setSource(Uri.parse(TEST_VIDEOS[currentVideo])); 
      player.start(); 
     } 
    } 
} 

Dies ist der Monitor-Ausgang, wenn erscheint onCompletion() aufgerufen:

D/EasyVideoPlayer: onCompletion() 
D/EasyVideoPlayer: Loading web URI: http://www.html5videoplayer.net/videos/toystory.mp4 
E/MediaPlayer: start called in state 4 
E/MediaPlayer: error (-38, 0) 
E/MediaPlayer: Error (-38,0) 

ich fast da sein könnte, oder ich könnte weg sein, ich habe keine Ahnung. Ich habe versucht, nur player.reset() in onCompletion() anzurufen, aber es schien überhaupt nichts zu tun. Ich würde annehmen, dass der Spieler einfach in einen Anfangszustand ohne geladenes Video gehen würde.

Jede Hilfe ist willkommen, und ich entschuldige mich für die Ignoranz,

Dank.

Update:

Ich zog player.start(); in einen onPrepared() Zuhörer und die Fehler, die oben nicht mehr geklebt erscheinen. Auch nach einigen Sekunden wird der Ton des nächsten Videos wiedergegeben, aber der Player zeigt immer noch den letzten Frame des ersten Videos mit einer Wiedergabetaste an.

Antwort

0

Bitte ändern Sie Ihre onCompletion Methode dazu:

@Override 
    public void onCompletion(EasyVideoPlayer player) { 
     if (currentVideo != TEST_VIDEOS.length - 1) { 
      currentVideo++; 
      this.player = player; 
      this.player.reset(); 
      this.player.setSource(Uri.parse(TEST_VIDEOS[currentVideo])); 
      this.player.start(); 
      this.player.setCallback(this); 
     } 
    } 
+0

Danke für die Antwort. Getting 'Kann die Methode 'setOnCompletionListener (...)' nicht auflösen ''. Ohne diese Zeile ist es leider genauso wie vorher. – Perceptic

+0

Ok, ich habe nicht bemerkt, dass Sie eine Drittanbieter-Bibliothek verwenden. Ersetzen Sie diese Zeile durch 'this.player.setCallback (this);' –

+0

Nein, immer noch die gleichen Fehler:/ – Perceptic