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 com.futo.platformplayer.polycentric.ModerationsManager
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.time.OffsetDateTime
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.system.measureTimeMillis
|
import kotlin.system.measureTimeMillis
|
||||||
@@ -181,6 +182,9 @@ class StateApp {
|
|||||||
private var _lastMeteredState: Boolean = false;
|
private var _lastMeteredState: Boolean = false;
|
||||||
private var _connectivityManager: ConnectivityManager? = null;
|
private var _connectivityManager: ConnectivityManager? = null;
|
||||||
private var _lastNetworkState: NetworkState = NetworkState.UNKNOWN;
|
private var _lastNetworkState: NetworkState = NetworkState.UNKNOWN;
|
||||||
|
private var _lastConnectivityChange: OffsetDateTime? = null;
|
||||||
|
val lastConnectivityChange
|
||||||
|
get() = _lastConnectivityChange;
|
||||||
|
|
||||||
//Logging
|
//Logging
|
||||||
private var _fileLogConsumer: FileLogConsumer? = null;
|
private var _fileLogConsumer: FileLogConsumer? = null;
|
||||||
@@ -894,8 +898,11 @@ class StateApp {
|
|||||||
val beforeMeteredState = _lastMeteredState;
|
val beforeMeteredState = _lastMeteredState;
|
||||||
_lastNetworkState = getCurrentNetworkState();
|
_lastNetworkState = getCurrentNetworkState();
|
||||||
_lastMeteredState = isCurrentMetered();
|
_lastMeteredState = isCurrentMetered();
|
||||||
if(beforeNetworkState != _lastNetworkState || beforeMeteredState != _lastMeteredState)
|
if(beforeNetworkState != _lastNetworkState || beforeMeteredState != _lastMeteredState) {
|
||||||
Logger.i(TAG, "Network capabilities changed (State: ${_lastNetworkState}, Metered: ${_lastMeteredState})");
|
Logger.i(TAG, "Network capabilities changed (State: ${_lastNetworkState}, Metered: ${_lastMeteredState})");
|
||||||
|
_lastConnectivityChange = OffsetDateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
} catch(ex: Throwable) {
|
} catch(ex: Throwable) {
|
||||||
Logger.w(TAG, "Failed to update network state", ex);
|
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.DefaultDrmSessionManager
|
||||||
import androidx.media3.exoplayer.drm.HttpMediaDrmCallback
|
import androidx.media3.exoplayer.drm.HttpMediaDrmCallback
|
||||||
import androidx.media3.exoplayer.hls.HlsMediaSource
|
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.MediaSource
|
||||||
import androidx.media3.exoplayer.source.MergingMediaSource
|
import androidx.media3.exoplayer.source.MergingMediaSource
|
||||||
import androidx.media3.exoplayer.source.ProgressiveMediaSource
|
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.engine.exceptions.ScriptReloadRequiredException
|
||||||
import com.futo.platformplayer.fragment.mainactivity.main.ChannelFragment
|
import com.futo.platformplayer.fragment.mainactivity.main.ChannelFragment
|
||||||
import com.futo.platformplayer.fragment.mainactivity.main.CreatorSearchResultsFragment
|
import com.futo.platformplayer.fragment.mainactivity.main.CreatorSearchResultsFragment
|
||||||
|
import com.futo.platformplayer.getNowDiffMiliseconds
|
||||||
import com.futo.platformplayer.helpers.VideoHelper
|
import com.futo.platformplayer.helpers.VideoHelper
|
||||||
import com.futo.platformplayer.logging.Logger
|
import com.futo.platformplayer.logging.Logger
|
||||||
import com.futo.platformplayer.states.StateApp
|
import com.futo.platformplayer.states.StateApp
|
||||||
@@ -1008,7 +1011,19 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
|||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
protected open fun onPlayerError(error: PlaybackException) {
|
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) {
|
when (error.errorCode) {
|
||||||
PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> {
|
PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user