simpleexoplayer mediasource latest exo android video exoplayer

android - mediasource - ExoPlayer: reproduce 10 archivos uno tras otro



hls mediasource exoplayer (4)

Estoy usando Exoplayer change mp4 video success. Utilizo el ejemplo en la DEMO. Proyecto 1.DEMO en 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(); }

Proyecto 2.DEMO en PlayerActivity.java: add method:

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

recuerda cambiar el contenido de paramUri antes de invocar el método changeVideo.

Tengo 10 videos que necesito jugar, una vez que uno termina, el siguiente comienza a jugar.

Estoy usando ExoPlayer de Google , uso el ejemplo en DEMO @ GitHub . Puedo reproducir 1 video, pero si intento jugar el siguiente, no comenzará.

Si trato de reiniciar el reproductor y empiezo a jugar de nuevo, se bloquea.

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) { } }); }

¿Qué estoy haciendo mal? ¿Cómo puedo reproducir la continuidad de los videos?

Gracias.


Existe otra solución, puede referirse a ConcatenatingMediaSource para lograr el siguiente medio de reproducción automática.

En el ejemplo de la aplicación de demostración: 1. Ejecute ExoPlayer 2. Seleccione Playlists 3. Elija Cats-> Dogs


OK, respondiendo mi propia pregunta. en el ejemplo, google init el ExoPlayer en OnResume (). tuve que reiniciar para cada video de esa manera:

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

si alguien tiene una idea mejor, házmelo saber.


Puede reutilizar ExoPlayer hasta el momento en que llame a release (), y luego ya no debería utilizarse.

Para cambiar el medio que está reproduciendo actualmente, básicamente debe realizar los siguientes pasos:

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

Crear los renderizadores es un poco más complicado, pero ese es el flujo que debes seguir y el jugador debería poder reproducir videos de respaldo.