プレイリストの形でビデオを次々と再生しようとしています。Android Exoplayer を使用してファイルを再生していますが、メディア ファイルの最後をリッスンするリスナーが mediaplayer にありません。exoplayer を使用してメディア ファイルの最後を聞く方法はありますか。
11 に答える
Exoplayer は、メディア プレーヤーにはない事前実装を提供します。
Android による Exoplayerの事前の例では、 FullPlayerActivity.java で、 STATE_ENDEDを提供するonStateChangedを実装しています。
このページの右側のセクションのRELATED SAMPLESという用語から例をダウンロードできます。
あなたはこれを行うことができます:
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);
しかし、@Murtaza Khursheed Hussainの答えは正しいです!素敵なコードの日を!他に何か必要な場合はお知らせください。
インターフェース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() {
}
});
exoplayer でプレイリストを使用していましたが、完了後にメディアを停止したいと考えていました。
私にとっては、プレイリストが内部で終了したときにPlayer.STATE_ENDEDが呼び出されていました
私のユースケースを満たすために、最初にこれをexoplayerに設定しました
simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
したがって、EventListenerを使用する代わりに、 onPositionDiscontinuityを eventTime パラメータでオーバーライドするAnalyticsListenerを使用し、単純なコードを追加してメディアが再起動したかどうかを確認しました。
@Override
public void onPositionDiscontinuity(EventTime eventTime, int reason) {
if (eventTime.currentPlaybackPositionMs / 1000 < 1) {
exoPlayer.setPlayWhenReady(false);
tvReplay.setVisibility(View.VISIBLE);
}
}
これがあなたのユースケースに役立つことを願っています
DefaultEventListener
とonPlayerStateChanged()
は非推奨です。
使用Player.EventListener
してonPlaybackStateChanged()
コトリンコード:
player!!.addListener(object : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) {
if (state == Player.STATE_ENDED) {
// your code here
}
}
})