diff --git a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt index ae1a109ba558fe2484a3f2a211036658407089d1..6d8396d8b55227302f0d4c90f9cbf57091dbde84 100644 --- a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt +++ b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt @@ -150,7 +150,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout { Logger.v(TAG, "Attached onConnectionAvailable listener."); StateApp.instance.onConnectionAvailable.subscribe(_referenceObject) { - Logger.v(TAG, "onConnectionAvailable"); + Logger.v(TAG, "onConnectionAvailable connectivityLossTime = $_connectivityLossTime_ms, position = $position, duration = $duration"); val pos = position; val dur = duration; @@ -158,25 +158,37 @@ abstract class FutoVideoPlayerBase : RelativeLayout { if (_shouldPlaybackRestartOnConnectivity && abs(pos - dur) > 2000) { if (Settings.instance.playback.restartPlaybackAfterConnectivityLoss == 1) { val lossTime_ms = _connectivityLossTime_ms - if (lossTime_ms != null && System.currentTimeMillis() - lossTime_ms < 1000 * 30) { - shouldRestartPlayback = true + if (lossTime_ms != null) { + val lossDuration_ms = System.currentTimeMillis() - lossTime_ms + Logger.v(TAG, "onConnectionAvailable lossDuration=$lossDuration_ms") + if (lossDuration_ms < 1000 * 10) { + shouldRestartPlayback = true + } } } else if (Settings.instance.playback.restartPlaybackAfterConnectivityLoss == 2) { val lossTime_ms = _connectivityLossTime_ms - if (lossTime_ms != null && System.currentTimeMillis() - lossTime_ms < 1000 * 10) { - shouldRestartPlayback = true + if (lossTime_ms != null) { + val lossDuration_ms = System.currentTimeMillis() - lossTime_ms + Logger.v(TAG, "onConnectionAvailable lossDuration=$lossDuration_ms") + if (lossDuration_ms < 1000 * 30) { + shouldRestartPlayback = true + } } } else if (Settings.instance.playback.restartPlaybackAfterConnectivityLoss == 3) { shouldRestartPlayback = true } } + Logger.v(TAG, "onConnectionAvailable shouldRestartPlayback = $shouldRestartPlayback"); + if (shouldRestartPlayback) { Logger.i(TAG, "Playback ended due to connection loss, resuming playback since connection is restored."); exoPlayer?.player?.playWhenReady = true; exoPlayer?.player?.prepare(); exoPlayer?.player?.play(); } + + _connectivityLossTime_ms = null; }; } @@ -524,6 +536,8 @@ abstract class FutoVideoPlayerBase : RelativeLayout { } protected open fun onPlayerError(error: PlaybackException) { + Logger.i(TAG, "onPlayerError error=$error error.errorCode=${error.errorCode} connectivityLoss"); + when (error.errorCode) { PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> { onDatasourceError.emit(error); @@ -536,9 +550,9 @@ abstract class FutoVideoPlayerBase : RelativeLayout { //PlaybackException.ERROR_CODE_IO_NO_PERMISSION, //PlaybackException.ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE, PlaybackException.ERROR_CODE_IO_UNSPECIFIED -> { - Logger.i(TAG, "IO error, set _shouldPlaybackRestartOnConnectivity=true"); _shouldPlaybackRestartOnConnectivity = true; _connectivityLossTime_ms = System.currentTimeMillis() + Logger.i(TAG, "IO error, set _shouldPlaybackRestartOnConnectivity=true _connectivityLossTime_ms=$_connectivityLossTime_ms"); } } }