From 8b2ff188420c6a074d68990c6eed59862a8963a7 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Tue, 26 May 2026 03:14:19 +0200 Subject: [PATCH] fix(android): improve mpeg-ts seeking --- .../main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt b/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt index f136c8b6..3b981dd7 100644 --- a/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt +++ b/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt @@ -56,6 +56,7 @@ import androidx.media3.extractor.DefaultExtractorsFactory import androidx.media3.extractor.mkv.MatroskaExtractor import androidx.media3.extractor.mp4.FragmentedMp4Extractor import androidx.media3.extractor.mp4.Mp4Extractor +import androidx.media3.extractor.ts.TsExtractor import androidx.media3.ui.AspectRatioFrameLayout import androidx.media3.ui.CaptionStyleCompat import androidx.media3.ui.SubtitleView @@ -96,6 +97,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener { private const val WATCHDOG_TIMEOUT_MS = 8000L private const val DECODER_HANG_TIMEOUT_MS = 5000L private const val FPS_SAMPLE_COUNT = 8 + private const val TS_TIMESTAMP_SEARCH_PACKETS = 1800 // Codec capability caches — codec support doesn't change at runtime private val hwAudioDecoderCache = HashMap() @@ -456,6 +458,9 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener { .setReadTimeoutMs(10_000) dataSourceFactory = DefaultDataSource.Factory(activity, httpDataSourceFactory!!) val extractorsFactory = DefaultExtractorsFactory() + // High-bitrate Plex DVR MPEG-TS recordings can have sparse PCR packets; the default + // 600-packet window may leave duration unknown and seeking disabled. + .setTsExtractorTimestampSearchBytes(TS_TIMESTAMP_SEARCH_PACKETS * TsExtractor.TS_PACKET_SIZE) // Inline buildWithAssSupport to retain AssHandler reference for font scale control. // OVERLAY_OPEN_GL uses TextureView which follows normal View hierarchy z-ordering,