mirror of
https://github.com/bbara04/Purefin.git
synced 2026-04-01 01:30:08 +02:00
fix: restore subtitles after backward seek
Switch seek parameters from CLOSEST_SYNC to PREVIOUS_SYNC so seeks always land at or before the requested position, preventing subtitle cues from being skipped. On backward seek discontinuity, briefly disable and re-enable the text track to flush TextRenderer state so the current cue is re-delivered.
This commit is contained in:
@@ -94,6 +94,18 @@ class PlayerManager @Inject constructor(
|
||||
refreshMetadata(mediaItem)
|
||||
refreshQueue()
|
||||
}
|
||||
|
||||
override fun onPositionDiscontinuity(
|
||||
oldPosition: Player.PositionInfo,
|
||||
newPosition: Player.PositionInfo,
|
||||
reason: Int
|
||||
) {
|
||||
if (reason == Player.DISCONTINUITY_REASON_SEEK &&
|
||||
newPosition.positionMs < oldPosition.positionMs
|
||||
) {
|
||||
refreshSubtitleRendererOnBackwardSeek()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
@@ -270,6 +282,17 @@ class PlayerManager @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun refreshSubtitleRendererOnBackwardSeek() {
|
||||
val currentParams = player.trackSelectionParameters
|
||||
if (C.TRACK_TYPE_TEXT in currentParams.disabledTrackTypes) return
|
||||
scope.launch {
|
||||
player.trackSelectionParameters = currentParams.buildUpon()
|
||||
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, true)
|
||||
.build()
|
||||
player.trackSelectionParameters = currentParams
|
||||
}
|
||||
}
|
||||
|
||||
fun release() {
|
||||
scope.cancel()
|
||||
player.removeListener(listener)
|
||||
|
||||
@@ -66,7 +66,7 @@ object VideoPlayerModule {
|
||||
.setTrackSelector(trackSelector)
|
||||
.setPauseAtEndOfMediaItems(true)
|
||||
.setLoadControl(loadControl)
|
||||
.setSeekParameters(SeekParameters.CLOSEST_SYNC)
|
||||
.setSeekParameters(SeekParameters.PREVIOUS_SYNC)
|
||||
.setAudioAttributes(audioAttributes, true)
|
||||
.build()
|
||||
.apply {
|
||||
|
||||
Reference in New Issue
Block a user