fix: harden playback and discover state
This commit is contained in:
@@ -112,8 +112,8 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
|
||||
|
||||
private var assGlCrashHandlerInstalled = false
|
||||
|
||||
private var cronetEngine: CronetEngine? = null
|
||||
private var cronetUnavailable = false
|
||||
@Volatile private var cronetEngine: CronetEngine? = null
|
||||
@Volatile private var cronetUnavailable = false
|
||||
private fun getCronetEngine(context: Context): CronetEngine? {
|
||||
cronetEngine?.let { return it }
|
||||
if (cronetUnavailable) return null
|
||||
@@ -2836,6 +2836,10 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
|
||||
} else {
|
||||
positionMs.coerceAtLeast(0L)
|
||||
}
|
||||
// A user seek is authoritative. Do not let a pending start-position restore
|
||||
// from open/reload recovery re-seek back over an early seek near zero once
|
||||
// ExoPlayer reports STATE_READY.
|
||||
pendingStartPositionMs = 0L
|
||||
player.seekTo(clampedPositionMs)
|
||||
lastPosition = clampedPositionMs
|
||||
delegate?.onPropertyChange("time-pos", clampedPositionMs / 1000.0)
|
||||
|
||||
@@ -115,12 +115,25 @@ class AssHandler(
|
||||
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
||||
super.onMediaItemTransition(mediaItem, reason)
|
||||
Log.i("AssHandler", "onMediaItemTransition: item = $mediaItem, reason = $reason")
|
||||
resetMediaState(releaseNative = true)
|
||||
}
|
||||
|
||||
private fun resetMediaState(releaseNative: Boolean) {
|
||||
val oldRender = render
|
||||
val oldTracks = availableTracks.values.toList()
|
||||
|
||||
render = null
|
||||
track = null
|
||||
format = null
|
||||
availableTracks.clear()
|
||||
pendingFonts.clear()
|
||||
videoSize = Size.ZERO
|
||||
renderCallback?.invoke(null)
|
||||
|
||||
if (releaseNative) {
|
||||
oldRender?.release()
|
||||
oldTracks.forEach { it.release() }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -359,12 +372,7 @@ class AssHandler(
|
||||
videoFrameCallback = null
|
||||
player?.clearVideoFrameMetadataListener(videoFrameMetadataListener)
|
||||
player = null
|
||||
render?.release()
|
||||
render = null
|
||||
availableTracks.values.forEach { it.release() }
|
||||
availableTracks.clear()
|
||||
track = null
|
||||
pendingFonts.clear()
|
||||
resetMediaState(releaseNative = true)
|
||||
if (assDelegate.isInitialized()) {
|
||||
ass.release()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user