mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2026-05-16 04:52:39 +02:00
Possible fix for dropping live playback
This commit is contained in:
@@ -52,6 +52,7 @@ import com.futo.polycentric.core.toBase64Url
|
||||
import com.futo.platformplayer.polycentric.ModerationsManager
|
||||
import kotlinx.coroutines.*
|
||||
import java.io.File
|
||||
import java.time.OffsetDateTime
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.system.measureTimeMillis
|
||||
@@ -181,6 +182,9 @@ class StateApp {
|
||||
private var _lastMeteredState: Boolean = false;
|
||||
private var _connectivityManager: ConnectivityManager? = null;
|
||||
private var _lastNetworkState: NetworkState = NetworkState.UNKNOWN;
|
||||
private var _lastConnectivityChange: OffsetDateTime? = null;
|
||||
val lastConnectivityChange
|
||||
get() = _lastConnectivityChange;
|
||||
|
||||
//Logging
|
||||
private var _fileLogConsumer: FileLogConsumer? = null;
|
||||
@@ -894,8 +898,11 @@ class StateApp {
|
||||
val beforeMeteredState = _lastMeteredState;
|
||||
_lastNetworkState = getCurrentNetworkState();
|
||||
_lastMeteredState = isCurrentMetered();
|
||||
if(beforeNetworkState != _lastNetworkState || beforeMeteredState != _lastMeteredState)
|
||||
if(beforeNetworkState != _lastNetworkState || beforeMeteredState != _lastMeteredState) {
|
||||
Logger.i(TAG, "Network capabilities changed (State: ${_lastNetworkState}, Metered: ${_lastMeteredState})");
|
||||
_lastConnectivityChange = OffsetDateTime.now();
|
||||
}
|
||||
|
||||
} catch(ex: Throwable) {
|
||||
Logger.w(TAG, "Failed to update network state", ex);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ import androidx.media3.exoplayer.dash.manifest.DashManifestParser
|
||||
import androidx.media3.exoplayer.drm.DefaultDrmSessionManager
|
||||
import androidx.media3.exoplayer.drm.HttpMediaDrmCallback
|
||||
import androidx.media3.exoplayer.hls.HlsMediaSource
|
||||
import androidx.media3.exoplayer.hls.playlist.HlsPlaylistTracker
|
||||
import androidx.media3.exoplayer.source.BehindLiveWindowException
|
||||
import androidx.media3.exoplayer.source.MediaSource
|
||||
import androidx.media3.exoplayer.source.MergingMediaSource
|
||||
import androidx.media3.exoplayer.source.ProgressiveMediaSource
|
||||
@@ -77,6 +79,7 @@ import com.futo.platformplayer.engine.exceptions.ScriptCaptchaRequiredException
|
||||
import com.futo.platformplayer.engine.exceptions.ScriptReloadRequiredException
|
||||
import com.futo.platformplayer.fragment.mainactivity.main.ChannelFragment
|
||||
import com.futo.platformplayer.fragment.mainactivity.main.CreatorSearchResultsFragment
|
||||
import com.futo.platformplayer.getNowDiffMiliseconds
|
||||
import com.futo.platformplayer.helpers.VideoHelper
|
||||
import com.futo.platformplayer.logging.Logger
|
||||
import com.futo.platformplayer.states.StateApp
|
||||
@@ -1008,7 +1011,19 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
protected open fun onPlayerError(error: PlaybackException) {
|
||||
Logger.i(TAG, "onPlayerError error=$error error.errorCode=${error.errorCode} connectivityLoss");
|
||||
Logger.i(TAG, "onPlayerError error=$error error.errorCode=${error.errorCode} connectivityLoss, cause=${error.cause}");
|
||||
|
||||
if(error is BehindLiveWindowException) {
|
||||
Logger.e(TAG, "BehindLiveWindowException, " + error.message);
|
||||
reloadMediaSource(true, true);
|
||||
return;
|
||||
}
|
||||
if(error != null && error.cause is HlsPlaylistTracker.PlaylistStuckException) {
|
||||
Logger.e(TAG, "PlaylistStuckException");
|
||||
reloadMediaSource(true, true);
|
||||
UIDialogs.toast("Live playback error, reloading..");
|
||||
return;
|
||||
}
|
||||
|
||||
when (error.errorCode) {
|
||||
PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> {
|
||||
|
||||
Reference in New Issue
Block a user