в onPause() активности я передаю false в player.setPlayerWhenReady(), я нажимаю кнопку «Домой» телефона, поэтому вызывается onPause() активности, но я держу приложение в фоновом режиме, я не удаляю из стека, примерно через 20 минут я повторно открыть приложение, поэтому было вызвано onStart() активности, где снова инициализируйте exoplayer, и я передаю действительный URL-адрес видео, затем я передаю player.setPlayerWhenReady(true), но exo player напрямую вызывает onPlayerError() в своем обратном вызове.. но когда я закрываю приложение из стека и снова открыть приложение exo player работает нормально ... пожалуйста, помогите решить эту проблему.
код такой..
simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player_view);
simpleExoPlayerView.requestFocus();
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
Log.d(AppConstants.LOG_TAG_LOG, "initializePlayer: player instance in initializePlayer is ="+player);
simpleExoPlayerView.setPlayer(player);
Log.d(AppConstants.LOG_TAG_LOG, "initializePlayer: shouldAutoPlay is ="+shouldAutoPlay);
player.setPlayWhenReady(true);
DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource mediaSource = new ExtractorMediaSource(Uri.parse(url), mediaDataSourceFactory,
extractorsFactory, null, null);
durationSet = false;
player.prepare(mediaSource);
seekToValue = scSchedule.getSeekPosition();
if (seekToValue != null) {
player.seekTo(seekToValue);
} else {
player.seekTo(0);
seekToValue = 0L;
}
player.addListener(new Player.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_ENDED) {
Log.d(AppConstants.LOG_TAG_LOG,
"In FullScreenVideoActivity::onPlayerStateChanged() ");
// increment videoViewCount in Analytics table
AppUtils.getInstance().updateAnalytics(false,
-1, true);
// update video watched duration in Analytics table
int videoViewDuration = 0;
if (seekToValue != null) {
if (filmDuration > seekToValue) {
videoViewDuration = (int) (filmDuration - seekToValue);
AppUtils.getInstance().updateAnalytics(false,
videoViewDuration / 1000,
false);
}
}
isVideoEnded = true;
videoEnded();
finish();
} else if (playbackState == ExoPlayer.STATE_READY && !durationSet) {
filmDuration = (int) player.getDuration();
Log.d(AppConstants.LOG_TAG_LOG,
"In FullScreenVideoActivity::onPlayerStateChanged(), " +
"filmDuration = " + filmDuration);
durationSet = true;
}
}
@Override
public void onRepeatModeChanged(int repeatMode) {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
Log.d(AppConstants.LOG_TAG_LOG,"onPlayerError() called");
}
@Override
public void onPositionDiscontinuity() {
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
}
});
private void releasePlayer() {
if (player != null) {
shouldAutoPlay = player.getPlayWhenReady();
player.release();
player = null;
trackSelector = null;
}
}
я вызываю этот метод выпуска в onDestroy() активности.