ExoPlayer – 连续播放10个文件

我有10个video需要播放,一旦完成,下一个开始播放。

我正在使用Google的ExoPlayer ,我使用DEMO @ GitHub中的示例。 我可以播放1个video,但如果我尝试播放下一个,它不会启动。

如果我尝试重新启动播放器,并重新开始播放,则会崩溃。

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

我究竟做错了什么? 我怎样才能播放video的连续性?

谢谢。

Solutions Collecting From Web of "ExoPlayer – 连续播放10个文件"

您可以重复使用ExoPlayer,直到您调用release(),然后不再使用它。

要更改当前正在播放的媒体,您基本上需要执行以下步骤:

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

创build渲染器有一点涉及,但这是你应该遵循的stream程,玩家应该能够播放video。

我正在使用Exoplayer更改mp4video成功。 我使用DEMO中的示例。 1. DemoPlayer.java中的DEMO项目:

  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. PlayerActivity.java中的DEMO项目:add方法:

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

在调用changeVideo方法之前记得更改param contentUri。

好的,回答我自己的问题。 在这个例子中,google在OnResume()中初始化ExoPlayer。 我不得不重新启动每一个这样的video:

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

如果有人有一个更好的主意,请让我知道。

还有另一个解决scheme,你可以参考ConcatenatingMediaSource来实现自动播放下一个媒体。

在演示应用示例中:1.启动ExoPlayer 2.select播放列表3.selectCats-> Dogs