2015-02-02 15 views
8

Ho 10 video che devo riprodurre, una volta terminato, il prossimo inizia a suonare.ExoPlayer - riproduce 10 file uno dopo l'altro

Sto usando Google's ExoPlayer, utilizzo l'esempio nello DEMO @ GitHub. Posso riprodurre 1 video, ma se provo a suonare il prossimo, non inizierà.

Se provo a reinserire il lettore, e ricomincia a giocare, si blocca.

private void loadvideo() { 
    Uri uri = Uri.parse(VIDEO_LIBRARY_URL + currentVideo + ".mp4"); 
    sampleSource = new FrameworkSampleSource(this, uri, null, 2); 

    // 1. Instantiate the player. 
    // 2. Construct renderers. 
    videoRenderer = new MediaCodecVideoTrackRenderer(sampleSource, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING); 
    audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource); 
    // 3. Inject the renderers through prepare. 
    player.prepare(videoRenderer, audioRenderer); 
    // 4. Pass the surface to the video renderer. 
    surface = surfaceView.getHolder().getSurface(); 

    player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface); 
    // 5. Start playback. 
    player.setPlayWhenReady(true); 
    player.addListener(new ExoPlayer.Listener() { 
     @Override 
     public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { 
      Log.d(TAG, "onPlayerStateChanged + " + playbackState); 
      if (playbackState == ExoPlayer.STATE_ENDED) { 
       currentVideo++; 
       loadNextVideo(); 
      } 
     } 

     @Override 
     public void onPlayWhenReadyCommitted() { 

     } 

     @Override 
     public void onPlayerError(ExoPlaybackException error) { 

     } 
    }); 

} 

Cosa sto facendo di sbagliato? Come posso riprodurre la continuità dei video?

Grazie.

+0

quale errore hai trovato in un incidente? –

+0

inoltre, come si presenta il codice loadNextVideo(). –

risposta

2

OK, risposta alla mia domanda. nell'esempio, google avvia ExoPlayer in OnResume(). ho dovuto re-init per ogni video del genere:

player = ExoPlayer.Factory.newInstance(2, 1000, 5000); 

se qualcuno ha un'idea migliore, per favore fatemelo sapere.

+0

Questo non risolve il problema per me :( – Markymark

+0

@ Marky17 Prima di istanziare una nuova istanza chiama il metodo releasePlayer(). –

+0

@Shahar Ciao Sto cercando di creare un semplice programma di riproduzione video usando ExoPlayer ma non ho ancora finito, ho controllato il tuo Github repository ma non ha trovato il tuo esemplare ExoPlayer lì ... per favore pubblica il tuo esempio e condividi il link con me .. quindi imparerò da questo .. – Sophie

12

È possibile riutilizzare ExoPlayer fino al punto in cui si chiama release(), quindi non dovrebbe più essere utilizzato.

Per cambiare i mezzi di comunicazione che è in fase di riproduzione, è essenzialmente necessario effettuare le seguenti operazioni:

// ...enable autoplay... 
player.stop(); 
player.seekTo(0L); 
player.prepare(renderers); 

Creazione renderer è un po 'più coinvolto, ma questo è il flusso si dovrebbe seguire e il giocatore dovrebbe essere in grado di riprodurre video indietro.

+0

Ho avuto lo stesso problema, e questa soluzione ha funzionato per me – mmark

+0

Non era ovvio per me che hai dovuto cercare di 0 prima di preparare nuovamente il renderer.Grazie –

4

Sto usando Exoplayer per cambiare il successo di video mp4. Uso l'esempio nella DEMO. 1.DEMO progetto in DemoPlayer.java:

private final RendererBuilder rendererBuilder; 
//remove final,then modify that: 

private RendererBuilder rendererBuilder; 

//and add the set method: 
public void setRendererBuilder(RendererBuilder rendererBuilder){ 
     this.rendererBuilder = rendererBuilder; 
    } 

//finally,add stop method 
public void stop(){ 
     player.stop(); 
    } 

2.DEMO progetto in PlayerActivity.java: metodo add:

private void changeVideo(){ 
     player.stop(); 
     player.seekTo(0L); 
     //you must change your contentUri before invoke getRendererBuilder(); 
     player.setRendererBuilder(getRendererBuilder()); 
     player.prepare(); 
     playerNeedsPrepare = false; 
    } 

ricordare cambiamento param contentUri prima di richiamare il metodo changeVideo.

+0

Questo funziona per me :) – Charlie

0

C'è un'altra soluzione, è possibile fare riferimento a ConcatenatingMediaSource per ottenere il supporto successivo riproduzione automatica.

In Demo App esempio: 1. Avviare ExoPlayer 2. Selezionare Playlist 3. Scegliere GATTI-> Cani

Problemi correlati