私はAndroid= StudioおよびExoPlayerを初めて使用しました。ビデオを再生するためにプレーヤーを開始しましたが、プレーヤーがバッファリングしているかどうかを検出し、ユーザーに通知するために進行状況バーを表示しますお願いします?
_ExoPlayer.EventListener
_を実装し、onPlayerStateChanged()
をオーバーライドして、ビデオの進行状況を検出する必要があります(_STATE_IDLE, STATE_BUFFERING, STATE_READY, STATE_ENDED)
_
レイアウトファイル内:
<ProgressBar
Android:id="@+id/progress_bar"
Android:layout_width="48dp"
Android:layout_height="48dp"
Android:layout_gravity="center"/>
プレーヤーのアクティビティ:
player.addListener(new ExoPlayer.EventListener() {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {}
@Override
public void onLoadingChanged(boolean isLoading) {}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == ExoPlayer.STATE_BUFFERING){
progressBar.setVisibility(View.VISIBLE);
} else {
progressBar.setVisibility(View.INVISIBLE);
}
}
@Override
public void onPlayerError(ExoPlaybackException error) {}
@Override
public void onPositionDiscontinuity() {}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {}
});
多分それは誰かに役立つでしょう:
_<com.google.Android.exoplayer2.ui.PlayerView
Android:id="@+id/player_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/black"
app:show_buffering="true"/>
_
exoplayer2を使用している場合は、XML属性show_bufferingを変更するだけです。
詳細については PlayerView.setShowBuffering(PlayerView.ShowBuffering)
もご覧ください。
他人の答えを見て、こうやってやった。 ExoPlayerバージョン2.7.0を使用しました。
private Player.EventListener eventListener = new Player.EventListener() {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest, int reason) {
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
//Log.i(TAG,"onTracksChanged");
}
@Override
public void onLoadingChanged(boolean isLoading) {
//Log.i(TAG,"onLoadingChanged");
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
switch (playbackState) {
case Player.STATE_ENDED:
Log.i("EventListenerState", "Playback ended!");
exoPlayer.setPlayWhenReady(false);
break;
case Player.STATE_READY:
Log.i("EventListenerState", "Playback State Ready!");
hideProgressBar();
break;
case Player.STATE_BUFFERING:
Log.i("EventListenerState", "Playback buffering");
showProgressBar();
break;
case Player.STATE_IDLE:
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() {
}
};
mPlayer.addListener(eventListener);
Player.EventListener eventListener = new Player.EventListener() {
@Override
public void onTimelineChanged(Timeline timeline, 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_ENDED:
Log.i("EventListenerState", "Playback ended!");
finish();
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() {
}
};