如何实现oncompletionlistener来检测Exoplayer中媒体文件的结尾

use*_*215 19 android exoplayer

我试图以播放列表的形式一个接一个地播放视频.我正在使用Android Exoplayer来播放我的文件,但是没有像媒体播放器那样的听众能够收听媒体文件的结尾.请告诉我一个方法使用exoplayer .thankyou听媒体文件的结尾..

Joe*_*her 33

我知道这是旧的,但只是为了扩展已接受的答案:

exoPlayer.addListener(this);

.....

@Override
public void onPlayerStateChanged(boolean playWhenReady, int state) {

    if (state == ExoPlayer.STATE_ENDED){
        //player back ended
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在我的例子中调用了 `onPositionDiscontinuity()` 那么如何处理? (2认同)

Mur*_*ain 27

Exoplayer提供媒体播放器没有的高级实现.

在Android 的Exoplayer的例子中,在FullPlayerActivity.java中他们实现了onStateChanged,它提供了STATE_ENDED

您可以在术语" 相关样本"下的本页右侧部分下载示例

  • 当 MediaSource 是 LoopingMediaSource 时,不会触发 STATE_ENDED 事件。 (4认同)
  • 链接坏了 (3认同)

Mor*_*Koh 11

Google已弃用ExoPlayer.STATE_ENDED并替换为Player.STATE_ENDED

由于这篇文章已经有一段时间了,因此我将Kotlin在下面写下一个侦听器的版本。

this.simpleExoPlayer?.addListener(object : Player.DefaultEventListener() {
            override fun onPlayerStateChanged(playWhenReady: Boolean,playbackState: Int) {
                when (playbackState) {
                    Player.STATE_IDLE -> {}
                    Player.STATE_BUFFERING -> {}
                    Player.STATE_READY -> {}
                    Player.STATE_ENDED -> {}
                }
            }
        })
Run Code Online (Sandbox Code Playgroud)

  • 似乎 `EventListener` 现在也已弃用,现在似乎只需要 `Player.Listener` (2认同)

Cri*_*fer 8

你可以这样做:

playerExo.addListener(new ExoPlayer.Listener() {

            @Override
            public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {

                switch(playbackState) {
                    case ExoPlayer.STATE_BUFFERING:
                        break;
                    case ExoPlayer.STATE_ENDED:
                        //do what you want
                        break;
                    case ExoPlayer.STATE_IDLE:
                        break;
                    case ExoPlayer.STATE_PREPARING:
                        break;
                    case ExoPlayer.STATE_READY:
                        break;
                    default:
                        break;
                }
            }

            @Override
            public void onPlayWhenReadyCommitted() {

            }

            @Override
            public void onPlayerError(ExoPlaybackException error) {

            }
        });
        playerExo.seekTo(0);
        playerExo.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)

但@Murtaza Khursheed Hussain的回答是对的!有一个很好的代码日!如果您需要别的东西,请告诉我!


Leo*_*aim 6

您必须实现Player.EventLister接口并将其添加到exoPlayer中。

只需在onPlayerStateChanged方法上编写代码。参见代码。

exoPlayer.addListener( new Player.EventListener() {
            @Override
            public void onTimelineChanged(Timeline timeline, @Nullable Object manifest, int reason) {

            }

            @Override
            public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {

            }

            @Override
            public void onLoadingChanged(boolean isLoading) {

            }

            @Override
            public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {

                switch(playbackState) {
                    case Player.STATE_BUFFERING:
                        break;
                    case Player.STATE_ENDED:
                        //Here you do what you want
                        break;
                    case Player.STATE_IDLE:
                        break;
                    case Player.STATE_READY:
                        break;
                    default:
                        break;
                }
            }

            @Override
            public void onRepeatModeChanged(int repeatMode) {

            }

            @Override
            public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {

            }

            @Override
            public void onPlayerError(ExoPlaybackException error) {

            }

            @Override
            public void onPositionDiscontinuity(int reason) {

            }

            @Override
            public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {

            }

            @Override
            public void onSeekProcessed() {

            }


        });
Run Code Online (Sandbox Code Playgroud)