9

再生する必要があるビデオが 10 個あります。1 つが完了すると、次のビデオの再生が開始されます。

私はGoogle の ExoPlayerを使用しています。DEMO @ GitHubの例を使用しています。1 つのビデオを再生できますが、次のビデオを再生しようとすると、開始されません。

プレーヤーを再初期化しようとして、もう一度再生を開始すると、クラッシュします。

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

        }
    });

}

私は何を間違っていますか?ビデオの連続性を再生するにはどうすればよいですか?

ありがとう。

4

5 に答える 5

4

Exoplayer change mp4 video success を使用しています。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 プロジェクト: メソッドを追加:

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

changeVideo メソッドを呼び出す前に、change param contentUri を覚えておいてください。

于 2015-08-13T03:31:16.720 に答える