Я новичок в Android Studio и ExoPlayer. Я запустил проигрыватель для воспроизведения видео, но я не знаю, чтобы определить, выполняет ли проигрыватель буферизацию, и показать индикатор выполнения, чтобы уведомить пользователя. Любая помощь, пожалуйста?
Exoplayer и ProgressBar
comment
этот пример: прослушивание состояний проигрывателя для отображения индикатора выполнения во время буферизации, возможность изменять видео- и аудиодорожки, пропускать 10 секунд, как в приложении YouTube, и многое другое.
- person Soon Santos   schedule 06.08.2018
Ответы (5)
Вы должны реализовать ExoPlayer.EventListener
и переопределить onPlayerStateChanged()
, чтобы определять состояние воспроизведения видео (STATE_IDLE, STATE_BUFFERING, STATE_READY, STATE_ENDED)
person
Louis Nguyen
schedule
16.03.2017
Как скрыть кнопку воспроизведения при отображении ProgressBar? (как YouTube)
- person roghayeh hosseini; 13.04.2019
@roghayehhosseini использует настраиваемый вид для контроллера exo, и вы можете скрыть любую кнопку, которую хотите.
- person Louis Nguyen; 16.04.2019
Я использую настраиваемое представление, но как это сделать в классе PlayerEventListener?
- person roghayeh hosseini; 17.04.2019
Если я хочу отображать свою шкалу прогресса за пределами PlayerView, то как это сделать, пожалуйста, посоветуйте мне
- person Gyan Swaroop Awasthi; 06.05.2021
Может кому будет полезно:
<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"/>
вы можете просто изменить атрибут XML show_buffering, если используете Exoplayer2.
Также см. PlayerView.setShowBuffering(PlayerView.ShowBuffering)
для подробнее.
person
remain4life
schedule
25.09.2018
Его
app:show_buffering="always|never|when_playing"
вместо истины / ложи
- person Pratik Butani; 04.09.2019
Спасибо за добавление, теперь метод
setShowBuffering(boolean showBuffering)
устарел (начиная с версии 2.9.0), рекомендуется setShowBuffering (int showBuffering), поэтому старые атрибуты xml не работают в последних версиях.
- person remain4life; 05.09.2019
что мы тогда можем использовать?
- person NehaK; 18.06.2021
в файле макета:
<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) {}
});
person
Firoz Ahmed
schedule
27.07.2017
ExoPlayer.STATE_BUFFERING
устарел, используйте Player.STATE_BUFFERING
вместо
- person Shan Xeeshi; 22.02.2018
Это помогло мне, и, как и комментарий @ShanXeeshi, ExoPlayer.STATE_BUFFERING устарел, используйте Player.STATE_BUFFERING
- person Harry .Naeem; 24.10.2018
Как скрыть кнопку воспроизведения при отображении ProgressBar? (как YouTube)
- person roghayeh hosseini; 13.04.2019
Видя ответы других, я так и сделал. Я использовал 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() {
}
};
person
Harry .Naeem
schedule
24.10.2018
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() {
}
};
person
Ardit Zeza
schedule
03.12.2018