More robust player release (#601)

This commit is contained in:
self-similarity 2023-09-14 10:53:35 +00:00 committed by GitHub
parent 8fe34d3d2a
commit a5450e5da2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 4 deletions

View file

@ -517,6 +517,7 @@ abstract class AbstractPlayerFragment(
canEnterPipMode = false canEnterPipMode = false
mMediaSession?.release() mMediaSession?.release()
mMediaSession = null mMediaSession = null
playerView?.player = null
SubtitlesFragment.applyStyleEvent -= ::onSubStyleChanged SubtitlesFragment.applyStyleEvent -= ::onSubStyleChanged
keepScreenOn(false) keepScreenOn(false)

View file

@ -51,6 +51,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey
import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey
import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.USER_AGENT
import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.mvvm.debugAssert
import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle
@ -85,6 +86,12 @@ const val toleranceAfterUs = 300_000L
class CS3IPlayer : IPlayer { class CS3IPlayer : IPlayer {
private var isPlaying = false private var isPlaying = false
private var exoPlayer: ExoPlayer? = null private var exoPlayer: ExoPlayer? = null
set(value) {
// If the old value is not null then the player has not been properly released.
debugAssert({ field != null && value != null }, { "Previous player instance should be released!" })
field = value
}
var cacheSize = 0L var cacheSize = 0L
var simpleCacheSize = 0L var simpleCacheSize = 0L
var videoBufferMs = 0L var videoBufferMs = 0L
@ -682,13 +689,13 @@ class CS3IPlayer : IPlayer {
metadataRendererOutput metadataRendererOutput
).map { ).map {
if (it is TextRenderer) { if (it is TextRenderer) {
currentTextRenderer = CustomTextRenderer( val currentTextRenderer = CustomTextRenderer(
subtitleOffset, subtitleOffset,
textRendererOutput, textRendererOutput,
eventHandler.looper, eventHandler.looper,
CustomSubtitleDecoderFactory() CustomSubtitleDecoderFactory()
) ).also { this.currentTextRenderer = it }
currentTextRenderer!! currentTextRenderer
} else it } else it
}.toTypedArray() }.toTypedArray()
} }
@ -1323,7 +1330,7 @@ class CS3IPlayer : IPlayer {
override fun reloadPlayer(context: Context) { override fun reloadPlayer(context: Context) {
Log.i(TAG, "reloadPlayer") Log.i(TAG, "reloadPlayer")
exoPlayer?.release() releasePlayer(false)
currentLink?.let { currentLink?.let {
loadOnlinePlayer(context, it) loadOnlinePlayer(context, it)
} ?: currentDownloadedFile?.let { } ?: currentDownloadedFile?.let {