mirror of
https://github.com/bbara04/Purefin.git
synced 2026-03-31 17:10: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)
|
refreshMetadata(mediaItem)
|
||||||
refreshQueue()
|
refreshQueue()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPositionDiscontinuity(
|
||||||
|
oldPosition: Player.PositionInfo,
|
||||||
|
newPosition: Player.PositionInfo,
|
||||||
|
reason: Int
|
||||||
|
) {
|
||||||
|
if (reason == Player.DISCONTINUITY_REASON_SEEK &&
|
||||||
|
newPosition.positionMs < oldPosition.positionMs
|
||||||
|
) {
|
||||||
|
refreshSubtitleRendererOnBackwardSeek()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
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() {
|
fun release() {
|
||||||
scope.cancel()
|
scope.cancel()
|
||||||
player.removeListener(listener)
|
player.removeListener(listener)
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ object VideoPlayerModule {
|
|||||||
.setTrackSelector(trackSelector)
|
.setTrackSelector(trackSelector)
|
||||||
.setPauseAtEndOfMediaItems(true)
|
.setPauseAtEndOfMediaItems(true)
|
||||||
.setLoadControl(loadControl)
|
.setLoadControl(loadControl)
|
||||||
.setSeekParameters(SeekParameters.CLOSEST_SYNC)
|
.setSeekParameters(SeekParameters.PREVIOUS_SYNC)
|
||||||
.setAudioAttributes(audioAttributes, true)
|
.setAudioAttributes(audioAttributes, true)
|
||||||
.build()
|
.build()
|
||||||
.apply {
|
.apply {
|
||||||
|
|||||||
Reference in New Issue
Block a user