Android ExoPlayer-一个接一个地播放10个文件

Android ExoPlayer-一个接一个地播放10个文件,android,video,exoplayer,Android,Video,Exoplayer,我有10个视频我需要播放,一旦一个完成,下一个开始播放 我用的是,我用的是这个例子。 我可以播放一个视频,但如果我尝试播放下一个视频,它将无法启动 如果我试图控制玩家,而玩家又开始玩,它就会崩溃 private void loadvideo() { Uri uri = Uri.parse(VIDEO_LIBRARY_URL + currentVideo + ".mp4"); sampleSource = new FrameworkSampleSource(this, uri, n

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

我用的是,我用的是这个例子。 我可以播放一个视频,但如果我尝试播放下一个视频,它将无法启动

如果我试图控制玩家,而玩家又开始玩,它就会崩溃

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

        }
    });

}
我做错了什么? 如何播放视频


谢谢。

好的,回答我自己的问题。 在这个例子中,googleinit在OnResume()上调用ExoPlayer。 我必须为每一个这样的视频重新初始化:

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

如果有人有更好的想法,请告诉我。

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

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

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

创建渲染器有点复杂,但这是您应该遵循的流程,播放器应该能够背靠背播放视频。

我正在使用Exoplayer更改mp4视频成功。我在演示中使用了这个示例。 1.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.PlayerActivity.java中的演示项目: 添加方法:

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

记住在调用changeVideo方法之前更改参数contentUri。

还有另一个解决方案,您可以参考ConcatenatingMediaSource来实现自动播放下一个媒体

在演示应用程序示例中: 1.启动ExoPlayer 2.选择播放列表
3.选择Cats->Dogs

使用
连接MediaSource
按顺序播放文件。 例如,要播放2个媒体URI(
firstVideoUri
secondVideoUri
),请使用以下代码:

MediaSource firstSource =
    new ExtractorMediaSource.Factory(...).createMediaSource(firstVideoUri);
MediaSource secondSource =
    new ExtractorMediaSource.Factory(...).createMediaSource(secondVideoUri);

ConcatenatingMediaSource concatenatedSource =
    new ConcatenatingMediaSource(firstSourceTwice, secondSource);

然后使用
concatenatedSource
按顺序播放媒体文件。

崩溃时会出现什么错误?还有,loadNextVideo()代码是什么样子的。这并不能解决我的问题:(@Marky17在实例化新实例调用releasePlayer()之前)方法。@Shahar Hi我正在尝试使用ExoPlayer创建一个简单的视频播放器程序,但尚未完成,我已检查了您的Github存储库,但未在其中找到您的ExoPlayer示例…请发布您的示例并与我共享链接…因此我将从中学习…我也遇到了同样的问题,此解决方案对我来说并不明显在再次准备渲染器之前,您必须搜索0。谢谢。